API Java para processar o ficheiro XSD schema [fechado]
Existe uma API Java para processar um ficheiro XSD schema?
encontrei XSOM , mas parece que já não se mantém.
9 answers
Utilizando a norma 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");
Usámos o Apache Xerces http://xerces.apache.org funciona muito bem para nós.
Pode utilizar XMLBeans http://xmlbeans.apache.org . para a maioria dos casos de utilização em torno de ligações XML/Java, as pessoas parecem estar a mudar-se para o JAXB, dado que está incorporado. Mas para o que você quer fazer, XMLBeans fornece acesso a algumas grandes estruturas de dados de alto nível que representam esquemas de uma forma que é fácil de atravessar.
Podes começar com algo do género...SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] {
XmlObject.Factory.parse(xsdFile) }, XmlBeans.getBuiltinTypeSystem(), null);
A partir daí você deve ser capaz de descobrir como perfurar o sistema de esquemas a partir do JavaDoc.
Se alguém conhece uma alternativa que seja tão conveniente e relativamente suportada, seria ótimo saber sobre ela. Estou a procurar activamente.
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();
}
}
}
Tente EasyWSDL - pode processar ambas as especificações XSD e WSDL.
Usei esta cópia, mas não analisa os subgrupos de elementos abstractos. Por favor, consulte a minha pergunta https://stackoverflow.com/questions/25203139/parsing-a-abstract-node-with-substitutiongroup-using-apache-xerces-api-in-java
Como mencionado, um esquema é em si um XML válido. Queres carregá-lo para quê, validação? Se assim for, então existem algumas classes úteis no Pacote javax.xml.validation
.
Depende das suas necessidades específicas. Esta Página dá uma boa visão geral das principais opções e dos casos de uso que suportam.
Uma coisa a pensar: dependendo da plataforma para a qual está a implantar e de outras estruturas que está a usar, pode já haver várias APIs na sua árvore de dependências (a xerces é particularmente comum em servidores de aplicações, por exemplo). Cuidado com os conflitos de versões que podem ser um pesadelo para isolar e depurar.