Domanda

Per quanto posso dire, JAXP supporta per impostazione predefinita lo schema XML W3C e RelaxNG da Java 6.

Posso vedere alcune API, per lo più sperimentali o incomplete, sul file Pagina dei collegamenti su schematron.com.

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

È stato utile?

Soluzione

Jing supporti pre-ISO Schematron convalida (si noti che l'attuazione di Jing si basa anche su XSLT).

Ci sono anche implementazioni XSLT che possono essere facilmente richiamate da Java. È necessario decidere quale versione di Schematron che ti interessa e quindi ottenere il relativo foglio di stile - tutti dovrebbero essere disponibili da schematron.com. Il processo è molto semplice semplice, coinvolgendo fondamentalmente 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 il XSLT ottenuto sul documento istanza o documenti per convalidare loro

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

Altri suggerimenti

Un'implementazione Java puro Schematron si trova a https://github.com/phax/ph-schematron / Essa porta supporto sia per l'approccio XSLT e l'approccio puro Java.

Puoi controllare SchematronAssert (divulgazione:il mio codice).È pensato principalmente per i test unitari, ma puoi usarlo anche per il codice normale.È implementato utilizzando XSLT.

Esempio di test unitario:

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

Esempio di convalida autonoma:

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 di oggetto di SVRL:

ValidationOutput output = validator.validate(xmlSource, schemaSource);
// look at the output
output.getFailures() ... 
output.getReports() ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top