문제

내 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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top