Τεχνολογίες XML
-
Upload
rozalia-meszaros -
Category
Documents
-
view
28 -
download
0
description
Transcript of Τεχνολογίες XML
![Page 1: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/1.jpg)
Τεχνολογίες XML
![Page 2: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/2.jpg)
XML και DTDΥποστηρικτικές τεχνολογίεςΓλώσσες ερωτήσεων
![Page 3: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/3.jpg)
-3-
HTML
Χρησιμοποιεί tags ανάμεσα στο κείμενο... ...για να περιγράψει το layout της σελίδας<p> <b>Alan</b>, 42 years, <i>[email protected]</i>
Δεν διευκολύνει άλλα προγράμματα να κατανοήσουν την δομή και το περιεχόμενο μιας σελίδας
Ο wrapper «σπάει» αν το italic <i> αλλάξει σε teletype <t> Το πρόβλημα είναι οτι σχεδιάστηκε ειδικά για να
περιγράψει την παρουσίαση και όχι το περιεχόμενο Καθένας θα ήθελε να υπάρχει «ένα ακόμη tag» στην
HTML προκειμένου να βοηθηθεί η δική του εφαρμογή
![Page 4: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/4.jpg)
-4-
XML
Σχεδιάστηκε ειδικά για να περιγράψει το περιεχόμενο (content) και όχι την παρουσίαση μιας σελίδας
Βασικές διαφορές από την HTML Μπορεί κανείς να ορίσει νέα tags κατά βούληση Ενα έγγραφο XML μπορεί προαιρετικά να περιέχει μια
περιγραφή της γραμματικής του Τα tags δομούν το περιεχόμενο
<person><name>Kostas</name>…</person> Το πως θα εμφανιστούν ορίζεται ξεχωριστά από κάποιο
stylesheet (XSL)
![Page 5: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/5.jpg)
-5-
XML (2)
Ο ρόλος της XML Προτάθηκε σαν μια markup γλώσσα περιγραφής εγγράφων Καταγωγή απο την SGML (ψηφιακές βιβλιοθήκες) Εξελίσσεται όμως σε ένα παγκόσμιο πρότυπο για ανταλλαγή
πληροφορίας Αυτό τράβηξε το ενδιαφέρον της κοινότητας των ΒΔ
Βασικό συστατικό της XML είναι το element Κείμενο που περικλείεται από ένα ζεύγος tags Start-tag και end-tag (markups) Εκτός από την λογική δομή (elements), τα tags περιγράφουν και
την φυσική δομή (entities)
<person> <name>Alan</name> <age>42</age> <email>[email protected]</email> <email>[email protected]</email></person>
![Page 6: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/6.jpg)
-6-
Εlements και tags
Τι μπορεί να υπάρχει ανάμεσα στα start-tag και end-tag; Απλό κείμενο Αλλα elements Οποιοδήποτε μίγμα των δύο παραπάνω !
Τα tags στην XML: Ορίζονται από τους χρήστες, δεν υπάρχουν
προκαθορισμένα tags όπως στην HTML Ανοίγουν και κλείνουν πάντα με την «σωστή» σειρά (σαν
παρενθέσεις) Εξαίρεση: empty tag, πχ. <married/> (το / στο τέλος)<married/> = <married></married>
Element, element content, και subelement
![Page 7: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/7.jpg)
-7-
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 ορίζονται από τον χρήστη
![Page 8: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/8.jpg)
-8-
Attributes και elements
Διαφορές με elements: Η τιμή του attribute είναι πάντα ένα string σε εισαγωγικά, ενώ το
element μπορεί να περιέχει άλλα elements Ενα element μπορεί να έχει το πολύ ένα attribute με ένα όνομα,
ενώ μπορεί να έχει πολλά subelements με το ίδιο όνομα Τα attributes:
Φανερώνουν την καταγωγή της XML σαν document markup γλώσσας
Εισάγουν κάποια δυσκολία στην ανταλλαγή πληροφορίας: αναπαράσταση σαν attribute ή σαν subelement;
<person name=“Alan” age=“42” email=“[email protected]”/>
<person age=“42”> <name>Alan</name> <email>[email protected]</email></person>
![Page 9: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/9.jpg)
-9-
ΧML και ημιδομημένα δεδομένα
Η XML είναι κατάλληλη για την αναπαράσταση ημιδομημένων δεδομένων
ssd-expression:{person: {name: “Alan”, age: 42, email:
“[email protected]”}} Αντίστοιχο XML:
<person> <name>Alan</name> <age>42</age> <email>[email protected]</email></person>
Διαφορές με ημιδομημένα δεδομένα: Μοντέλο XML Graph, XML references, διάταξη (order),
μίξη elements με κείμενο, επιπλέον στοιχεία της XML
![Page 10: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/10.jpg)
-10-
XML Graph
Ενα μοντέλο για XML data: XML Graph Οι κόμβοι αντιστοιχούν στα elements Διαφορά με SSD Graph: οι ετικέτες είναι στους κόμβους
Εύκολη η μετατροπή, ιδίως αν έχουμε δένδρο Μπορούμε να έχουμε γράφο; - ΝΑΙ
person
emailagename
Alan [email protected]
person
name age email
Alan 42 [email protected]
![Page 11: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/11.jpg)
-11-
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 (στην συνέχεια)
![Page 12: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/12.jpg)
-12-
Διάταξη
Τα δύο 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
Συχνά η διάταξη αγνοείται σε εφαρμογές ανταλλαγής πληροφορίας
![Page 13: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/13.jpg)
-13-
Μίξη 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>[email protected]</email></person>
Δείχνει την εγγραφο-κεντρική καταγωγή της XML Κάπως «αφύσικο» από την πλευρά των βάσεων δεδομένων Προτιμούμε το element content
![Page 14: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/14.jpg)
-14-
Επιπλέον στοιχεία της 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
![Page 15: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/15.jpg)
-15-
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)>...]>
![Page 16: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/16.jpg)
-16-
Δήλωση 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
![Page 17: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/17.jpg)
-17-
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
![Page 18: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/18.jpg)
XML και DTDΥποστηρικτικές τεχνολογίεςΓλώσσες ερωτήσεων
![Page 19: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/19.jpg)
-19-
XML Namespaces
Πρόβλημα: ο τύπος των element είναι global Το ίδιο έγγραφο πρέπει να μπορεί να χρησιμοποιηθεί
από πολλά προγράμματα που καταλαβαίνουν άλλα markups
Συγκρούσεις στην ονοματολογία; Λύση: XML Namespaces = συλλογές ονομάτων
<?xml version="1.0" encoding="ISO-8859-15"?><html><body><p>Welcome to my Health Resource</p></body><body><height>6ft</height><weight>155 lbs</weight></body></html>
![Page 20: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/20.jpg)
-20-
XML Namespaces
Πρόβλημα: ο τύπος των element είναι global Το ίδιο έγγραφο πρέπει να μπορεί να χρησιμοποιηθεί
από πολλά προγράμματα που καταλαβαίνουν άλλα markups
Συγκρούσεις στην ονοματολογία; Λύση: XML Namespaces = συλλογές ονομάτων
<?xml version="1.0" encoding="ISO-8859-15"?><html><body><p>Welcome to my Health Resource</p></body><body><height>6ft</height><weight>155 lbs</weight></body></html>
<?xml version="1.0" encoding="ISO-8859-15"?><html:html xmlns:html='http://www.w3.org/TR/xhtml1/'>><html:body><html:p>Welcome to my Health Resource</html:p></html:body><health:body xmlns:health='http://www.example.org/health'><health:height>6ft</health:height><heatlh:weight>155 lbs</health:weight></health:body></html:html>
![Page 21: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/21.jpg)
-21-
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>
![Page 22: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/22.jpg)
-22-
XSL
Αποτελείται από τρια ξεχωριστα τμήματα XSL Formating Objects
Ορίζει το format παρουσίασης ενός εγγράφου XML XPath: XML Path Language
Επιλέγει τμήματα ενός εγγράφου XML Απλοποιημένη μορφή, επιστρέφει τα βιβλία σε ένα XML
(πίσω):
database/biblio/book (ονόματα XML tags) Επιστρέφει τους πρώτους συγγραφείς των βιβλίων:root()/descendant::book/
child::author[position()=first()]
XSLT: XSL Transformation language Μετατρέπει ένα έγγραφο XML σε κάποιο άλλο έγγραφο
![Page 23: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/23.jpg)
-23-
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>
<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>
Μετατρέπει το XML σε έναν HTML κατάλογο των τίτλων των βιβλίων
![Page 24: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/24.jpg)
XML και DTDΥποστηρικτικές τεχνολογίεςΓλώσσες ερωτήσεων
![Page 25: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/25.jpg)
-25-
Γλώσσα XQuery
XQuery: γλώσσα επεξεργασίας XML αρχείων W3C: www.w3c.org Είναι συναρτησιακή γλώσσα: βασίζεται σε εκφράσεις
που επιστρέφουν τιμές. Χρησιμοποιεί το XML μοντέλο δεδομένων. Οι εκφράσεις (expressions) XQuery επιστρέφουν μια
(διατεταγμένη) σειρά από κόμβους ή τιμές. Σημαντικό κομμάτι της XQuery είναι οι εκφράσεις
μονοπατιών (path expressions). Τα παραδείγματα που θα ακολουθήσουν βασίζονται στην
αναφορά D. Chamberlin, XQuery: an XML Query Language. IBM Systems Journal, 41(4), 2002.
![Page 26: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/26.jpg)
-26-
XML Μοντέλο Δεδομένων
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 27: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/27.jpg)
-27-
XML Μοντέλο Δεδομένων
<?xml version = "1.0"?>
<bids>
<bid>
<itemno> 4</itemno>
<bidder> George </bidder>
<bid-amount> 150 </bid-amount>
<bid-date> 21/5/2005 </bid-date>
</bid>
<bid>
...
</bid>
</bids>
![Page 28: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/28.jpg)
-28-
Εκφράσεις Μονοπατιών
document(“items.xml”) /items Βρες το root element items (“/”).
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 29: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/29.jpg)
-29-
Εκφράσεις Μονοπατιών
document(“items.xml”) /items/item Βρες όλα τα elements item που είναι παιδιά (‘/’) του root
element items (“/”).
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 30: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/30.jpg)
-30-
Εκφράσεις Μονοπατιών
document(“items.xml”) //item Βρες όλα τα elements item (‘//’: απόγονος).
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 31: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/31.jpg)
-31-
Εκφράσεις Μονοπατιών
document(“items.xml”) //item/seller Βρες όλα τα elements seller που είναι παιδιά του item
(‘//’: απόγονος).
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 32: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/32.jpg)
-32-
Εκφράσεις Μονοπατιών
document(“items.xml”) //item/* Βρες όλα τα elements που είναι παιδιά του item.
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 33: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/33.jpg)
-33-
Εκφράσεις Μονοπατιών
document(“items.xml”) /item/* Βρες όλα τα elements που είναι παιδιά του root element
item (NULL!).
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 34: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/34.jpg)
-34-
Εκφράσεις Μονοπατιών
document(“items.xml”) //* Βρες όλα τα elements.
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 35: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/35.jpg)
-35-
Εκφράσεις Μονοπατιών
document(“items.xml”) /*/*/seller Βρες όλα τα elements seller που έχουν 2 προγόνους.
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 36: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/36.jpg)
-36-
Εκφράσεις Μονοπατιών
document(“items.xml”) /items/item[2] Βρες το 2ο item παιδί του element items.
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 37: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/37.jpg)
-37-
Εκφράσεις Μονοπατιών
document(“items.xml”) //item[@status] Βρες όλα τα item elements που έχουν attribute status.
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 38: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/38.jpg)
-38-
Εκφράσεις Μονοπατιών
document(“items.xml”) //item[@status=‘new’] Βρες όλα τα item elements που έχουν attribute status με
τιμή ‘new’.
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 39: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/39.jpg)
-39-
Εκφράσεις Μονοπατιών
document(“items.xml”) //item[reserve-price>=100] Βρες όλα τα item elements που έχουν παιδί το reserve-
price element και το οποίο έχει value > 100.
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 40: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/40.jpg)
-40-
Εκφράσεις Μονοπατιών
document(“items.xml”) //items/item[seller=Theo]/description
Βρες όλα τα description elements που έχουν αδέρφια element item (παιδιά του items) τα οποία έχουν παιδί element seller με τιμή Theo (branching XPATH).
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 3 </itemno>
<seller> Theo </seller>
<description> toy </description>
<reserve-price> 100 </reserve-price>
<end-date> 20/5/2005 </end-date>
</item>
<item status=“new”>
...
</item>
</items>
![Page 41: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/41.jpg)
-41-
Κατασκευαστές
Οι εκφράσεις μονοπατιών έχουν ένα σημαντικό μειονέκτημα: επιστρέφουν κόμβους.
Θα θέλαμε να υπάρχει δυνατότητα κατασκευής καινούριων element, value, καθορισμού των σχέσεων μεταξύ elements (δηλαδή το αποτέλεσμα να μην είναι μεμονωμένοι κόμβοι, αλλά δέντρο κομμάτι του μοντέλου XML), κ.λ.π.
Για το λόγο αυτό η XQuery παρέχει κατασκευαστές (constructors):
{έκφραση XQuery} η έκφραση αποτιμάται και η {...} αντικαθίστανται
από το αποτέλεσμα.
![Page 42: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/42.jpg)
-42-
Κατασκευαστές
Παραδείγματα κατασκευαστών:
<highbid status ''{$s}'‘> <itemno> {$i} </itemno> <bid-amount> {max($bids[itemno $i]/bid-amount)} </bid-amount></highbid>
<highbid>{$b/@status,$b/itemno,$b/bid-amount}</highbid>
![Page 43: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/43.jpg)
-43-
Iterators (For)
Παράδειγμα For iterator:FOR $m in (2, 3), $n in (5, 10)
RETURN <fact> {$m} times {$n} is {$m * $n} </fact> Αποτέλεσμα
<fact> 2 times 5 is 10</fact>
<fact> 2 times 10 is 20</fact>
<fact> 3 times 5 is 15</fact>
<fact> 3 times 10 is 30</fact>
![Page 44: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/44.jpg)
-44-
Iterators (For), Δέσιμο Μεταβλητών
Παράδειγμα For iterator με δέσιμο (binding) μεταβλητών:FOR $i in (1 to 3) LET $j := (1 to $i)
Αποτέλεσμα$i = 1, $j = 1
$i = 2, $j = (1, 2)
$i = 3, $j = (1, 2, 3) Το δέσιμο μεταβλητών σε For και Let δίνει την δυνατότητα
στην XQuery να διασχίζει το μοντέλο δεδομένων XML και να ψάχνει για πολλαπλά ταιριάσματα.
![Page 45: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/45.jpg)
-45-
FLoWeRs!
F: FOR L: LET W: WHERE R: RETURN FLWR (προφέρεται flower) expressions
![Page 46: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/46.jpg)
-46-
Παράδειγμα FLOWER 1 (lily)
Βρες αντικείμενα στα οποία έχουν δοθεί δύο προσφορές. Ερώτηση:
FOR $i in document(''items.xml'')/*/item
…
…
RETURN $i
bind
![Page 47: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/47.jpg)
-47-
Παράδειγμα FLOWER 1 (lily)
Βρες αντικείμενα στα οποία έχουν δοθεί δύο προσφορές. Ερώτηση:
FOR $i in document(''items.xml'')/*/item
LET $b := document(''bids.xml'')/*/bid[itemno = $i/itemno]
…
RETURN $i
bind
![Page 48: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/48.jpg)
-48-
Παράδειγμα FLOWER 1 (lily)
Βρες αντικείμενα στα οποία έχουν δοθεί δύο προσφορές. Ερώτηση:
FOR $i in document(''items.xml'')/*/item
LET $b := document(''bids.xml'')/*/bid[itemno = $i/itemno]
WHERE count ($b) = 2
RETURN $i
bind
![Page 49: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/49.jpg)
-49-
Παράδειγμα FLOWER 1 (lily)
<?xml version = "1.0"?>
<bids>
<bid>
<itemno> 1</itemno>
<bidder> George </bidder>
...
</bid>
<bid>
<itemno> 1 </itemno>
<bidder> Theo </bidder>
...
</bid>
<bid>
<itemno> 2 </itemno>
<bidder> George </bidder>
...
</bid>
</bids>
<?xml version = "1.0"?>
<items>
<item status=“old”>
<itemno> 1 </itemno>
....
</item>
<item status=“old”>
<itemno> 2 </itemno>
....
</item>
<item status=“old”>
<itemno> 3 </itemno>
....
</item>
![Page 50: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/50.jpg)
-50-
Παράδειγμα FLOWER 2 (dahlia)
Για κάθε αντικείμενο στο οποίο έχουν δοθεί παραπάνω από δέκα προσφορές, φτιάξε ένα element popular-item που να περιέχει τον κωδικό του αντικειμένου, την περιγραφή και τον αριθμό των προσφορών.
![Page 51: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/51.jpg)
-51-
Παράδειγμα FLOWER 2 (dahlia)
Για κάθε αντικείμενο στο οποίο έχουν δοθεί παραπάνω από δέκα προσφορές, φτιάξε ένα element popular-item που να περιέχει τον κωδικό του αντικειμένου, την περιγραφή και τον αριθμό των προσφορών.
Ερώτηση:FOR $i in document(''items.xml'')/*/itemLET $b := document(''bids.xml'')/*/bid[itemno = $i/itemno]WHERE count ($b) > 10….
![Page 52: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/52.jpg)
-52-
Παράδειγμα FLOWER 2 (dahlia)
Για κάθε αντικείμενο στο οποίο έχουν δοθεί παραπάνω από δέκα προσφορές, φτιάξε ένα element popular-item που να περιέχει τον κωδικό του αντικειμένου, την περιγραφή και τον αριθμό των προσφορών.
Ερώτηση:FOR $i in document(''items.xml'')/*/itemLET $b := document(''bids.xml'')/*/bid[itemno = $i/itemno]WHERE count ($b) > 10RETURN<popular-item>{
$i/itemno,$i/description,<bid-count> {count ($b)} </bid-count>
}</popular-item>
![Page 53: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/53.jpg)
-53-
Παράδειγμα FLOWER 3 (Chrysanthemum)
Έχοντας μια σειρά από elements emp, αντικατέστησε τον μισθό, την προμήθεια και τα bonus με ένα καινoύριο element pay που να περιέχει το άθροισμα των values των αρχικών elements, και βάλε σε αύξουσα σειρά το αποτέλεσμα με βάση το άθροισμα αυτό.
…
![Page 54: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/54.jpg)
-54-
Παράδειγμα FLOWER 3 (Chrysanthemum)
Έχοντας μια σειρά από elements emp, αντικατέστησε τον μισθό, την προμήθεια και τα bonus με ένα καινoύριο element pay που να περιέχει το άθροισμα των values των αρχικών elements, και βάλε σε αύξουσα σειρά το αποτέλεσμα με βάση το άθροισμα αυτό.
Ερώτηση:
FOR $e in $emps
…
![Page 55: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/55.jpg)
-55-
Παράδειγμα FLOWER 3 (Chrysanthemum)
Έχοντας μια σειρά από elements emp, αντικατέστησε τον μισθό, την προμήθεια και τα bonus με ένα καινoύριο element pay που να περιέχει το άθροισμα των values των αρχικών elements, και βάλε σε αύξουσα σειρά το αποτέλεσμα με βάση το άθροισμα αυτό.
Ερώτηση:FOR $e in $empsRETURN<emp>
{ $e/name, <pay> {$e/salary + $e/commission + $e/bonus} </pay>}
</emp>…
![Page 56: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/56.jpg)
-56-
Παράδειγμα FLOWER 3 (Chrysanthemum)
Έχοντας μια σειρά από elements emp, αντικατέστησε τον μισθό, την προμήθεια και τα bonus με ένα καινoύριο element pay που να περιέχει το άθροισμα των values των αρχικών elements, και βάλε σε αύξουσα σειρά το αποτέλεσμα με βάση το άθροισμα αυτό.
Ερώτηση:FOR $e in $empsRETURN<emp>
{ $e/name, <pay> {$e/salary + $e/commission + $e/bonus} </pay>}
</emp>sortby (pay)
![Page 57: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/57.jpg)
-57-
Παράδειγμα FLOWER 4 (Blue Pansy)
Φτιάξε ένα νέο element με όνομα recent-large-bids που να περιέχει όλα τα elements bid στο κείμενο bids.xml που έχουν αριθμό προσφορών πάνω από 1000 και ημερομηνία τελευταίας προσφοράς μετά την 1/1/2002.
Ερώτηση:
<recent-large-bids>
document(''bids.xml'')/*/bid[bid-amount > 1000.00]
intersect
document(''bids.xml'')/*/bid[bid-date > date(''2002-01-01'')]
</recent-large-bids>
![Page 58: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/58.jpg)
-58-
Παράδειγμα FLOWER 5 (Cream Pansy)
Φτιάξε ένα νέο element με όνομα recent-large-bids που να περιέχει όλα τα elements bid στο κείμενο bids.xml που έχουν αριθμό προσφορών πάνω από 1000 και ημερομηνία τελευταίας προσφοράς μετά την 1/1/2002.
Ερώτηση (με άλλον τρόπο):
<recent-large-bids>
document(''bids.xml'')/*/bid[bid-amount > 1000.00 and
bid-date > date(''2002-01-01'')]
</recent-large-bids>
![Page 59: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/59.jpg)
-59-
Παράδειγμα FLOWER 6 (Shasta Daisies)
Βρες τα αντικείμενα στο αρχείο items.xml για τα οποία όλες οι προσφορές ήταν διπλάσιες από την τιμή εκκίνησης, και τοποθέτησέ τα μέσα σε ένα νέο element με όνομα underpriced-items.
Ερώτηση:
<underpriced-items>
FOR $i in document(''items.xml'')
WHERE every $b in document(''bids.xml'')/*/bid[itemno = $i/itemno] satisfies $b/bid-amount > 2 * $i/reserve-price
RETURN $i
</underpriced-items>
![Page 60: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/60.jpg)
-60-
Παράδειγμα FLOWER 7 (Hemerocallis)
Όρισε μια συνάρτηση που να δέχεται ως παράμετρο ένα element item και μετά να βρίσκει το μεγαλύτερο ποσό προσφοράς που έχει καταγραφεί για το συγκεκριμένο αντικείμενο.
Ορισμός συνάρτησης:define function highbid(element $item)returns decimal{max(document(''bids.xml'')//bid[itemno = $item/itemno]/bid-amount)}
Χρήση:highbid(document(''items.xml'')//item[itemno = ''1234''])
![Page 61: Τεχνολογίες XML](https://reader035.fdocument.pub/reader035/viewer/2022062408/5681351a550346895d9c71d1/html5/thumbnails/61.jpg)
-61-
...άλλες δυνατότητες
Συνθήκες τύπων $i instance of xs:integer
το xs:integer έρχεται από το XML schema $k instance of element item $l instance of element*
Switch εντολή typeswitch (expression) as $a
case element of type A return $a/state
... If εντολή ... και πάρα πολλά άλλα.