xs:uniqueでunivoqueを列挙する方法
-
07-07-2019 - |
質問
XSDの一意の要素が一意性を強制しない理由について、誰かが私を指摘できますか?最後の ScreenResult
要素には Type
属性の一意の値が含まれていないため、これによりエラーがスローされます。また、 ScreenResults
内の各 Type
の1つを強制した後、( ScreenResult
が3回存在する必要があり、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>
解決
この問題に遭遇した他の人にソリューションを投稿しています。
名前空間はすべて正しいと断言しましたが、それはもちろん問題でした。名前空間はすべて、一意の要素自体の例外でした。
一意の要素はコンテキスト内にあるため、名前空間にプレフィックスを付ける必要がないと誤って想定していました。しかし、そうではありません。ファイルの既定の名前空間を宣言したため、まだプレフィックスが必要でした。
だから私の唯一の変更と解決策は次のとおりです:
<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>
所属していません StackOverflow