Aug 5, 2011

Ανάλυση XML αρχείων στο Linux

Είχα αναφερθεί στο παρελθόν (http://serafeimk.blogspot.com/2010/12/xml-metadata-adf.html) στην κατασκευή ενός database repository που θα αποθηκεύει τη δομή μιας ADF εφαρμογής (entities, view object XMLs, σελίδες JSPX, κοκ) ώστε να γίνει αντικείμενο ανάλυσης με κατάλληλα σχεσιακά SQL ερωτήματα. Μια άλλη προσέγγιση (πιο απλή αλλά και κατά περίπτωση πιο περιοριστική) στο ίδιο αντικείμενο έχει να κάνει με απευθείας πρόσβαση στα XML αρχεία μέσα από το σύστημα αρχείων και άμεση επεξεργασία τους. Με μεγάλη μου χαρά διαπίστωσα πως το Linux υπάρχουν διάφορα command-line εργαλεία που επεξεργάζονται αποτελεσματικά την XML. Όλα αυτά μου φέρνουν στο μυαλό το κεφάλαιο του Διομήδη Σπινέλλη με τίτλο "The UNIX Tools Are Your Friends" στο βιβλίο "97 Things Every Programmer Should Know" της O' Reilly, άποψη που φυσικά με βρίσκει απόλυτα σύμφωνο.

Ένα από αυτά τα εργαλεία που χρησιμοποίησα λοιπόν είναι το XMLStarlet (http://xmlstar.sourceforge.net/) που επιτρέπει την κατασκευή, διόρθωση, επικύρωση ή αναζήτηση κειμένου σε XML αρχεία και που βρίσκεται στα αποθετήρια τόσο του Ubuntu όσο και του openSuSE. Για παράδειγμα, έστω πως όλα τα command toolbar button μας υποχρεωτικά έχουν εικονίδιο (icon) Θέλοντας να βρούμε τις σελίδες ADF στις οποίες παραβιάζεται αυτός ο κανόνας, αρκεί να γράψουμε:

find . -type f -name "*.js??"| xargs xmlstarlet sel -N af="http://xmlns.oracle.com/adf/faces/rich" -t -m "//af:commandToolbarButton[not(@icon)]" -n -f | sort | uniq

Τέτοιου είδους ερωτήματα μπορούν να φτιαχτούν πολύ εύκολα με τη βοήθεια του XMLStarlet και να αποτελέσουν αντικείμενο ανάλυσης ή αυτοματοποιημένης εκτέλεσης μέσω build scripts. Ενδιαφέρον επίσης εργαλείο είναι το xmllint (http://xmlsoft.org/xmllint.html) που διαθέτει και ένα interactive shell ώστε να επεξεργαστούμε τα αρχεία μας.

No comments: