API Java pour analyser le fichier de schéma XSD [fermé]
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.
9 answers
Utilisation de la norme 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");
Nous avons eu tendance à utiliser Apache Xerces http://xerces.apache.org / . Fonctionne très bien pour nous.
Vous pouvez utiliser XMLBeans http://xmlbeans.apache.org . Pour la plupart des cas d'utilisation autour de la liaison XML/Java, les gens semblent se déplacer vers JAXB car 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 facile à parcourir.
Vous pouvez commencer par quelque chose comme...
SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] {
XmlObject.Factory.parse(xsdFile) }, XmlBeans.getBuiltinTypeSystem(), null);
À partir de là, vous devriez être en mesure de comprendre comment percer dans le SchemaTypeSystem à partir du JavaDoc.
Si quelqu'un connaît une alternative aussi pratique et relativement supportée, il serait bon de la connaître. Je suis activement à la recherche.
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();
}
}
}
TryEasyWSDL - il peut analyser les spécifications XSD et WSDL.
J'ai utilisé ce Xerces, mais il n'analyse pas les groupes de substitution d'éléments abstraits. Veuillez vous référer à ma question https://stackoverflow.com/questions/25203139/parsing-a-abstract-node-with-substitutiongroup-using-apache-xerces-api-in-java
Comme mentionné, un schéma est lui-même XML valide. Pour quoi voulez-vous le charger, validation? Si c'est le cas, il existe des classes pratiques dans le package javax.xml.validation
.
Dépend de vos besoins spécifiques. Cette page donne un bon aperçu des principales options et les cas d'utilisation qu'ils soutiennent.
Une chose à penser: Selon la plate-forme sur laquelle vous déployez et les 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 les serveurs d'applications par exemple). Méfiez-vous des conflits de version qui peuvent être un cauchemar à isoler et à déboguer.