Αυτή την εβδομάδα, έλαβα μια ενδιαφέρουσα εργασία: σκουπίζοντας μια κληρονομική εφαρμογή Java. Η εφαρμογή αναλύει συγκεκριμένα αρχεία XML σε ιδιόκτητη μορφή. Ξέρω ότι το XML δεν ακούγεται σέξι για τους νεότερους προγραμματιστές, αλλά έχει ένα καταπληκτικό όφελος. Μπορεί κανείς να επικυρώσει ένα αρχείο έναντι μιας γραμματικής. Μια τέτοια γραμματική ονομάζεται XSD, το ακρωνύμιο για XML Schema Definition. Σε αυτό το άρθρο, εξηγώ το πρόβλημα, τι προσπάθησα και την τελική λύση εργασίας. Το πρόβλημα Το καλό είναι ότι η εφαρμογή χρησιμοποιεί ήδη XSD. Ωστόσο, κατά τη στιγμή της έναρξης της εφαρμογής, η επικύρωση XSD ήταν σε . . προστέθηκαν αρκετά σημαντικά χαρακτηριστικά. ειδικότερα, το v1.1 προσθέτει και . Έκδοση 1.0 Εκδοχή 1.1 ισχυρισμοί Τα όρια της ταυτότητας Υπήρχαν πολυάριθμα σχόλια "//TODO validate" στον κώδικα Java που δεν θα μπορούσαν να εφαρμοστούν στο XSD 1.0 αλλά θα μπορούσαν να εφαρμοστούν στο XSD 1.1. Η αφελής προσέγγιση Κάτω από το καπάκι, το JDK χρησιμοποιεί μια ενσωματωμένη εφαρμογή Xerces για ανάλυση. Για διασκέδαση, ελέγξτε το πακέτο `com.sun.org.apache.xerces.internal.jaxp` στα εγκατεστημένα JDK σας. Αυτή η εφαρμογή είναι κολλημένη στην επικύρωση XSD 1.1. Υποθέτω ότι η Το έργο θα είχε προχωρήσει και το εφάρμοσε. πρόσθεσα την πιο πρόσφατη έκδοση στην κατασκευή μου, και... τίποτα. έθαψα βαθύτερα στο JAR και βρήκα τα εξής: Τακτικά Xerces public final class Constants { /** XML 1.1 feature ("xml-1.1"). */ public static final String XML_11_FEATURE = "xml-1.1"; // Constant to enable Schema 1.1 support public final static boolean SCHEMA_1_1_SUPPORT = false; public final static short SCHEMA_VERSION_1_0 = 1; public final static short SCHEMA_VERSION_1_0_EXTENDED = 2; } - της Ετικέτα: Java Ετικέτα: Java Αν είστε μπερδεμένοι επειδή το σχήμα 1.1 υποστήριξη είναι μια σταθερή, καλώς ήρθατε στον κόσμο μου. Το έργο περιλαμβάνει δύο δυνητικά ενδιαφέρουσες κλάδους, και Η Η τάξη στο προηγούμενο κλάδο μοιάζει με: Τζέιμς Τζ xml-schema-1.1-dev xml-schema-1.1-tests Constants public final class Constants { /** XML 1.1 feature ("xml-1.1"). */ public static final String XML_11_FEATURE = "xml-1.1"; // Constant to enable Schema 1.1 support public final static boolean SCHEMA_1_1_SUPPORT = false; public final static short SCHEMA_VERSION_1_0 = 1; public final static short SCHEMA_VERSION_1_0_EXTENDED = 2; public final static short SCHEMA_VERSION_1_1 = 4; } Ακόμα δεν υποστηρίζεται 2. αλλά φαίνεται ελπιδοφόρα Ετικέτα: Java Ετικέτα: Java Έψαχνα για ένα τέτοιο αντικείμενο : δεν εμφανίζει αφιερωμένο αντικείμενο. ΚΕΝΤΡΙΚΗ ΜΑΓΕΝΑ Δεν μου ήρθε στο μυαλό εκείνη τη στιγμή, αλλά ενώ έγραφα την ανάρτηση, ελέγξα: το Η σελίδα προσφέρει μια διανομή XSD 1.1. Αυτό θα σήμαινε να πάρετε το JAR, να δημιουργήσετε μια χαζή POM και να τις δημοσιεύσετε στο εσωτερικό Artifactory, το οποίο δεν έχω πρόσβαση σε γραφή. Κατεβάστε το Xerces Αναζήτηση εναλλακτικών λύσεων Έψαξα για εναλλακτικές λύσεις, αλλά η μόνη που βρήκα ήταν η Σαξονία. Το πακέτο Saxon είναι μια συλλογή εργαλείων για την επεξεργασία εγγράφων XML. An XSLT processor, which can be used from the command line, or invoked from an application, using a supplied API. Saxon implements the XSLT 3.0 Recommendation. The product can also be used to run XSLT 2.0 stylesheets, or XSLT 1.0 stylesheets in backwards compatibility mode. Ένας επεξεργαστής XPath προσβάσιμος σε εφαρμογές μέσω ενός παρεχόμενου API. Αυτό υποστηρίζει XPath 2.0 και XPath 3.1. Μπορεί επίσης να χρησιμοποιηθεί σε λειτουργία συμβατότητας προς τα πίσω για την αξιολόγηση των εκφράσεων XPath 1.0. An XQuery processor that can be used from the command line, or invoked from an application by use of a supplied API. This supports XQuery 3.1, which also allows XQuery 1.0 or 3.0 queries to be executed. With Saxon-EE, you can also use the XQuery extensions defined in the XQuery Update 1.0 Recommendation, but later working drafts of XQuery Update are not supported (W3C has abandoned work on these versions). An XML Schema Processor. . This can be used on its own to validate a schema for correctness, or to validate a source document against the definitions in a schema. It is also used to support the schema-aware functionality of the XSLT and XQuery processors. Like the other tools, it can be run from the command line, or invoked from an application. This supports both XSD 1.0 and XSD 1.1 Το πακέτο Saxon είναι μια συλλογή εργαλείων για την επεξεργασία εγγράφων XML. Ένας επεξεργαστής XSLT, ο οποίος μπορεί να χρησιμοποιηθεί από τη γραμμή εντολών ή να επικαλεστεί από μια εφαρμογή, χρησιμοποιώντας ένα παρεχόμενο API. Η Saxon εφαρμόζει τη σύσταση XSLT 3.0. Το προϊόν μπορεί επίσης να χρησιμοποιηθεί για να εκτελέσει φύλλα στυλ XSLT 2.0 ή φύλλα στυλ XSLT 1.0 σε λειτουργία συμβατότητας προς τα πίσω. Ένας επεξεργαστής XPath προσβάσιμος σε εφαρμογές μέσω ενός παρεχόμενου API. Αυτό υποστηρίζει XPath 2.0 και XPath 3.1. Μπορεί επίσης να χρησιμοποιηθεί σε λειτουργία συμβατότητας προς τα πίσω για την αξιολόγηση των εκφράσεων XPath 1.0. Ένας επεξεργαστής XQuery που μπορεί να χρησιμοποιηθεί από τη γραμμή εντολών ή να επικαλεστεί από μια εφαρμογή χρησιμοποιώντας ένα παρεχόμενο API. Αυτό υποστηρίζει το XQuery 3.1, το οποίο επιτρέπει επίσης την εκτέλεση ερωτήσεων XQuery 1.0 ή 3.0. Με το Saxon-EE, μπορείτε επίσης να χρησιμοποιήσετε τις επεκτάσεις XQuery που ορίζονται στην XQuery Update 1.0 Σύσταση, αλλά μεταγενέστερα σχέδια εργασίας του XQuery Update δεν υποστηρίζονται (το W3C έχει εγκαταλείψει την εργασία σε αυτές τις εκδόσεις). Ένας επεξεργαστής σχήματος XML. Αυτό υποστηρίζει τόσο το XSD 1.0 όσο και το XSD 1.1. Αυτό μπορεί να χρησιμοποιηθεί από μόνο του για να επικυρώσει ένα σχήμα για ορθότητα ή για να επικυρώσει ένα έγγραφο προέλευσης έναντι των ορισμών σε ένα σχήμα. Χρησιμοποιείται επίσης για να υποστηρίξει τη λειτουργικότητα συνειδητοποίησης σχήματος των επεξεργαστών XSLT και XQuery. Όπως και τα άλλα εργαλεία, μπορεί να τρέξει από τη γραμμή εντολών ή να επικαλεστεί από μια εφαρμογή. Τι είναι η Σαξονία; Τι είναι η Σαξονία; Αφού ερεύνησα λίγο, διαπίστωσα ότι ο Sax είχε δύο σημαντικά μειονεκτήματα: Παρόλο που είναι δυνατόν να χρησιμοποιήσετε το κανονικό API JAXP, πρέπει να μεταβείτε στο ιδιόκτητο API της Saxon για να ξεκλειδώσετε την πλήρη ισχύ του. Η Saxon έρχεται σε δύο γεύσεις: η Enterprise Edition είναι πληρωμένη και η Home Edition είναι δωρεάν. Δεν είχα προϋπολογισμό και δεν είχα χρόνο να το κυνηγήσω. Επιστροφή στην Πλατεία 1 Ήρθε η ώρα να επανεκτιμηθεί η κατάσταση. Η κατασκευή από την πηγή; Δεν είναι εφικτή. Σαξονία; Πληρωμή. Η τελευταία μου ελπίδα ήταν η τεχνητή νοημοσύνη. Αποδεικνύεται ότι υπάρχουν δύο κατασκευές Xerces με χαρακτηριστικά XSD 1.1 Δημοσιεύθηκαν από το OpenGIS το 2015-2016, σε μια εποχή που ήταν αρκετά εύκολο να δημοσιευτούν εκεί. Στην πραγματικότητα αναφέρεται από ποιο κλάδο προέρχεται: . ΚΕΝΤΡΙΚΗ ΜΑΓΕΝΑ τους ΠΟΜ http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/ Σε αυτό το σημείο, ήμουν μερικές γραμμές κώδικα μακριά από το στόχο: var schemaFactory = SchemaFactory.newInstance(Constants.W3C_XML_SCHEMA11_NS_URI); var schema = schemaFactory.newSchema(schemaFile); var saxParserFactory = SAXParserFactory.newInstance(); saxParserFactory.setNamespaceAware(true); saxParserFactory.setSchema(schema); var reader = saxParserFactory.newSAXParser().getXMLReader(); reader.setContentHandler(handler); reader.setErrorHandler(handler); reader.setEntityResolver(handler); Χρησιμοποιήστε την έκδοση XSD 1.1 Βάλτε το σχέδιο στο εργοστάσιο Κανονικό Sax Parsing Πρέπει ακόμα να επικυρώσω σωστά ότι δεν υπάρχει πρόβλημα ασφαλείας από αυτή τη "άγρια" κατασκευή, αλλά λειτουργεί: μπορώ να αξιοποιήσω τα χαρακτηριστικά από το XSD 1.1! Συμπέρασμα Σε αυτή την ανάρτηση, περιέγραψα το ταξίδι μου για την εφαρμογή της επικύρωσης XSD 1.1 στην Java. Είναι πολύ λιγότερο εύκολο από ό, τι περίμενα στην αρχή, αλλά ελπίζω ότι θα βοηθήσει άλλους που βρίσκονται στην ίδια κατάσταση. Για να προχωρήσουμε παραπέρα: Java API για επεξεργασία XML (JAXP) Το Apache XercesTM Project Αρχικά δημοσιεύθηκε στο A Java Geek Το Java Geek