API Java per analizzare il file dello schema XSD [chiuso]


Esiste un'API Java per analizzare un file di schema XSD?

Ho trovato XSOM, ma non sembra essere mantenuto più.

Author: Peter Mortensen, 2010-10-22

9 answers

Utilizzando lo standard JDK 6:

System.setProperty(DOMImplementationRegistry.PROPERTY, "com.sun.org.apache.xerces.internal.dom.DOMXSImplementationSourceImpl");
DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); 
com.sun.org.apache.xerces.internal.impl.xs.XSImplementationImpl impl = (XSImplementationImpl) registry.getDOMImplementation("XS-Loader");
XSLoader schemaLoader = impl.createXSLoader(null);
XSModel model = schemaLoader.loadURI("src/test/resources/my.xsd");
 19
Author: emicklei, 2015-10-19 15:40:35

Abbiamo avuto la tendenza ad usare Apache Xerces http://xerces.apache.org / . Funziona davvero bene per noi.

 4
Author: Chris Aldrich, 2010-10-22 12:46:36

Puoi usare XMLBeans http://xmlbeans.apache.org. Per la maggior parte dei casi d'uso attorno al binding XML/Java, le persone sembrano spostarsi su JAXB poiché è integrato. Ma per quello che vuoi fare, XMLBeans fornisce l'accesso ad alcune grandi strutture di dati di alto livello che rappresentano gli schemi in un modo facile da attraversare.

Puoi iniziare con qualcosa di simile...

SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] {
    XmlObject.Factory.parse(xsdFile) }, XmlBeans.getBuiltinTypeSystem(), null);

Da lì dovresti essere in grado di capire come eseguire il drill nello SchemaTypeSystem dal JavaDoc.

Se qualcuno conosce un'alternativa che è altrettanto conveniente e relativamente supportata, sarebbe bello saperlo. Sto cercando attivamente.

 4
Author: Chuck, 2018-03-21 13:03:43
public class XsdElements {
    public static void main(String args[]) { 
        try { 
            // parse the document
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            Document doc = docBuilder.parse (new File("C:/Users/rb054/Desktop/Descriptor.1.5.1.xsd")); 
            NodeList list = doc.getElementsByTagName("xs:element"); 

            //loop to print data
            for(int i = 0 ; i < list.getLength(); i++)
            {
                Element first = (Element)list.item(i);
                if(first.hasAttributes())
                {
                    String nm = first.getAttribute("name"); 
                    System.out.println(nm); 
                    String nm1 = first.getAttribute("type"); 
                    System.out.println(nm1); 
                }
            }
        } 
        catch (ParserConfigurationException e) 
        {
            e.printStackTrace();
        }
        catch (SAXException e) 
        { 
            e.printStackTrace();
        }
        catch (IOException ed) 
        {
            ed.printStackTrace();
        }
    }
}
 3
Author: Roshan Dsouza, 2014-02-17 13:08:03

Prova EasyWSDL - può analizzare sia le specifiche XSD che WSDL.

 2
Author: Martin, 2012-11-05 00:51:56

JAXB

Vedi questa domanda

 1
Author: Marcus, 2017-05-23 11:46:18

Ho usato questo Xerces, ma non analizza i gruppi di sostituzione degli elementi astratti. Si prega di fare riferimento alla mia domanda https://stackoverflow.com/questions/25203139/parsing-a-abstract-node-with-substitutiongroup-using-apache-xerces-api-in-java

 1
Author: Binyamin Melepat, 2017-05-23 12:25:46

Come accennato, uno schema è di per sé XML valido. Per cosa vuoi caricarlo, convalida? Se è così allora ci sono alcune classi utili nel pacchetto javax.xml.validation.

 0
Author: Qwerky, 2010-10-22 12:56:30

Dipende da quali sono i tuoi requisiti specifici. Questa pagina fornisce una buona panoramica delle principali opzioni e dei casi d'uso che supportano.

Una cosa a cui pensare: a seconda della piattaforma su cui stai distribuendo e di altri framework che stai utilizzando, potrebbero esserci già varie API nel tuo albero delle dipendenze (xerces è particolarmente comune nei server delle app, ad esempio). Fai attenzione ai conflitti di versione che possono essere un incubo da isolare ed eseguire il debug.

 0
Author: Andrew Harmel-Law, 2010-10-22 13:00:43