1

私は単純なxmlファイルを持っています

<form xmlns="http://www.example.org/form-reader/form-description"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/form-reader/form-description form-description.xsd">
    <pages amount="1"/>
    <pages amount="1"/>
</form>

そして、私はそれのためのスキーマを書きました

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/form-reader/form-description"
xmlns="http://www.example.org/form-reader/form-description"
elementFormDefault="qualified">
    <xs:complexType name="pagesType">
    <xs:attribute name="amount" type="xs:string" use="required" />
    </xs:complexType>

    <xs:complexType name="formType">
    <xs:sequence minOccurs="1">
        <xs:element name="pages" minOccurs="0" maxOccurs="unbounded"
        type="pagesType" />
    </xs:sequence>
    </xs:complexType>

    <xs:element name="form" type="formType">
    <xs:unique name="pageNumberUnique">
        <xs:selector xpath="pages" />
        <xs:field xpath="@amount" />
    </xs:unique>
    </xs:element>
</xs:schema>

amount プロパティの一意性を検証したいのですが、すべてのバリデーターで、xml ファイルが有効に見えますが、そうすべきではありません。なぜですか?

解決

@PetruGardea 修正を適用した後の私のスキーマは次のようになります。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/form-reader/form-description"
targetNamespace="http://www.example.org/form-reader/form-description"
xmlns="http://www.example.org/form-reader/form-description"
elementFormDefault="qualified">
    <xs:complexType name="pagesType">
    <xs:attribute name="amount" type="xs:string" use="required" />
    </xs:complexType>

    <xs:complexType name="formType">
    <xs:sequence minOccurs="1">
    <xs:element name="pages" minOccurs="0" maxOccurs="unbounded"
    type="pagesType" />
    </xs:sequence>
    </xs:complexType>

    <xs:element name="form" type="formType">
    <xs:unique name="pageNumberUnique">
    <xs:selector xpath="tns:pages" />
    <xs:field xpath="@amount" />
    </xs:unique>
    </xs:element>
</xs:schema>
4

1 に答える 1

1

targetNamespace のエイリアスを定義し、それをセレクターとフィールドの xpath で使用する必要があります。SO でこの回答を参照し、詳細について投稿と私が行ったコメントを読んでください。

于 2013-04-03T01:24:30.003 に答える