0

いくつかの検証コードをまとめようとしています。次のようなスキーマに対して検証しようとしています:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:choice="http://example.com/SimpleChoice" targetNamespace="http://example.com/SimpleChoice" ecore:nsPrefix="choice" ecore:package="com.example.simple.choice">
    <xsd:complexType name="Plane">
        <xsd:sequence>
            <xsd:element name="freightDetails" type="xsd:string" minOccurs="0"/>
            <xsd:element name="passengers" type="xsd:int" minOccurs="0"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

次の XML を使用します。

<?xml version="1.0" encoding="UTF-8"?>
<choice:Plane xmlns:choice="http://example.com/SimpleChoice">
    <freightDetails>Boxes</freightDetails>
</choice:Plane>

要素がないことを訴えているようですが、型に対して検証する方法を見つけようとしています。次のエラーが表示されます。

[Error] :1:100: cvc-elt.1: Cannot find the declaration of element 'choice:Plane'.

次のコードでドキュメントをロードしようとすると:

SchemaFactory factory =
    SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(schemaFile);

DocumentBuilderFactory parserFactory = DocumentBuilderFactory.newInstance();
parserFactory.setSchema(schema);
parserFactory.setNamespaceAware(true);
DocumentBuilder parser = parserFactory.newDocumentBuilder();

Document document = parser.parse(inputSource);

Validator validator = schema.newValidator();
validator.validate(new DOMSource(document));

次の場合に失敗します。

Document document = parser.parse(inputSource);

どうすればこれを機能させることができるかについて、誰かアイデアがありますか? (または、この種の動作をサポートするバリデーター?)

ありがとう

ロブ

4

2 に答える 2

1

これは、スキーマで型 ( Plane) が定義されていますが、その型を使用する許可された要素が定義されていないためです。型自体は、スキーマ自体の外では意味を持ちません。

<xsd:element>をスキーマに追加する必要があります。最も簡単な解決策は、その中で匿名の複合型を使用することです。次のようなものです。

<xsd:element name="Plane">
  <xsd:complexType>
    <xsd:sequence>
        <xsd:element name="freightDetails" type="xsd:string" minOccurs="0"/>
        <xsd:element name="passengers" type="xsd:int" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>    
</xsd:element>
于 2010-10-13T14:21:39.883 に答える
0

サンプル スキーマでは、 という名前の要素ではなく、という名前ののみを定義しています。スキーマに要素宣言を追加して、何が起こるか見てみましょう...PlanePlane

于 2010-10-13T14:20:13.520 に答える