DedSec Project

xquery — συγκεντρωτικός οδηγός — DedSec Project

xquery — συγκεντρωτικός οδηγός XQuery Τι προσφέρει η γλώσσα Η XQuery επεξεργάζεται XML με path expressions και sequences. Τα namespaces δεν λειτουργούν όπως η απλή αναζήτηση κλειδιών JSON…

XQuery

Τι προσφέρει η γλώσσα

Η XQuery επεξεργάζεται XML με path expressions και sequences. Τα namespaces δεν λειτουργούν όπως η απλή αναζήτηση κλειδιών JSON.

Μικρό παράδειγμα προς μελέτη

for $n in (2, 3, 5) return $n * $n

Σύγκρινε τη σειρά και το πλήθος τιμών. Έπειτα κάνε αναζήτηση σε τοπικό XML με και χωρίς namespace prefix.

Τι να επαληθεύσεις

Κατάγραψε την πραγματική έκδοση εργαλείου, τις απαιτούμενες εξαρτήσεις και την έξοδο σε δοκιμαστικά δεδομένα για τη XQuery. Πρόβλεψε το αποτέλεσμα πριν το ελέγξεις και διατήρησε την αρχική και τη διορθωμένη εκδοχή ώστε να φαίνεται η αιτιώδης διαφορά. Μην αποκαλείς ένα απόσπασμα εκτελεσμένο αν δεν έχεις το κατάλληλο περιβάλλον.

Παγίδα ειδική για το θέμα

Στοιχείο XML με default namespace δεν ταιριάζει πάντα σε απλό όνομα· δήλωσε τα namespaces ρητά.

Εργαστήριο εξάσκησης: XQuery

Μια μετρήσιμη αφετηρία

Στο 00_starter.xq υπάρχει for $n in (1, 2, 3) return $n * $n. Εκτέλεσέ το με επεξεργαστή XQuery 3.1, όπως συμβατή έκδοση BaseX ή Saxon. Τα αναμενόμενα στοιχεία της ακολουθίας είναι 1, 4, 9. Διαφορετική μορφοποίηση εκτύπωσης δεν σημαίνει κατ' ανάγκη διαφορετικό αποτέλεσμα: σύγκρινε τις τιμές και τη σειρά τους.

Φιλτράρισμα πριν από τον υπολογισμό

Αποθήκευσε ξεχωριστά το odd-squares.xq:

for $n in 1 to 7
where $n mod 2 = 1
return $n * $n

Προέβλεψε την ακολουθία (1, 9, 25, 49). Το for δεσμεύει έναν ακέραιο κάθε φορά, το where απορρίπτει τους άρτιους και το return δημιουργεί αποτέλεσμα για κάθε εγγραφή που επιβιώνει. Σύγκρινε με let: δεν δεσμεύει μια νέα τιμή ανά στοιχείο με τον ίδιο τρόπο, επομένως μπορεί να επηρεάσει το πλήθος αποτελεσμάτων. Διάβασε τη σύνταξη εκτέλεσης του εγκατεστημένου εργαλείου αντί να υποθέσεις κοινές επιλογές γραμμής εντολών.

Όριο αποτυχίας κατά τη μετατροπή

Δοκίμασε χωριστά xs:integer("12") και xs:integer("twelve"). Η πρώτη μετατροπή αναμένεται να πετύχει, η δεύτερη να δημιουργήσει σφάλμα μετατροπής ή δυναμικής αξιολόγησης. Φύλαξε τον πραγματικό κωδικό σφάλματος και την έκδοση του processor. Μια διαδρομή XPath που δεν βρίσκει κόμβους μπορεί απλώς να επιστρέψει κενή ακολουθία: δεν ισοδυναμεί με μηδέν ή με αποτυχημένο cast.

Επέκταση σε XML

Κατασκεύασε τοπικό fixture.xml με δύο στοιχεία <item price="..."/> μέσα σε <items>. Επίλεξέ τα με doc("fixture.xml")/items/item και κάνε ρητή αριθμητική μετατροπή του @price. Πρόσθεσε τρίτο στοιχείο χωρίς ιδιότητα price. Όρισε εκ των προτέρων αν το πρόγραμμα θα το αγνοεί ή θα επιστρέφει σφάλμα εγκυρότητας. Μην εξαρτάσαι από τυχαία αυτόματη μετατροπή τύπων.

Αποδεικτικά ολοκλήρωσης

Παράδωσε τις δύο σωστές ακολουθίες, ένα σκόπιμο σφάλμα μετατροπής και τη συμπεριφορά για χαμένη ιδιότητα XML. Εξήγησε πώς η πληθικότητα επηρεάζει ένα ερώτημα. Πρότυπο: https://www.w3.org/TR/xquery-31/

XQuery — Διαδρομή ουσιαστικής εξάσκησης

Πρακτικές εργασίες

  1. Σχεδίασε δύο σχετικούς πίνακες με κανονικοποιημένα δεδομένα.
  2. Γράψε παραμετροποιημένο ερώτημα ή αντίστοιχη έκφραση σε δοκιμαστικά δεδομένα.
  3. Έλεγξε ελλείπουσες τιμές, διπλότυπα και σταθερή σειρά.

Ερωτήσεις ουσίας