web-dev-qa-db-ja.com

JavaでXSD1.1に対してXMLを検証する方法は?

JavaのXMLスキーマ1.1に対してXMLファイルを検証する最良の方法は何ですか?

この tutorial からコードを取得し、 Xerces FAQ のこのコード例で見たように、ファクトリを検索する行をXMLスキーマ1.1を使用するように変更しました。

これは私のコードです:

import Java.io.File;
import Java.io.IOException;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.SAXException;

public class XSDValidator {
    private static void validateFile(File xmlFile, File xsdFile) throws SAXException, IOException
    {
        // 1. Lookup a factory for the W3C XML Schema language
        SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1");
        // SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

        // 2. Compile the schema.
        File schemaLocation = xsdFile;
        Schema schema = factory.newSchema(schemaLocation);

        // 3. Get a validator from the schema.
        Validator validator = schema.newValidator();

        // 4. Parse the document you want to check.
        Source source = new StreamSource(xmlFile);

        // 5. Check the document
        try
        {
            validator.validate(source);
            System.out.println(xmlFile.getName() + " is valid.");
        }
        catch (SAXException ex)
        {
            System.out.println(xmlFile.getName() + " is not valid because ");
            System.out.println(ex.getMessage());
        }
    }
}

コードはこの例外をスローします:

Java.lang.IllegalArgumentException: No SchemaFactory that implements the schema language specified by: http://www.w3.org/XML/XMLSchema/v1.1 could be loaded

ご覧のとおり、XercesFAQのコードスニペットとまったく同じインポートがあります。 XercesをMavenの依存関係に追加しようとしましたが、それも役に立ちませんでした。

乾杯:)

16
Vogon Jeltz

JAXPサービスメカニズムを使用してXSD1.1プロセッサを検索することはできないと思います。通常の方法でSaxonまたはXercesをロードしてから、XSD1.1処理を有効にします。 Saxonの場合、これは

SchemaFactory.setProperty("http://saxon.sf.net/feature/xsd-version", "1.1")
7
Michael Kay

xercesImpl-xsd112.12-beta-r1667115を使用するXMLスキーマv1.1で動作する汎用XMLバリデーターがあります。バリデーターは利用可能です ここではMavenプラグインとして 、そして ここでは埋め込み可能なライブラリとして

0
Seva Safris