validar - API de Java para analizar el archivo de esquema XSD
validate xsd java example (9)
Como se mencionó, un esquema es en sí mismo un XML válido. ¿Para qué quieres cargarlo, validación? Si es así, hay algunas clases prácticas en el paquete javax.xml.validation
.
¿Hay una API de Java para analizar un archivo de esquema XSD?
Encontré XSOM , pero parece que ya no se mantiene.
Depende de cuáles sean sus requerimientos específicos. Esta página ofrece una buena visión general de las principales opciones y los casos de uso que admiten.
Una cosa en que pensar: dependiendo de la plataforma en la que esté implementando y otros marcos que esté utilizando, es posible que ya existan varias API en su árbol de dependencias (por ejemplo, xerces es particularmente común en los Servidores de Aplicaciones). Tenga cuidado con los conflictos de versión que pueden ser una pesadilla para aislar y depurar.
Hemos tendido a utilizar Apache Xerces http://xerces.apache.org/ . Funciona muy bien para nosotros.
Puede utilizar XMLBeans http://xmlbeans.apache.org . Para la mayoría de los casos de uso alrededor del enlace XML / Java, parece que las personas se están moviendo a JAXB ya que está integrado. Pero para lo que quiere hacer, XMLBeans brinda acceso a algunas estructuras de datos de alto nivel que representan esquemas de una manera que es fácil atravesar.
Puedes empezar con algo como ...
SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] {
XmlObject.Factory.parse(xsdFile) }, XmlBeans.getBuiltinTypeSystem(), null);
Desde allí, debería poder averiguar cómo profundizar en el SchemaTypeSystem desde el JavaDoc.
Si alguien conoce una alternativa que sea tan conveniente y relativamente compatible, sería bueno saberlo. Estoy buscando activamente
Usando JDK 6 estándar:
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");
Utilicé este Xerces, pero no analiza los grupos de subdivisión de elementos abstractos. Consulte mi pregunta https://.com/questions/25203139/parsing-a-abstract-node-with-substitutiongroup-using-apache-xerces-api-in-java
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();
}
}
}