3

私の XSD の一意の要素が一意性を強制しない理由を教えてもらえますか? 最後の要素には属性ScreenResultの一意の値が含まれていないため、これはエラーをスローするはずです。Typeまた、私は本当にそれぞれTypeの内の 1 つを強制した後であることにも注意する必要がありますScreenResults( ScreenResult3 回存在する必要があり、3 種類の画面があり、一意性が必要です)。それを達成するためのより良い方法があれば、私は'そのためにも。

ありがとうございました。

これが私の XML スニペットです。

<ScreenResults>
    <ScreenResult Type="Screen Type A">1</ScreenResult>
    <ScreenResult Type="Screen Type B">1</ScreenResult>
    <ScreenResult Type="Screen Type B">2</ScreenResult>
</ScreenResults>

これが私の XSD スニペットです (元の XSD スニペットは複数のファイルにまたがっていますが、すべての名前空間が正しいことを確認したことにも注意してください)。

<xs:element name="ScreenResults" type="import:ScreenResults" minOccurs="0" maxOccurs="1">
    <xs:unique name="UniqueScreenResults">
        <xs:selector xpath="ScreenResult" />
        <xs:field xpath="@Type" />
    </xs:unique>
</xs:element>

<!--============  ScreenResults  =============-->
<xs:complexType name="ScreenResults">
    <xs:sequence minOccurs="1" maxOccurs="1">
        <xs:element name="ScreenResult" minOccurs="3" maxOccurs="3">
            <xs:complexType>
                <xs:simpleContent>
                    <xs:extension base="enum:ScreenResult">
                        <xs:attribute name="Type" type="enum:ScreenType" use="required" />
                    </xs:extension>
                </xs:simpleContent>
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>

<!--=============  ScreenType  =============-->
<xs:simpleType name="ScreenType">
    <xs:restriction base='xs:token'>
        <xs:enumeration value='Screen Type A' >
            <xs:annotation>
                <xs:documentation>1</xs:documentation>
            </xs:annotation>
        </xs:enumeration>
        <xs:enumeration value='Screen Type B' >
            <xs:annotation>
                <xs:documentation>2</xs:documentation>
            </xs:annotation>
        </xs:enumeration>
        <xs:enumeration value='Screen Type C' >
            <xs:annotation>
                <xs:documentation>3</xs:documentation>
            </xs:annotation>
        </xs:enumeration>
    </xs:restriction>
</xs:simpleType>

<!--============  ScreenResult  ============-->
<xs:simpleType name="ScreenResult">
    <xs:restriction base='xs:token'>
        <xs:enumeration value='1' >
            <xs:annotation>
                <xs:documentation>Positive</xs:documentation>
            </xs:annotation>
        </xs:enumeration>
        <xs:enumeration value='2' >
            <xs:annotation>
                <xs:documentation>Negative</xs:documentation>
            </xs:annotation>
        </xs:enumeration>
        <xs:enumeration value='3' >
            <xs:annotation>
                <xs:documentation>Not administered</xs:documentation>
            </xs:annotation>
        </xs:enumeration>
    </xs:restriction>
</xs:simpleType>
4

1 に答える 1

10

この問題に遭遇した他の人のために、私の解決策を投稿しています。
名前空間はすべて正しいと断言していましたが、もちろんそれが問題でした。一意の要素自体を除いて、すべての名前空間は正しかった。
一意の要素はコンテキスト内にあるため、名前空間にプレフィックスを付ける必要はないと誤って想定しました。しかし、そうではありません。ファイルのデフォルトの名前空間を宣言したので、まだプレフィックスが必要でした。

したがって、私の唯一の変更と解決策は次のとおりです。

<xs:element name="ScreenResults" type="import:ScreenResults" minOccurs="0" maxOccurs="1">
    <xs:unique name="UniqueScreenResults">
        <xs:selector xpath="import:ScreenResult" />
        <xs:field xpath="@Type" />
    </xs:unique>
</xs:element>
于 2009-09-16T17:57:03.537 に答える