Czy istnieje Java API do parsowania pliku schematu XSD?Java API do parsowania pliku schematu XSD
Znalazłem XSOM, ale nie wydaje się już być utrzymywane.
Czy istnieje Java API do parsowania pliku schematu XSD?Java API do parsowania pliku schematu XSD
Znalazłem XSOM, ale nie wydaje się już być utrzymywane.
Używając standardowego 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");
zapomniałem wspomnieć, że dostęp do tych klas jest ograniczony. Używam tego tylko do oprzyrządowania; nie wiem, czy możesz użyć tego w czasie wykonywania. – emicklei
Tego właśnie szukałem. Dzięki :) –
Działa również bez globalnej zmiany parsera DOM: XSImplementation impl = new XSImplementationImpl(); – koppor
Mamy tendencję do używania Apache Xerces http://xerces.apache.org/. Działa bardzo dobrze dla nas.
Po prostu przeanalizuj plik XSD? Takie podejście jest bardzo skomplikowane, gdy plik schematu zawiera wiele złożonych i złożonych deklaracji typów. –
Jak już wspomniano, schemat sam w sobie jest prawidłowym kodem XML. Do czego chcesz go załadować, sprawdzanie poprawności? Jeśli tak, to jest kilka przydatnych klas w pakiecie javax.xml.validation
.
Do sprawdzania poprawności, ale nie do sprawdzania poprawności pliku XML. Należy wyodrębnić wszystkie typy danych z XSD, a następnie wyeksportować ograniczenia związane z elementami do zewnętrznego systemu sprawdzania poprawności. –
Lub spójrz na JAXP (https://jaxp.dev.java.net /) – Marcus
Nie chcę powiązania XML ani parsować XSD ręcznie (np. z JAXP). Potrzebuję API do przeglądania struktury XSD, typów list zdefiniowanych w Schemie i wszystkich ograniczeń z nimi związanych. Wiem, że mogę parsować XSD z JAXP ale dla bardzo złożonych schematów może być ból w a * s. –
Jak powiedzieli inni, XSD to tylko poprawny dokument XML. Użyj parsera DOM, jeśli zamierzasz go zaktualizować lub musisz nawigować po nim w niesekwencyjnej kolejności. Parser SAX byłby bardzo wydajny, jeśli chcesz wyodrębnić elementy w kolejności sekwencyjnej i nie powinno być trudne pisanie, nawet dla długich/złożonych xml - szczególnie, jeśli po prostu wyodrębniasz typy i ograniczenia. I z komentarza wprowadzonego w oryginalnym poście, myślę, że lepiej jest napisać parser SAX i przekonwertować go do wewnętrznych reguł sprawdzania poprawności. – Marcus
Zależy co swoje specyficzne wymagania. This page daje dobry przegląd głównych opcji i przypadków użycia, które obsługują.
Jedna rzecz do przemyślenia: w zależności od platformy, na której wdrażasz i innych frameworków, z których korzystasz, w twoim drzewie zależności mogą znajdować się już różne interfejsy API (na przykład Xerces jest powszechny na przykład w AppServer). Uważaj na konflikty wersji, które mogą być koszmarem do izolacji i debugowania.
Jeśli trzymasz się standardowych interfejsów API, jesteś o wiele bezpieczniejszy. Na przykład radzimy sobie z Xerces jako analizatorem składni JAXP zamiast natywnego APIS. W ten sposób, jeśli przeniesiesz się do innej struktury i używasz innej implementacji JAXP, nadal jesteś bezpieczny. –
Proszę odnieść się do komentarza, który napisałem na pytanie. Nie potrzebuję API do analizowania XML. –
Możesz użyć XMLBeans http://xmlbeans.apache.org. W większości przypadków związanych z powiązaniami XML/Java ludzie przenoszą się do JAXB, ponieważ jest on wbudowany. Ale dla tego, co chcesz zrobić, XMLBeans zapewnia dostęp do niektórych wysokopoziomowych struktur danych, które reprezentują schematy w sposób łatwy do trawers.
Można zacząć od czegoś jak ...
SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] {
XmlObject.Factor.parse(xsdFile) }, XmlBeans.getBuiltInTypeSystem(), null);
Stamtąd powinieneś być w stanie dowiedzieć się, jak drążenie do SchemaTypeSystem z JavaDoc.
Jeśli ktoś zna alternatywę, która jest równie wygodna i względnie obsługiwana, dobrze byłoby o niej wiedzieć. Aktywnie patrzę.
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();
}
}
}
Witam, to jest prosty sposób na parsowanie pliku xsd. –
Definicja pakietu byłaby miła ... – Nenotlep
@Nenotlep org.w3c.dom.Document, org.w3c.dom.Element, org.w3c.dom.NodeList –
Użyłem tego Xerces, ale nie parsuje grup zastępczych elementów abstrakcyjnych. Proszę podać moje pytanie https://stackoverflow.com/questions/25203139/parsing-a-abstract-node-with-substitutiongroup-using-apache-xerces-api-in-java
Co chcesz osiągnąć? Każdy analizator składni XML przeanalizuje XSD, to tylko plik XML. –
Wiem, że to :) Potrzebuję załadować ograniczenia ograniczeń związanych z typami schematu. Następnie muszę je przekonwertować na wewnętrzne reguły systemu sprawdzania poprawności. Następnie sprawdź poprawność niektórych złożonych struktur obiektów Java, korzystając z tych reguł. Uwierz mi, że nie zadam tutaj pytania, czy po prostu potrzebuję parsować prosty plik XSD, czy zweryfikować XML w stosunku do schematu. –
Zobacz także http://stackoverflow.com/questions/533573/analyzing-xml-schemas-using-org-eclipse-xsd-and-maven2 – rds