XS에 의한 단일 열거 내 열거를 만드는 방법 : 독특한
-
07-07-2019 - |
문제
내 XSD의 고유 한 요소가 왜 고유 한 것을 강요하지 않는지에 대해 누구든지 지적 할 수 있습니까? 마지막이기 때문에 오류가 발생합니다 ScreenResult
요소는 다음에 고유 한 값을 포함하지 않습니다 Type
기인하다. 또한 각각 중 하나를 강요 한 후에도 Type
이내에 ScreenResults
(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