Esiste un'API Java per analizzare un file di schema XSD?API Java per analizzare file di schema XSD
Ho trovato XSOM, ma non sembra essere più mantenuto.
Esiste un'API Java per analizzare un file di schema XSD?API Java per analizzare file di schema XSD
Ho trovato XSOM, ma non sembra essere più mantenuto.
Utilizzando JDK di serie 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");
ha dimenticato di menzionare che l'accesso a queste classi è limitato. Lo uso solo per gli strumenti; non so se puoi usarlo in fase di runtime. – emicklei
Questo è esattamente quello che stavo cercando. Grazie :) –
Funziona anche senza modificare globalmente il parser DOM: XSImplementation impl = new XSImplementationImpl(); – koppor
Abbiamo tendenzialmente utilizzato Apache Xerces http://xerces.apache.org/. Funziona davvero bene per noi.
Basta analizzare il file XSD? Tale approccio è molto complicato quando il file dello schema contiene molte dichiarazioni di tipi composti e complessi. –
Come accennato, uno schema è esso stesso XML valido. Per cosa vuoi caricarlo, convalida? In tal caso, nel pacchetto javax.xml.validation
sono disponibili alcune classi pratiche.
Per la convalida, ma non per la convalida del file XML. Devo estrarre tutti i tipi di dati da XSD e quindi esportare le restrizioni associate agli elementi al sistema di convalida esterno. –
Oppure dai un'occhiata a JAXP (https://jaxp.dev.java.net /) – Marcus
Non voglio legare XML né analizzare XSD a mano (cioè con JAXP). Ho bisogno dell'API per esplorare la struttura XSD, i tipi di lista definiti nello Schema e tutte le restrizioni ad essi associati. So di poter analizzare XSD con JAXP, ma per schemi molto complessi potrebbe esserci dolore negli a * s. –
Come altri hanno già detto, XSD è solo un documento XML valido. Usa un parser DOM, se hai intenzione di aggiornarlo o di doverlo navigare in ordine non sequenziale. Un parser SAX sarebbe molto efficace se si desidera estrarre gli elementi in ordine sequenziale e non dovrebbe essere difficile scrivere, anche per xml lungo/complesso, specialmente se si stanno solo estraendo i tipi e le restrizioni. E dal commento che hai fatto nel tuo post originale, penso che starai meglio scrivendo un parser SAX e convertendolo in regole di convalida interne. – Marcus
Dipende che cosa i vostri requisiti specifici sono. This page offre una buona panoramica delle principali opzioni e dei casi d'uso che supportano.
Una cosa a cui pensare: A seconda della piattaforma si sta distribuendo da e per altri framework in uso, ci potrebbe essere già varie API nel vostro albero delle dipendenze (xerces è particolarmente comune in App server per esempio). Fai attenzione ai conflitti di versione che possono essere un incubo per isolare e eseguire il debug.
Se ti piacciono le API standard, sei molto più sicuro. Ad esempio, gestisci Xerces come parser JAXP anziché APIS nativo. In questo modo, se porti a un altro framework e stai utilizzando un'altra implementazione JAXP, sei ancora al sicuro. –
Si prega di fare riferimento al commento che ho scritto alla domanda. Non ho bisogno dell'API di analisi XML. –
È possibile utilizzare XMLBeans http://xmlbeans.apache.org. Per la maggior parte dei casi di utilizzo attorno a XML/Java, le persone sembrano passare a JAXB da quando è integrato. Ma per ciò che si vuole fare, XMLBeans fornisce accesso ad alcune strutture di dati di alto livello che rappresentano schemae in un modo facile attraversare.
Si può iniziare con qualcosa di simile ...
SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] {
XmlObject.Factor.parse(xsdFile) }, XmlBeans.getBuiltInTypeSystem(), null);
Da lì si dovrebbe essere in grado di capire come forare lo SchemaTypeSystem dal JavaDoc.
Se qualcuno sa di un'alternativa altrettanto comoda e relativamente supportata, sarebbe bello saperlo. Sto guardando attivamente.
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();
}
}
}
ciao questo è il modo semplice per analizzare un file xsd .. –
definizioni del pacchetto sarebbe bello .... – Nenotlep
@Nenotlep org.w3c.dom.Document, org.w3c.dom.Element, org.w3c.dom.NodeList –
Ho usato questo Xerces, ma non analizza i gruppi di substittution degli elementi astratti. Si prega di fare riferimento alla mia domanda https://stackoverflow.com/questions/25203139/parsing-a-abstract-node-with-substitutiongroup-using-apache-xerces-api-in-java
Che cosa vuoi realizzare? Qualsiasi parser XML analizzerà un XSD, è solo un file XML. –
So che lo è :) Ho bisogno di caricare i vincoli di restrizione associati ai tipi di schema. Quindi ho bisogno di convertirli in regole di sistema di validazione in-house. E poi convalidare alcune complesse strutture di oggetti Java usando queste regole. Credimi non farò domande qui se ho solo bisogno di analizzare semplici file XSD o convalidare XML contro lo schema. –
Vedere anche http://stackoverflow.com/questions/533573/analyzing-xml-schemas-using-org-eclipse-xsd-and-maven2 – rds