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.
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");
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 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.
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();
}
}
}
Essayez EasyWSDL - il peut analyser les spécifications XSD et WSDL.
Voir ceci question
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.
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.