Semistrukturerte data og XML - Universitetet i oslo...Semistrukturerte data og XML •...
Transcript of Semistrukturerte data og XML - Universitetet i oslo...Semistrukturerte data og XML •...
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
INF3100 - 12.4.2012 – Ellen Munthe-Kaas 1
UNIVERSITETET I OSLO
© Institutt for Informatikk
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 XML-
verdenen = 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 XML-
verdenen 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
5
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
XML
• Graftolkning • Data og metainformasjon (tagger) • Attributter • Navnerom
INF3100 - 12.4.2012 – Ellen Munthe-Kaas 6
Graftolkning
INF3100 - 12.4.2012 – Ellen Munthe-Kaas 7
Carrie Fisher
StarMovieData
Star Movie Star
Name
Address
Name
Address
Street
Street
Street
City City
City Title Year
StarsIn
StarsIn
StarOf
StarOf Mark Hamill
Maple
Hollywood
Star Wars
Oak
Redwood
Locust Malibu
1977
• Rettet graf (treaktig) med navngitte kanter • Nøyaktig én rotnode • Atomære verdier (data) i løvnodene
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>
INF3100 - 12.4.2012 – Ellen Munthe-Kaas 8
Movie
Carrie Fisher
StarMovieData
Star
Name Address
Street
City
Title Year
Maple
Hollywood
Star Wars
1977
(Data i blått, metainformasjon i grønt)
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
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
<?xml version = ”1.0" encoding="utf-8”?> <Movies> <Movie> <Title>Star Wars</Title> <Year>1977</Year> </Movie> </Movies>
XML parser Dokumentet er velformet!
XML-dokument
14
Validering av XML-dokumenter <?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!
XM
L-do
kum
ent
INF3100 - 12.4.2012 – Ellen Munthe-Kaas
XM
L-sk
jem
a Det faktiske resultatet (output) av valideringen er som for ren parsering, men i tillegg til velformethet sjekker validatoren at XML-dokumentet er bygget opp som angitt i XML-skjemaet.
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: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" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
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> <Title>Star Wars</Title> <Year>1977</Year> </Movie> <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: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" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
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:element name="Movie" type="movieType" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> <xs:key name="movieKey"> <xs:selector xpath="Movie" /> <xs:field xpath="Title" /> </xs:key> </xs:element> </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.
26 INF3100 - 12.4.2012 – Ellen Munthe-Kaas
FLWOR-uttrykk
• FOR variable IN expression (, variable IN expression )*
• LET variable := expression (, variable := expression )*
• WHERE expression
• ORDER BY expression
• RETURN expression
27 INF3100 - 12.4.2012 – Ellen Munthe-Kaas
FOR var IN expr
LET var IN expr WHERE expr ORDER BY expr RETURN expr
FLWOR-eksempler
Eksempel 1 let $a := (1, 2, 3) return <out>{$a}</out> Resultat: <out>1 2 3</out>
Eksempel 2 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 <?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>
29 INF3100 - 12.4.2012 – Ellen Munthe-Kaas
mov
ies.
xml
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
30 INF3100 - 12.4.2012 – Ellen Munthe-Kaas
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 …
31 INF3100 - 12.4.2012 – Ellen Munthe-Kaas
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
<?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> ...
33
Transformasjon av XML-dokumenter
XSLT Processor
<?xml version = "1.0" encoding="utf-8"?> <Movies> <Movie genre="comedy"> <Title>Bruce Almighty</Title> <Star><Name>Jim Carrey</Name></Star> </Movie> ...
XML-dokument
INF3100 - 12.4.2012 – Ellen Munthe-Kaas
XSLT stylesheet
<?xml version = "1.0" encoding="utf-8"?> <ComedyMovies> <Comedy title = "Bruce Almighty" /> <Comedy title = "Dumb & Dumber" /> <Comedy title = "Nine Months" /> </ComedyMovies>
XML-dokument
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
35
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
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
INF3100 - 12.4.2012 – Ellen Munthe-Kaas 38
Fra Oracle White Paper (Dec. 2009): ”Oracle XML DB: Choosing the Best XMLType Storage Option for Your Use Case”
hybrider
Oracle XML DB: Valg av lagringsmodell og indeksering