web-dev-qa-db-fra.com

Java API pour analyser le fichier de schéma XSD

Existe-t-il une API Java pour analyser un fichier de schéma XSD?

J'ai trouvé XSOM , mais il ne semble plus être maintenu.

19
Henryk Konsek

Utilisation du JDK 6 standard:

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");
20
emicklei

Nous avons eu tendance à utiliser Apache Xerces http://xerces.Apache.org/ . Fonctionne très bien pour nous.

4
Chris Aldrich

Vous pouvez utiliser XMLBeans http://xmlbeans.Apache.org . Pour la plupart des cas d'utilisation liés à la liaison XML/Java, les gens semblent migrer vers JAXB depuis qu'il est intégré. Mais pour ce que vous voulez faire, XMLBeans donne accès à d'excellentes structures de données de haut niveau qui représentent des schémas d'une manière qui est facile à traverser.

Vous pouvez commencer avec quelque chose comme ...

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

De là, vous devriez être en mesure de comprendre comment explorer le SchemaTypeSystem à partir du JavaDoc.

Si quelqu'un connaît une alternative aussi pratique et relativement soutenue, ce serait bien de la connaître. Je cherche activement.

4
Chuck
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();
        }
    }
}
4
Roshan Dsouza

Essayez EasyWSDL - il peut analyser les spécifications XSD et WSDL.

2
Martin
1
Marcus

Comme mentionné, un schéma est lui-même du XML valide. Pour quoi voulez-vous le charger, validation? Si c'est le cas, il y a quelques classes pratiques dans le javax.xml.validation paquet.

0
Qwerky

Cela dépend de vos besoins spécifiques. Cette page donne un bon aperçu des principales options et des cas d'utilisation qu'elles prennent en charge.

Une chose à laquelle penser: en fonction de la plateforme sur laquelle vous déployez et des autres frameworks que vous utilisez, il peut déjà y avoir différentes API dans votre arborescence de dépendances (xerces est particulièrement courant dans App Servers par exemple). Attention aux conflits de version qui peuvent être un cauchemar pour isoler et déboguer.

0
Andrew Harmel-Law