Quelqu'un peut-il me dire pourquoi l'élément unique de mon XSD ne force pas l'unique? Cela devrait générer une erreur car le dernier élément ScreenResult
ne contient pas de valeur unique pour l'attribut Type
. Je devrais également noter que je suis vraiment après avoir forcé un de chaque Type
dans ScreenResults
(ScreenResult
est requis pour exister 3 fois, il y a 3 types d'écrans et je demande l'unicité) donc s'il y a une meilleure manière d'accomplir cela , Je suis tout à fait pour ça aussi.Comment rendre univoque mon énumération par xs: unique
Merci.
Voici mon extrait XML:
<ScreenResults>
<ScreenResult Type="Screen Type A">1</ScreenResult>
<ScreenResult Type="Screen Type B">1</ScreenResult>
<ScreenResult Type="Screen Type B">2</ScreenResult>
</ScreenResults>
Voici mon extrait XSD (notez également que mes extraits de XSD originaux couvrent plusieurs fichiers mais j'ai vérifié tous mes espaces de noms sont corrects):
<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>
Merci pour poster votre solution, je juste eu exactement le même problème. – Heinzi
Juste au cas où vous voulez un ** attribut ** univoque plutôt qu'une valeur, cela devrait résoudre votre problème: http://stackoverflow.com/a/39435125/1040399 –