Używam Java 5 javax.xml.validation.Validator do sprawdzania poprawności pliku XML. Zrobiłem to dla jednego schematu, który używa tylko importu i wszystko działa dobrze. Teraz próbuję sprawdzić poprawność za pomocą innego schematu, który używa importu i jeden dołącz. Problemem jest to, że element głównego schematu jest ignorowany, a walidacja mówi, że nie może znaleźć deklaracji.Jak sprawdzić poprawność pliku XML przy użyciu języka Java z XSD z załącznikiem?
Oto jak zbudować schematu:
InputStream includeInputStream = getClass().getClassLoader().getResource("include.xsd").openStream();
InputStream importInputStream = getClass().getClassLoader().getResource("import.xsd").openStream();
InputStream mainInputStream = getClass().getClassLoader().getResource("main.xsd").openStream();
Source[] sourceSchema = new SAXSource[]{includeInputStream , importInputStream,
mainInputStream };
Schema schema = factory.newSchema(sourceSchema);
Teraz tutaj jest ekstrakt z deklaracją w main.xsd
<xsd:schema xmlns="http://schema.omg.org/spec/BPMN/2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:import="http://www.foo.com/import" targetNamespace="http://main/namespace" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:import namespace="http://www.foo.com/import" schemaLocation="import.xsd"/>
<xsd:include schemaLocation="include.xsd"/>
<xsd:element name="element" type="tElement"/>
<...>
</xsd:schema>
Gdybym skopiować kod zawarty XSD w moim głównym .xsd, działa dobrze. Jeśli nie, walidacja nie znajduje deklaracji "elementu".
Wielkie dzięki za wyczerpującą odpowiedź! Wezmę to dziś po południu i dam ci znać, jak to działa. Potrzebuję utworzyć obiekt Schema, ponieważ nie mam pojęcia, jak zostanie utworzony plik, który ma zostać sprawdzony. Nie chcę polegać na ich deklaracji. – Melanie
brak prob, kod przykładowy pochodzi z testu jednostkowego, więc prawdopodobnie będziesz musiał zmienić kilka bitów, aby spełnić Twoje potrzeby. –
Już prawie jestem. Teraz mój walidator zawiera dołączony plik i zawartość głównego pliku. Ale mam wyjątek podczas ładowania pliku importu, treść niedozwolona w prologu ... Jest z importowanym plikiem. Jeśli załaduję ten plik bezpośrednio (skompiluję schemat z niego zamiast głównego), nie otrzymam tego błędu. Jakieś pojęcie, co może spowodować ten wyjątek w tym stanie? – Melanie