Βάζειρ Γεδομένων και Παγκόζμιορ Ιζηόρ Τερλνινγίεο XML
XML θαη DTD Υπνζηεξηθηηθέο ηερλνινγίεο Γιώζζεο εξσηεκάησλ XML
HTML Φξεζηκνπνηεί tags αλάκεζα ζην θείκελν......γηα λα πεξηγξάςεη ην layout ηεο ζειίδαο <p> <b>alan</b>, 42 years, <i>agb@abc.com</i> Γεν δηεπθνιύλεη άιια πξνγξάκκαηα λα θαηαλνήζνπλ ηελ δνκή θαη ην πεξηερόκελν κηαο ζειίδαο Ο wrapper «ζπάεη» αλ ην italic <i> αιιάμεη ζε teletype <t> Τν πξόβιεκα είλαη νηη ζρεδηάζηεθε εηδηθά γηα λα πεξηγξάςεη ηελ παποςζίαζη θαη όρη ην πεξηερόκελν Καζέλαο ζα ήζειε λα ππάξρεη «έλα αθόκε tag» ζηελ HTML πξνθεηκέλνπ λα βνεζεζεί ε δηθή ηνπ εθαξκνγή 3
XML Σρεδηάζηεθε εηδηθά γηα λα πεξηγξάςεη ην πεπιεσόμενο (content) θαη όρη ηελ παξνπζίαζε κηαο ζειίδαο Βαζηθέο δηαθνξέο από ηελ HTML Μπνξεί θαλείο λα νξίζεη νέα tags θαηά βνύιεζε Τα tags κπνξνύλ λα εθσιηαζζνύλ δνκηθά ζε νπνηνδήπνηε βάζνο Δλα έγγξαθν XML κπνξεί πξναηξεηηθά λα πεξηέρεη κηα πεξηγξαθή ηεο γπαμμαηικήρ ηνπ Τα tags δνκνύλ ην πεξηερόκελν <person><name>kostas</name> </person> Τν πσο ζα εκθαληζηνύλ νξίδεηαη μερσξηζηά από θάπνην stylesheet (XSL) 4
XML (2) Ο ξόινο ηεο XML Πξνηάζεθε ζαλ κηα markup γλώζζα πεξηγξαθήο εγγξάθσλ Καηαγσγή απν ηελ SGML (ςεθηαθέο βηβιηνζήθεο) Δμειίζζεηαη όκσο ζε έλα παγθόζκην πξόηππν γηα ανηαλλαγή πληποθοπίαρ Απηό ηξάβεμε ην ελδηαθέξνλ ηεο θνηλόηεηαο ησλ βάζεσλ δεδνκέλσλ Βαζηθό ζπζηαηηθό ηεο XML είλαη ην element Κείκελν πνπ πεξηθιείεηαη από έλα δεύγνο tags Start-tag θαη end-tag (markups) Δθηόο από ηελ λογική δνκή (elements), ηα tags πεξηγξάθνπλ θαη ηελ θςζική δνκή (entities) πνπ δελ ελδηαθέξεη ζηα πιαίζηα ησλ βάζεσλ <person> <name>alan</name> <age>42</age> <email>alan@abc.com</email> <email>abrown@mail.com</email> </person> 5
Δlements και tags Τη κπνξεί λα ππάξρεη αλάκεζα ζηα start-tag θαη end-tag; Απιό θείκελν Αιια elements Οπνηνδήπνηε κίγκα ησλ δύν παξαπάλσ! Τα tags ζηελ XML: Οξίδνληαη από ηνπο ρξήζηεο, δεν ππάξρνπλ πξνθαζνξηζκέλα tags όπσο ζηελ HTML Αλνίγνπλ θαη θιείλνπλ πάληα κε ηελ «ζσζηή» ζεηξά (ζαλ παξελζέζεηο) Δμαίξεζε: empty tag, πρ. <married/> (το / στο τέλος) <married/> = <married></married> Element, element content, θαη subelement 6
XML attributes Δλα element κπνξεί λα πεξηέρεη κεδέλ ή πεξηζζόηεξα attributes Γελ ζρεηίδνληαη κε ηα attributes ζηηο ζρεζηαθέο βάζεηο Πεξηγξάθνπλ ηδηόηεηεο (properties) ηνπ element <product> <name language= French >trompette no 6</name> <price currency= Euro > 420.12 </price> <address format= XL1245 language= French > <street>31 rue Croix-Bosset</street> <zip>92874</zip> </address> </product> Οπσο θαη ηα elements, ηα attributes νξίδνληαη από ηνλ σπήζηη 7
Attributes και elements Γιαθοπέρ κε elements: Η ηηκή ηνπ attribute είλαη πάληα έλα string ζε εηζαγσγηθά, ελώ ην element κπνξεί λα πεξηέρεη άιια elements Δλα element κπνξεί λα έρεη ην πνιύ έλα attribute κε έλα όλνκα, ελώ κπνξεί λα έρεη πνιιά subelements κε ην ίδην όλνκα Τα attributes: Φαλεξώλνπλ ηελ θαηαγσγή ηεο XML ζαλ document markup γιώζζαο Δηζάγνπλ θάπνηα δςζκολία ζηελ αληαιιαγή πιεξνθνξίαο: αναπαπάζηαζη ζαν attribute ή ζαν subelement; <person name= Alan age= 42 email= agb@abc.com /> <person age= 42 > <name>alan</name> <email>agb@abc.com</email> </person> 8
ΧML και ημιδομημένα δεδομένα Η XML είλαη θαηάιιειε γηα ηελ αλαπαξάζηαζε εκηδνκεκέλσλ δεδνκέλσλ ssd-expression: {person: {name: Alan, age: 42, email: agb@abc.com }} Αληίζηνηρν XML: <person> <name>alan</name> <age>42</age> <email>agb@abc.com</email> </person> Γιαθοπέρ κε εκηδνκεκέλα δεδνκέλα: Μνληέιν XML Graph, XML references, δηάηαμε (order), κίμε elements κε θείκελν, επηπιένλ ζηνηρεία ηεο XML 9
XML Graph Δλα κνληέιν γηα XML data: XML Graph Οη θόκβνη αληηζηνηρνύλ ζηα elements Γηαθνξά κε SSD Graph: νη εηηθέηεο είλαη ζηνπο κόμβοςρ p e r s o n p e r s o n n a m e a g e e m a i l n a m e a g e e m a i l A l a n 4 2 a g b @ a b c. c o m A l a n 4 2 a g b @ a b c. c o m Δύθνιε ε κεηαηξνπή, ηδίσο αλ έρνπκε δέλδξν Μπνξνύκε λα έρνπκε γξάθν; - ΝΑΙ 10
XML References H XML έρεη έλαλ κεραληζκό ώζηε έλα element λα κπνξεί λα «δείρλεηαη» από πεξηζζόηεξνπο από έλαλ «παηέξεο» Οξίδνληαο έηζη γπάθο αληί γηα δέλδξν Ο κεραληζκόο είλαη attributes ηύπνπ ID, IDREF, θαη IDREFS Τα ID αλαζέηνπλ ηαπηόηεηεο ζηα elements Τα IDREF «δείρλνπλ» ζηα ID από άιια elements, οποςδήποηε <state id= s2 idrefs= c2 c7 c12 c32 >Nevada</state>... <city id= c7 > <cname>carson City</cname> <state-of idref= s2 /> </city> Ποιά attributes είλαη ηύπνπ ID / IDREF; Πάλησο όρη θαη αλάγθε απηά πνπ ιέγνληαη id / idref Αιιά απηά πνπ νξίδνληαη από ην DTD (ζηελ ζπλέρεηα) 11
Γιάηαξη Τα δύν SSD είλαη ιζοδύναμα: {person: {firstname: John, lastname: Smith }} {person: {lastname: Smith, firstname: John }} Δλώ ηα δύν XML δεν είλαη ηζνδύλακα: <person><firstname>john</firstname> <lastname>smith</lastname></person> <person><lastname>smith</lastname> <firstname>john</firstname></person> Τα XML attributes δεν είλαη δηαηεηαγκέλα Τα παξαθάησ είλαη ιζοδύναμα: <person firstname= John lastname= Smith /> <person lastname= Smith firstname= John /> Η απαίηεζε γηα δηάηαμε δςζκολεύει ηελ απνδνηηθή δηαρείξηζε ησλ δεδνκέλσλ XML Σπρλά ε δηάηαμε αγλνείηαη ζε εθαξκνγέο αληαιιαγήο πιεξνθνξίαο 12
Μίξη elements και κειμένος Τν παξαθάησ επηηξέπεηαη ζηελ XML Λέκε όηη ην person έρεη mixed content <person> This is my best friend <name>alan</name> <age>42</age> I am not too sure about the following email <email>agb@abc.com</email> </person> Γείρλεη ηελ εγγξαθν-θεληξηθή θαηαγσγή ηεο XML Κάπσο «αθύζηθν» από ηελ πιεπξά ησλ βάζεσλ δεδνκέλσλ Πξνηηκνύκε ην element content 13
Δπιπλέον ζηοισεία ηηρ XML Δγγξαθν-θεληξηθά ζηνηρεία πνπ δεν ρξεηάδνληαη ζηελ αληαιιαγή δεδνκέλσλ Σρόιηα <! this is comment --> Processing Instructions <?xml-stylesheet href= book.css type= text/css?> Αξρηθή γξακκή <?xml version= 1.0?> Πξναηξεηηθό Document Type Definition (DTD) Οξίδεη ηελ γπαμμαηική ηνπ θεηκέλνπ <?xml version= 1.0?> <!DOCTYPE name [markupdeclarations]> <name> </name> root element 14
DTD Document Type Definition (DTD): αλαπόζπαζην κέξνο ηεο XML Πξνηάζεθε ζαλ κηα γξακκαηηθή γηα ηα XML έγγξαθα Σε θάπνην βαζκό κπνξεί λα ηδσζεί ζαν ζσήμα γηα δεδνκέλα κνξθνπνηεκέλα ζε XML Δλα DTD πνπ πεξηγξάθεη δπαδηθά δέλδξα: <!ELEMENT node (leaf (node, node))> <!ELEMENT leaf (#PCDATA)> Τα DTDs κνηάδνπλ λα νξίδνπλ ηύποςρ δεδνκέλσλ <!DOCTYPE db [ <!ELEMENT db (person*)> <!ELEMENT person (name,age,email)> <!ELEMENT name (#PCDATA)>...]> 15
Γήλωζη attributes ζηο DTD Σύλδεζε ησλ attributes κε ηα elements ζηα νπνία εκθαλίδνληαη <product> <name language= French department= Music >trompette</name> <price currency= Euro > 420.12 </price> </product> <!ATTLIST name language CDATA #REQUIRED department CDATA #IMPLIED> <!ATTLIST price currency CDATA #IMPLIED> Οξηζκόο ησλ attributes #REQUIRED ππνρξεσηηθό, #IMPLIED πξναηξεηηθό Τύπνο CDATA = string Τύπνη ID, IDREF, IDREFS 16
Well-formed και valid Well-formed XML έγγξαθα Τα tags πξέπεη λα είλαη ζσζηά εκθσιηαζκέλα Τα attributes ελόο element πξέπεη λα είλαη κνλαδηθά Valid XML έγγξαθν Δίλαη well-formed Δρεη θάπνην DTD Σπκκνξθώλεηαη κε απηό ην DTD Πεπιοπιζμοί ηνπ DTD ζαλ ζρήκα γηα δεδνκέλα XML Γελ ππάξρνπλ αηνκηθνί ηύπνη (πρ. integer) Γελ ππάξρνπλ πεξηνξηζκνί δηαζηήκαηνο (πρ. 0-140) Ο ηύπνο ελνο element είλαη global (πρ. ίδην name θαη ζε person θαη ζε course;) Γελ πξνζδηνξίδεη ηνλ ηππν ησλ IDREFs 17
XML θαη DTD Υπνζηεξηθηηθέο ηερλνινγίεο Γιώζζεο εξσηεκάησλ XML
XML Namespaces Πξόβιεκα: ν ηύπνο ησλ element είλαη global Τν ίδην έγγξαθν πξέπεη λα κπνξεί λα ρξεζηκνπνηεζεί από πνιιά πξνγξάκκαηα πνπ θαηαιαβαίλνπλ άλλα markups Σπγθξνύζεηο ζηελ νλνκαηνινγία; Λύζε: XML Namespaces = ζπιινγέο νλνκάησλ Default namespace (urn:loc.bla) γηα ην <title> <?xml version= 1.0?> <book xmlns= urn:loc.bla xmlns:isbn= urn:bla.bla > <title>the title</title> <isbn:number>123456</isbn:number> </book> Δπίζεο θαη γηα ηα attibutes <item edi:taxclass= exempt >Baby food</item> 19
XML Schema Αληηκεησπίδεη ηηο αλεπάξθεηεο ηνπ DTD Οξίδεη απζηεξόηεξα ζύνθεηοςρ ηύπνπο, κε βαζηθνύο ηύπνπο θαη πεξηνξηζκνύο Δθθξάδεηαη θαη ην ίδην ζε ΦΜL Δλα απόζπαζκα: <xsd:complextype name= PurchaseOrderType > <xsd:sequence> <xsd:element name= shipto type= USAddress /> <xsd:element name= billto type= xsd:string /> <xsd:element name= comments minoccurs= 0 /> <xsd:element name= items type= Items /> </xsd:sequence> <xsd:attribute name= orderdate type= xsd:date /> </xsd:complextype> 20
XSL Απνηειείηαη από ηξηα μερσξηζηα ηκήκαηα XSL Formating Objects Οξίδεη ην format παξνπζίαζεο ελόο εγγξάθνπ XML XPath: XML Path Language Δπηιέγεη ηκήκαηα ελόο εγγξάθνπ XML Απινπνηεκέλε κνξθή, επηζηξέθεη ηα βηβιία ζε έλα XML (πίσω): (νλόκαηα XML tags) Δπηζηξέθεη ηνπο πξώηνπο ζπγγξαθείο ησλ βηβιίσλ: database/biblio/book root()/descendant::book/child::author[position()=first()] XSLT: XSL Transformation language Μεηαηξέπεη έλα έγγξαθν XML ζε θάπνην άιιν έγγξαθν 21
XSLT: παπάδειγμα <database id= db > <biblio> <book id= n1 > <author>roux</author> <author>combalusier</author> <date>1976</date> <title>database Systems</title> </book> <book id= n2 > <author>smith</author> <date>1999</date> <title>database Systems</title> </book> <paper>...</paper> </biblio> </database> Μεηαηξέπεη ην XML ζε έλαλ HTML θαηάινγν ησλ ηίηλων ησλ βηβιίσλ <xsl:template match= / > <html> <head> <title>book Titles</title> </head> <body> <h1>book Titles</h1> <xsl:for-each select= database/biblio/book > <xsl:value-of select= title /> <br></br> </xsl:for-each> </body> </html> </xsl:template> 22
XML θαη DTD Υπνζηεξηθηηθέο ηερλνινγίεο Γιώζζεο εξσηεκάησλ XML
XML-QL Η XML-QL κνηάδεη κε ηηο γιώζζεο γηα SSD πξνζαξκνγή όκσο ζε XML Patterns θαη path expressions γηα λα επηιέγεη ηκήκαηα από ηα XML δεδνκέλα εηζόδνπ Μεηαβιεηέο ζηηο νπνίεο δεζκεύνληαη δεδνκέλα Templates πνπ ππαγνξεύνπλ πσο ζα θαηαζθεπαζηνύλ ηα XML δεδνκέλα ηνπ απνηειέζκαηνο Θεσξεί όηη ην κνληέιν γξάθνπ έρεη ηηο εηηθέηεο ζηηο αθκέο where <book> <publisher><name>morgan Kaufmann</name></publisher> <title> $T </title> <author> $A </author> </book> in www.abc.com/bib.xml construct $A 24
ΧΜL-QL (2) Γνκή εξσηήκαηνο ζε ζρέζε κε Lorel: where from + where, construct select Τα patterns νξίδνπλ ηι ππέπει λα ππάξρεη, θαη όρη ηη δελ πξέπεη λα ππάξρεη Τν pattern ζα ηαηξηάμεη κε κάθε δπλαηό ηξόπν ζηα δεδνκέλα, θαη νη κεηαβιεηέο ζα δεζκεπηνύλ αληίζηνηρα Σηελ πξαγκαηηθόηεηα δεζκεύνληαη ζηα oids ησλ θόκβσλ (elements) Πρ. ην pattern <a> <b> $X </b> <c> $Y </c> </a> <a> <b> 1 </b> <c> 2 </c> <b> 3 </b> <c> 4 </c> </a> $X $Y 1 2 1 4 3 2 3 4 25
Καηαζκεςή XML αποηελέζμαηορ Μέζσ templates ζην construct clause Η ζπληνκνγξαθία <title> </> ζεκαίλεη <title> </title> <answer> where <book> <publisher><name>morgan Kaufmann</></> <title> $T </> <author> $A </> </> in www.abc.com/bib.xml construct <result> <author> $A </> <title> $T </> </> </answer> Απνηέιεζκα: έλα <result> element για κάθε binding ησλ $Α, $Τ <result> <author>...</author> <title>...</title> </result> Όια ηα elements ηνπ απνηειέζκαηνο κπαίλνπλ ζην root <answer> Παξαιείπνπκε ην root element ζηα αθόινπζα γηα επθνιία 26
Πποαιπεηικά elements Θέινπκε ηνπο ηίηινπο όισλ ησλ βηβιίσλ θαη ηηο ηηκέο όπος ςπάπσοςν Τα elements ζηελ XML κπνξεί λα είλαη πξναηξεηηθά Αλ βάινπκε ηo <price> ζην pattern, θα αποκλείζοςμε από ην απνηέιεζκα ηα βηβιία ρσξίο ηηκή Λύζε: εμθωλιαζμένα εξσηήκαηα Μεηά ην «in» αθνινπζεί URL θάπνηνπ XML εγγξάθνπ, ή κεηαβιεηή δεζκεπκέλε ζε ηκήκα ελόο XML εγγξάθνπ where <book> $B </> in www.abc.com/bib.xml, <title> $T </> in $B construct <result> <booktitle> $T </> where <price> $P </> in $B construct <bookprice> $P </> </> 27
Grouping Παξάδεηγκα: ε XML βάζε έρεη <book> elements κε πνιινύο <author> ζε θάζε <book> Δξώηεκα: βξεο όινπο ηνπο authors, θαη γηα θάζε έλαλ ηνπο ηίηινπο ησλ βηβιίσλ πνπ έγξαςε (regrouping) where <book><author> $A </></> in www.abc.com/bib.xml construct <result> <author> $A </> where <book><author> $A </author> <title> $T </title> </book> in www.abc.com/bib.xml construct <title> $T </> </> 28
Attributes, joins Δξσηήκαηα πάλσ ζε attributes Βξεο ηνπο ηίηινπο ησλ βηβιίσλ ζηα γαιιηθά where <book language= French > <title> </> element_as $T </> in abc.xml construct $T Τν element_as δεζκεύεη κεηαβιεηε ζε όιν ην element αληί γηα ην element content κόλνλ (default, θαζώο θαη content_as) Βξεο όιεο ηηο γιώζζεο ησλ βηβιίσλ where <book language=$l></> in abc.xml construct <result> $L </result> Join: βξεο ζπγγξαθείο πνπ έρνπλ ηνπιάρηζηνλ δύν βηβιία where <book> <author> $A </> </> content_as $B1 in abc.xml, <book> <author> $A </> </> content_as $B2 in abc.xml, $B1!= $B2 construct <result> $A </result> 29
Regular path expressions DTD πνπ νξίδεη αλαδξνκηθά ην element <part> <!ELEMENT part (name, brand, part*)> <!ELEMENT name (#PCDATA)> <!ELEMENT brand (#PCDATA)> Δξώηεκα: ην όλνκα θάζε part πνπ πεξηέρεη άιιν part κάξθαο Ford Αλεμάξηεηα από ην βάζνο ηνπ εκθσιηαζκνύ where <part> <name> $N </> <part*><brand>ford</></> </> in www.abc.com/parts.xml construct <result> $N </> Πην πνιύπινθεο εθθξάζεηο Δπηπιένλ, ην wildcard <$> ηαηξηάδεη κε θάζε tag where <part+.(subpart component.piece)> $R </> in www.abc.com/parts.xml construct <result> $R </> 30
Quilt και ΧQuery Πνιιέο άιιεο γιώζζεο εξσηεκάησλ γηα XML H XQuery γίλεηαη ην πξόηππν γιώζζαο εξσηεκάησλ γηα XML Δπεξεαζκέλε απν ηελ XML-QL, θαη βαζηζκέλε ζηελ Quilt H Quilt δνκείηαη πάλσ ζε FLWR (πξνθέξεηαη flower ) expressions For: δεζκεύεη κεηαβιεηέο, let: εηζάγεη λέεο κεηαβιεηέο, where: ζέηεη ζπλζήθεο, return: επηζηξέθεη απνηειέζκαηα Γώζε ηνπο ζπγγξαθείο ησλ βηβιίσλ ζε αιθαβεηηθή ζεηξά, θαη γηα θάζε ζπγγξαθέα ηα βηβιία ηνπ ηαμηλνκεκέλα κε βάζε ηελ εκεξνκελία έθδνζεο <author_list> FOR $a IN distinct(document( biblio.xml )//author) RETURN <author> <name> $a/text() </name> FOR $b IN document( biblio.xml )//book[author=$a] RETURN <book> $b/title, $b/date </book> SORTBY date DESCENDING </author> SORTBY name </author_list> 31