2009-07-22 3 views
1

Ich möchte eine XML-Datei gegen RELAXNG-Schema zur Verfügung gestellt validieren. Die Suche im Internet hat mir Hinweise gegeben, wie man eine Schema-Instanz mit SchemaFactory erstellen kann, indem man die entsprechende Schema-Sprache bereitstellt. So nach meiner Anforderung habe ich verwendet:XML-Validierung

SchemaFactory.newInstance (XMLConstants.RELAXNG_NS_URI);

Aber die folgende Ausnahme wurde zum Laufe geworfen:

Exception in thread "main" java.lang.IllegalArgumentException: Nein SchemaFactory, die das Schema Sprache angegeben implementiert: http://relaxng.org/ns/structure/1.0 konnte
bei javax geladen werden. xml.validation.SchemaFactory.newInstance (SchemaFactory.java:207)

Ich verwende Java6 und beobachtet, dass nur 'W3C_XML_SCHEMA_NS_URI' funktioniert. Rest aller Schema-URIs löst die ähnliche Ausnahme aus.

Ich bin ziemlich neu in der Verwendung der XML-Validierungs-APIs. Kann mir bitte jemand die entsprechende Verwendung zur Verfügung stellen, falls ich es nicht richtig mache?

Dank & Grüße,
Keya

Antwort

2

RNG schlecht in Java-APIs unterstützt wird, wird es nie wirklich Traktion. Ich kenne keine Java-API-Implementierungen, die damit umgehen. Ich schlage vor, das Schema in XML-Schema zu konvertieren (mit Trang oder ähnlich) und dann zu validieren.

+0

Hallo, Danke für die Antwort. Ich benutzte, wie du vorgeschlagen hast, Trang, um das Rng in xsd umzuwandeln. Aber ich bekomme Fehler beim Ausführen. Es folgt der Befehl mit dem Fehler: $ java -jar trang.jar -I rng -Oxsd config_schema.rng config_schema.xsd xml-validation/trang-20081028/config_schema.rng: 1: 1: fatal: Inhalt ist im Prolog nicht erlaubt. $ Können Sie mir einen Vorschlag zum oben genannten Fehler geben? –

+0

Stellen Sie sicher, dass zwischen dem Start der Datei und dem Beginn der Schemadefinition keine Leerzeichen oder Kommentare vorhanden sind. – skaffman

+0

Danke. Neben Whitespaces habe ich auch die Erweiterung .rng anstelle von .rnc verwendet. Mit der richtigen Erweiterung wurde das RNG-Schema in XSD konvertiert. –

0

RNG wird nicht so umfassend unterstützt wie XML Schema. Sie sollten immer zuerst an XSD denken.

+0

RNG ist jedoch viel einfacher zu schreiben. Es ist eine gültige Idee, in RNG zu schreiben und später zu XSD zu konvertieren. – skaffman

+0

Ich sollte es dann ausprobieren! Ich habe einige riesige XSD zu schreiben ... – T0xicCode

+0

Eigentlich machen RNC (RelaxNG Compact) ist der einfache – skaffman

0

msv ist in Java; Ich nehme an, es hat eine klare API, die Sie verwenden können, aber ich habe es nur in der Befehlszeile und in Skripts verwendet.

0

Kohsuke Kawaguchi offenbar eine Adapterbibliothek schrieb für jaxp RelaxNG Validator zu verwenden, finden Sie here und here