2009-05-26 5 views
6

Per quanto ne so, JAXP by default supports W3C XML Schema and RelaxNG from Java 6.Come posso convalidare i documenti con gli schemi Schematron in Java?

Sono in grado di vedere alcune API, per lo più sperimentali o incomplete, su schematron.com links page.

Esiste un approccio sulla convalida di schematron in Java che sia completo, efficiente e possa essere utilizzato con l'API JAXP?

+0

O JAXP non supporta RelaxNG molto bene, o devo fare qualcosa di sbagliato quando provo ad usarlo. –

+0

Non ho provato RelaxNG tbh, solo WXS – Brabster

+0

Non proprio un dupe, ma vedi anche [Dove posso trovare un'implementazione Java di un validatore di Schematron ISO?] (Http://stackoverflow.com/questions/10126256/where-can -i-find-a-java-implementation-of-an-iso-schematron-validator) – Pops

risposta

6

Jing supporta la convalida Schematron pre-ISO (notare che l'implementazione di Jing si basa anche su XSLT).

Esistono anche implementazioni XSLT che possono essere richiamate molto facilmente da Java. Devi decidere quale versione di Schematron ti interessa e poi ottenere il foglio di stile corrispondente - tutti dovrebbero essere disponibili da schematron.com. Il processo è molto semplice semplice, che coinvolge praticamente a 2 passi:

  • applicare il XSLT scheletro su schema Schematron per ottenere un nuovo foglio di stile XSLT che rappresenta lo schema Schematron in XSLT
  • applicare la XSLT ottenuto sul documento di istanza o documenti per convalidare loro

JAXP è solo un'API e non richiede il supporto per Relax NG da un'implementazione. È necessario verificare l'implementazione specifica che si utilizza per vedere se supporta Relax NG o meno.

+0

"JAXP è solo un'API e non richiede il supporto per Relax NG da un'implementazione." La parola "non" in questa frase è un errore, giusto? Intendi che * * richiede supporto, giusto? –

+0

No, non è un errore. JAXP richiede il supporto solo per lo schema XML W3C, per altri linguaggi dello schema che è necessario verificare per vedere se l'implementazione lo supporta. Vedi anche http://java.sun.com/developer/technicalArticles/xml/jaxp1-3/#Validate%20XML%20against%20any%20schema –

1

È possibile controllare SchematronAssert (divulgazione: il mio codice). È pensato principalmente per i test di unità, ma è possibile utilizzarlo anche per il codice normale. È implementato usando XSLT.

Unit Testing esempio:

ValidationOutput result = in(booksDocument) 
    .forEvery("book") 
    .check("author") 
    .validate(); 
assertThat(result).hasNoErrors(); 

Standalone esempio convalida:

StreamSource schemaSource = new StreamSource(... your schematron schema ...); 
StreamSource xmlSource = new StreamSource(... your xml document ...); 
StreamResult output = ... here your SVRL will be saved ... 
// validation 
validator.validate(xmlSource, schemaSource, output); 

Lavora con una rappresentazione oggetto di SVRL:

ValidationOutput output = validator.validate(xmlSource, schemaSource); 
// look at the output 
output.getFailures() ... 
output.getReports() ... 
Problemi correlati