UNIVERSITETET I OSLO Semistrukturerte data og XML Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information? -- T. S. Eliot Where is all the information we have lost in data structures? -- Albrecht Schmidt, Universitetet i Ålborg Institutt for Informatikk INF3100-12.4.2012 Ellen Munthe-Kaas 1
Bakgrunn Dataintegrasjon Forskjellige, uavhengige datakilder Forskjellige datamodeller og skjemaer Presentasjon av data på weben Ekstrahering av data fra weben Kunnskapsrepresentasjon og informasjonsutveksling Web services Semantic Web Semantisk teknologi INF3100-12.4.2012 Ellen Munthe-Kaas 2
Hva er semistrukturerte data? Strukturerte data: Data med et fast format Tabeller i relasjonsdatabaser,... Ustrukturerte data: Tekstdokumenter Semistrukturerte data: Deler har fast format, deler består av fri tekst Bøker: Tittelark (tittel, forfatter, utgivelsesår,, ISBN,..), kapitteloverskrifter,..., tekstavsnitt Websider: I utgangspunktet utformet for å leses og tolkes av mennesker, men med formatering og annen maskintolkbar informasjon på deler av innholdet CVer: Navn, fødselsdato, utdannelse, arbeidserfaring,..., prosjektbeskrivelser, forskningsplan,... INF3100-12.4.2012 Ellen Munthe-Kaas 3
Semistrukturerte data og XML Semistrukturerte data slik begrepet brukes i XMLverdenen = strukturerte data som ikke følger relasjonsmodellen, men der skjemaet beskriver mer generelle (treaktige) strukturer XML extensible Markup Language: Språk for å beskrive skjema- og annen metainformasjon sammen med dataene selv Tekstlig kan leses av mennesker og tolkes (parseres) av maskiner; støtter alle naturlige språk via Unicode I praksis brukes begrepet semistrukturerte data i XMLverdenen om alle data der strukturen er beskrevet i XML XML-dokumenter kan også brukes til å beskrive data som har en blanding av strukturert og ustrukturert format INF3100-12.4.2012 Ellen Munthe-Kaas 4
XML-porteføljen Skjemaspråk: DTD, XSD Spørrespråk: XPath, XQuery Transformasjonsspråk: XSLT, CSS APIer: DOM, SAX... INF3100-12.4.2012 Ellen Munthe-Kaas 5
XML Graftolkning Data og metainformasjon (tagger) Attributter Navnerom INF3100-12.4.2012 Ellen Munthe-Kaas 6
Graftolkning Rettet graf (treaktig) med navngitte kanter Nøyaktig én rotnode Atomære verdier (data) i løvnodene StarMovieData StarsIn Star Star Movie StarOf Carrie Fisher Name Address Address Street City Street Mark Hamill City Name Street Oak City StarsIn Redwood StarOf Title Star Wars Year 1977 Maple Locust Malibu Hollywood INF3100-12.4.2012 Ellen Munthe-Kaas 7
XML-eksempel <?xml version="1.0" encoding="utf-8"?> <StarMovieData> <Star> <Name>Carrie Fisher</Name> <Address> <Street>123 Maple Street</Street> <City>Hollywood</City> </Address> </Star> <Movie> <Title>Star Wars</Title> <Year>1977</Year> </Movie> </StarMovieData> Carrie Fisher Name Maple Address Street Star City Hollywood StarMovieData Title Movie Star Wars Year 1977 (Data i blått, metainformasjon i grønt) INF3100-12.4.2012 Ellen Munthe-Kaas 8
Attributter <?xml version="1.0" encoding="utf-8"?> <StarMovieData> <Star starid="cf" starredin="sw"> <Name>Carrie Fisher</Name> <Address> <Street>123 Maple Street</Street> <City>Hollywood</City> </Address> </Star> <Movie movieid="sw starof="cf"> <Title>Star Wars</Title> <Year>1977</Year> </Movie> </StarMovieData> INF3100-12.4.2012 Ellen Munthe-Kaas 9
Navnerom For å lette gjenbruk av vokabularer Kan referere til flere vokabularer i samme XML-dokument uten å få navnekonflikter Navnerommet angis med en URI URIen er typisk en URL som refererer til et dokument som beskriver tolkningen av taggene i navnerommet. Dette dokumentet kan selv være et XML-dokument, en uformell beskrivelse,... eller ingenting Kan kvalifisere taggene i XML-dokumentet med navnerommet INF3100-12.4.2012 Ellen Munthe-Kaas 10
Eksempel på bruk av navnerom <?xml version = "1.0" encoding="utf-8"?> <film:minfilmdb xmlns:md="http://infolab.stanford.edu/movies" xmlns:film="http://www.ifi.uio.no/dmms/filmer"> <film:movie> <md:movie> <md:title>star Wars</md:Title> <md:year>1977</md:year> </md:movie> <film:filmlengde>3300 m (Sverige)</film:Filmlengde> <film:filmlengde>3493 m (special edition)</film:filmlengde> <film:kommentarer>først vist i Norge 26.12.77</film:kommentarer> </film:movie> </film:minfilmdb> INF3100-12.4.2012 Ellen Munthe-Kaas 11
Velformede og gyldige XML-dokumenter Velformet XML-dokument <?xml version = "1.0" encoding="utf-8"?> <StarMovieData>... </StarMovieData> Dokumentet angir innledningsvis at det er et XML-dokument Én rot Korrekt XML-syntaks (parentetisk struktur på taggene,...) Gyldig (valid) XML-dokument Elementene i dokumentet følger et gitt skjema INF3100-12.4.2012 Ellen Munthe-Kaas 12
Parsering av XML-dokumenter XML-dokument <?xml version = 1.0" encoding="utf-8?> <Movies> <Movie> <Title>Star Wars</Title> <Year>1977</Year> </Movie> </Movies> XML parser Dokumentet er velformet! Det faktiske resultatet (output) avhenger av parseren. To eksempler på typer parsere/programmeringsgrensesnitt: Treorienterte, eks. DOM Document Object Model Strømorienterte (eventdrevne), eks. SAX Simple API for XML INF3100-12.4.2012 Ellen Munthe-Kaas 13
Validering av XML-dokumenter XML-dokument XML-skjema <?xml version = 1.0" encoding="utf-8?> <Movies xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="movies.xsd"> <Movie> <Title>Star Wars</Title> <Year>1977</Year> </Movie> </Movies> <?xml version = "1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:complextype name="movietype"> <xs:sequence> <xs:element name="title" type="xs:string" /> <xs:element name="year" type="xs:integer" /> </xs:sequence> </xs:complextype> <xs:element name="movies"> <xs:complextype> <xs:sequence> <xs:element name="movie" type="movietype"... /> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> XML Schema validator Dokumentet er gyldig! Det faktiske resultatet (output) av valideringen er som for ren parsering, men i tillegg til velformethet sjekker validatoren at XMLdokumentet er bygget opp som angitt i XML-skjemaet. INF3100-12.4.2012 Ellen Munthe-Kaas 14
XML skjemaspråk XSD XML Schema Definition Språk for å beskrive XML-skjemaer Et XML-skjema skrevet i XSD er selv et XML-dokument og kan derfor parseres av en XML-parser En XML-skjemavalidator tar som input et XML-dokument og et XML-skjema og sjekker at XML-dokumentet er gyldig i henhold til skjemaet INF3100-12.4.2012 Ellen Munthe-Kaas 15
Navnerom for XSD <?xml version = "1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> </xs:schema> INF3100-12.4.2012 Ellen Munthe-Kaas 16
Definisjon av elementer <?xml version = "1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="title" type="xs:string" /> <xs:element name="year" type="xs:integer" /> </xs:schema> INF3100-12.4.2012 Ellen Munthe-Kaas 17
Definisjon av sammensatte typer <?xml version = "1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:complextype name="movietype"> <xs:sequence> </xs:sequence> </xs:complextype> <xs:element name="movies"> </xs:element> </xs:schema> <xs:complextype> <xs:element name="title" type="xs:string" /> <xs:element name="year" type="xs:integer" /> <xs:sequence> </xs:sequence> </xs:complextype> <xs:element name="movie" type="movietype" minoccurs="0" maxoccurs="unbounded" /> INF3100-12.4.2012 Ellen Munthe-Kaas 18
Eksempeldokument <?xml version = "1.0"encoding="utf-8"?> <Movies xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="movies.xsd" > <Movie> </Movie> <Title>Star Wars</Title> <Year>1977</Year> <Movie> </Movie> </Movies> INF3100-12.4.2012 Ellen Munthe-Kaas 19
Definisjon av attributter <?xml version = "1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:complextype name="movietype"> <xs:attribute name="movieid" type="xs:string" use="required" /> <xs:attribute name="starof" type="xs:string" /> <xs:sequence> </xs:sequence> </xs:complextype> <xs:element name="movies"> </xs:element> </xs:schema> <xs:complextype> <xs:element name="title" type="xs:string" /> <xs:element name="year" type="xs:integer" /> <xs:sequence> </xs:sequence> </xs:complextype> <xs:element name="movie" type="movietype" minoccurs="0" maxoccurs="unbounded" /> INF3100-12.4.2012 Ellen Munthe-Kaas 20
Eksempeldokument <?xml version = "1.0" encoding="utf-8"?> <Movies xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="movies.xsd"> <Movie movieid="sw"> <Title>Star Wars</Title> <Year>1977</Year> </Movie> <Movie movieid="rj"> </Movie> </Movies> INF3100-12.4.2012 Ellen Munthe-Kaas 21
Definisjon av kandidatnøkler <?xml version = "1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema">... <xs:element name="movies"> <xs:complextype> <xs:sequence> </xs:sequence> </xs:complextype> <xs:key name="moviekey"> </xs:key> </xs:element> <xs:element name="movie" type="movietype" minoccurs="0" maxoccurs="unbounded" /> <xs:selector xpath="movie" /> <xs:field xpath="title" /> </xs:schema> INF3100-12.4.2012 Ellen Munthe-Kaas 22
Definisjon av fremmednøkler <xs:element name="stars"> <xs:complextype> <xs:element name="starredin" minoccurs="0" maxoccurs="unbounded"> <xs:complextype> <xs:element name="title" type="xs:string" /> <xs:element name="year" type="xs:integer" /> </xs:complextype> </xs:element> </xs:complextype> <xs:keyref name="movieref" refers "moviekey"> <xs:selector xpath="star/starredin" /> <xs:field xpath="title" /> </xs:keyref> </xs:element> INF3100-12.4.2012 Ellen Munthe-Kaas 23
XML-data er selvforklarende (???) <?xml version = "1.0" encoding="utf-8"?> < 外 语 >Китайська мова</ 外 语 > XML-taggene sier noe om dataenes struktur, men ikke noe om tolkningen XML-data er selvdokumenterende (eller, mer i tråd med den engelske sjargongen, selvbeskrivende), men ikke selvforklarende... men ved bruk av vokabularer/navnerom kan man indikere en tolkning INF3100-12.4.2012 Ellen Munthe-Kaas 24
XML spørrespråk XPath spørrespråk for å velge ut noder (elementer) i et XML-dokument XQuery spørrespråk som bruker XPath supplert med FLWOR-uttrykk FLWOR For, Let, Where, Order by, Return SQL-aktig muliggjør blant annet join INF3100-12.4.2012 Ellen Munthe-Kaas 25
XPath-uttrykk En sekvens av elementer kan angis ved hjelp av en absolutt eller relativ path av markeringer. /Movies rotelementet (med alt innhold). /Movies/Movie alle <Movie>-elementer innenfor <Movies>elementet. /Movies/Movie/Title alle <Title>-elementer innenfor et <Movie>-element i <Movies>. //M angir alle <M>-elementer, uavhengig av nesting. * angir en vilkårlig markering Kan også angi betingelser som en del av uttrykket. /Movies/Movie/[Year="1980"] alle <Movie>-elementer hvor <Year>-elementet inneholder 1980. INF3100-12.4.2012 Ellen Munthe-Kaas 26
FLWOR-uttrykk FOR var IN expr LET var IN expr WHERE expr ORDER BY expr RETURN expr FOR variable IN expression (, variable IN expression )* LET variable := expression (, variable := expression )* WHERE expression ORDER BY expression RETURN expression INF3100-12.4.2012 Ellen Munthe-Kaas 27
FLWOR-eksempler Eksempel 1 Eksempel 2 let $a := (1, 2, 3) return <out>{$a}</out> Resultat: <out>1 2 3</out> for $a in (1, 2, 3) return <out>{$a}</out> Resultat: <out>1</out> <out>2</out> <out>3</out> INF3100-12.4.2012 Ellen Munthe-Kaas 28
Eksempel: XML-dokument movies.xml <?xml version = "1.0" encoding="utf-8"?> <Movies> <Movie genre="comedy"> <Title>Bruce Almighty</Title> <Star><Name>Jim Carrey</Name></Star> </Movie> <Movie genre="comedy"> <Title>Dumb & Dumber</Title> <Star><Name>Jim Carrey</Name></Star> </Movie> <Movie genre="drama"> <Title>The Truman Show</Title> <Star><Name>Jim Carrey</Name></Star> </Movie> <Movie genre="comedy"> <Title>Nine Months</Title> <Star><Name>Hugh Grant<Name></Star> </Movie> </Movies> INF3100-12.4.2012 Ellen Munthe-Kaas 29
Eksempel: FLWOR Finn alle komedier med Jim Carrey som skuespiller: let $movies := doc("movies.xml") for $movie in $movies//movie[@genre="comedy"] where $movie/star/[name="jim Carrey"] return $movie/title INF3100-12.4.2012 Ellen Munthe-Kaas 30
Andre muligheter i XQuery Join: for $s1 in, $s2 in where data($s1/ ) = data($s2/ ) Duplikat-eliminasjon: let $s := distinct-values( ) Kvantorer: every $s in satisfies some $s in satisfies Aggregering (count, sum, max, ) Forgrening: if ( ) then else INF3100-12.4.2012 Ellen Munthe-Kaas 31
Transformasjonsspråk XSLT Extensible Stylesheet Language Transformations Språk for å beskrive omforming av ett XML-dokument til et annet Bruker XPath til å identifisere delmengder av kildedokumentet Kan betraktes/brukes som et spørrespråk Et XML-skjema skrevet i XSLT er selv et XML-dokument og kan derfor parseres av en XML-parser INF3100-12.4.2012 Ellen Munthe-Kaas 32
Transformasjon av XML-dokument <?xml version = "1.0" encoding="utf-8"?> <Movies> <Movie genre="comedy"> <Title>Bruce Almighty</Title> <Star><Name>Jim Carrey</Name></Star> </Movie>... XSLT stylesheet <?xml version = "1.0" encoding = "utf-8"?> <xsl:stylesheet xmlns:xsl = "http:...xsl/transform version = "1.0"> <xsl:output method = xml indent = yes /> <xsl:template match = "/Movies"> <ComedyMovies> <xsl:apply-templates /> </ComedyMovies>... XML-dokumenter XML-dokument XSLT Processor <?xml version = "1.0" encoding="utf-8"?> <ComedyMovies> <Comedy title = "Bruce Almighty" /> <Comedy title = "Dumb & Dumber" /> <Comedy title = "Nine Months" /> </ComedyMovies> INF3100-12.4.2012 Ellen Munthe-Kaas 33
XSLT-eksempel <?xml version = "1.0" encoding = "utf-8"?> <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/xsl/transform version = "1.0"> <xsl:output method = xml indent = yes /> <xsl:template match = "/Movies"> <ComedyMovies> <xsl:apply-templates /> </ComedyMovies> </xsl:template> <xsl:template match = "Movie[@genre="comedy"]"> <xsl:apply-templates /> </xsl:template> <xsl:template match = "Title"> <Comedy title = "<xsl:value-of select = "." /> " /> </xsl:template> <xsl:stylesheet> INF3100-12.4.2012 Ellen Munthe-Kaas 34
Klasser av XML-dokumenter Datasentrisk: Ganske regelmessig struktur Finkornede data Dokumentsentrisk: Irregulær struktur Mer grovkornede data Hybrider av disse: Stort sett dokumentsentrisk, men med deler som er finkornede og med regelmessig struktur Stort sett datasentrisk, men med deler som er grovkornede og med irregulær struktur INF3100-12.4.2012 Ellen Munthe-Kaas 35
Eksempel på DBMS og håndtering av XML: Oracle XML DB Lagring av XML-formaterte dokumenter og data Datasentriske eller dokumentsentriske XML-data ETL (Extract, Transform and Load) Persistering av XML før transformering Eksport av relasjonelle data Generere XML fra relasjonelle data Resulterende XML-data blir ikke persistert INF3100-12.4.2012 Ellen Munthe-Kaas 36
Oracle XML DB: XMLType Abstrakt datatype: XMLType For lagring/persistering av XML-data Lagringsmodell: Velges etter bruksmønster Structured storage (objekt-relasjonell lagring) Binary XML storage (kompakt, skjemafleksibilitet) Unstructured storage (CLOB, bevarer XML-dokumentet uendret) Hybrid storage (forskjellige deler av et XML-dokument har forskjellig lagringsmodell) Indeksering: Velges etter bruksmønster B-trær, XMLIndex INF3100-12.4.2012 Ellen Munthe-Kaas 37
Oracle XML DB: Valg av lagringsmodell og indeksering hybrider Fra Oracle White Paper (Dec. 2009): Oracle XML DB: Choosing the Best XMLType Storage Option for Your Use Case INF3100-12.4.2012 Ellen Munthe-Kaas 38