5

XSD を生成しようとしているときにこのエラーが発生し、何が間違っているのかわかりません。私のコードは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="FICH">
<xs:complexType>

<xs:sequence>
<xs:element name="cabeza">
<xs:complexType>
<xs:sequence>
<xs:element name="VERSION_ORIG" type="Version"/>

</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="DATA_MAJ">
<xs:complexType>
<xs:sequence>
<xs:element name="DATA1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>

<xs:element name="VERSION_SIT_NOM" type="Version"/>

</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>

<xs:assert test="CABEZA/VERSION_ORIG = DATA_MAJ/VERSION_SIT_NOM"/>

</xs:complexType>
</xs:element>
<xs:simpleType name="YYMM">
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9]{2}[01|02|03|04|05|06|07|08|09|10|11|12]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Version">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{2}.[0-9]{2}.[0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="emptyString">
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

つまり、エレメント CABEZA/VERSION_ORIG は DATA_MAJ/VERSION_SIT_NOM と等しくなければならないということです。いくつかの解決策を探しましたが、すべて問題ないようです。

前もって感謝します

4

2 に答える 2

0

あなたはいくつか間違ったことをしています。修正された XSD と一致するサンプル XML から始めましょう。

XSD:

<?xml version="1.0" encoding="UTF-8"?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" xmlns:tns="http://www.w3schools.com" elementFormDefault="qualified">
    <xs:element name="FICH">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="cabeza">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="VERSION_ORIG" type="Version"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="DATA_MAJ">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="DATA1" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="VERSION_SIT_NOM" type="Version"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>          
            <xs:assert test="tns:cabeza/tns:VERSION_ORIG = tns:DATA_MAJ/tns:DATA1/tns:VERSION_SIT_NOM"/>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="YYMM">
        <xs:restriction base="xs:integer">
            <xs:pattern value="[0-9]{2}[01|02|03|04|05|06|07|08|09|10|11|12]"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Version">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{2}.[0-9]{2}.[0-9]{2}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="emptyString">
        <xs:restriction base="xs:string">
            <xs:enumeration value=""/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

無効な XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<FICH xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.w3schools.com">
    <cabeza>
        <VERSION_ORIG>22.22.22</VERSION_ORIG>
    </cabeza>
    <DATA_MAJ>
        <DATA1>
            <VERSION_SIT_NOM>22.22.23</VERSION_SIT_NOM>
        </DATA1>
    </DATA_MAJ>
</FICH>

エラーメッセージ:

Error while loading [], line 12 position 8
cvc-assertion.3.13.4.1: Assertion evaluation ('tns:cabeza/tns:VERSION_ORIG = tns:DATA_MAJ/tns:DATA1/tns:VERSION_SIT_NOM') for element 'FICH' with type '#anonymous' did not succeed. 
Document1.xml is XSD 1.1 invalid.

説明:

  • ほとんどの場合、XSD 1.0 プロセッサを使用して XSD 1.1 を検証しています。assert をコメントアウトして、エラーが解消されるかどうかを確認します。
  • XSD にターゲット名前空間がない場合を除き、上記のサンプル XSD の xmlns:tns などのエイリアスを指定して、ターゲット名前空間に一致させる必要があります。XPath でプレフィックスが適切に使用されていることを確認してください。それには理由があり、Xerces (@CMSperbergMcQueen が言及) もそれらを切望しているようです。
  • XPath がすべて間違っています。名前は大文字と小文字が区別されるため、cabeza は CABEZA ではありません。さらに、XPath と一致しない余分なレベルが XSD に含まれています。より具体的には、DATA1 がありません。
于 2013-02-04T21:58:03.060 に答える
0

あなたのスキーマ ドキュメントは私には問題ないように見えます (さらに言えば、Saxon 9 にとっても)。

したがって、エラー メッセージの最も可能性の高い原因は、(1) XSD 1.0 プロセッサを使用して XSD 1.1 スキーマ ドキュメントを処理していること、および (2) この場合、プロセッサが世界最高のエラー メッセージを提供していないことです。現時点 (2013 年初頭) では、XSD 1.1 は Saxon と Xerces J のベータ リリースによってサポートされています。別の XSD バリデータを使用している場合は、ベンダーまたは開発者に連絡して、いつ XSD 1.1 がサポートされるかを尋ねてください。(ユーザーが気にしないと思うなら、誰も 1.1 に移行しません。)

于 2013-02-04T18:47:07.350 に答える