2009-07-22 19 views
26

utknąłem próbując określić XSD zawierający pole, które może mieć tylko jedną z trzech następujących wartości:XSD Definicja Numeracja

  • Zielona
  • Red
  • Niebieski

Zasadniczo chcę zdefiniować ścisłe wyliczenie na poziomie schematu.

Moja pierwsza próba wydaje się błędna i nie jestem pewien co do "właściwej" metody naprawy.

<xs:element name="color"> 
    <xs:complexType> 
     <xs:choice> 
      <xs:element name="green"/> 
      <xs:element name="red"/> 
      <xs:element name="blue"/> 
     </xs:choice> 
    </xs:complexType> 
</xs:element> 

za pomocą automatycznego generatora XML, traktuje te nazwy elementów jako obiektów String:

<xs0:color> 
    <xs0:green>text</xs0:green> 
</xs0:color> 

Odpowiedz

55

Można zdefiniować wyliczenie w kontekście simpleType.

<xs:simpleType name="color" final="restriction" > 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="green" /> 
     <xs:enumeration value="red" /> 
     <xs:enumeration value="blue" /> 
    </xs:restriction> 
</xs:simpleType> 
<xs:element name="SomeElement"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Color" type="color" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
+5

Polecam raczej użycie rozszerzenia NMTOKEN, a nie String. Bardziej przypomina to myśl o enumie. Jest także bardziej przyjazny dla narzędzia, szczególnie w przypadku generatorów kodu. – skaffman