Frage XML-Schema Einschränken des Attributs durch Aufzählung


Ich habe das folgende XML-Tag

<price currency="euros">20000.00</price>

Wie schränke ich das Währungsattribut auf eines der folgenden Elemente ein:

  • Euro
  • Pfund
  • Dollar

UND der Preis zu einem Doppel?

Ich erhalte nur einen Fehler, wenn ich versuche, beide Typen zu tippen. Hier ist, was ich bisher habe:

<xs:element name="price">
    <xs:complexType>
        <xs:attribute name="currency" type="xs:string">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="pounds" />
                    <xs:enumeration value="euros" />
                    <xs:enumeration value="dollars" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:element>

76
2018-01-19 12:02


Ursprung


Antworten:


Der numerische Wert scheint in Ihrer Preisdefinition zu fehlen. Versuche Folgendes:

<xs:simpleType name="curr">
  <xs:restriction base="xs:string">
    <xs:enumeration value="pounds" />
    <xs:enumeration value="euros" />
    <xs:enumeration value="dollars" />
  </xs:restriction>
</xs:simpleType>



<xs:element name="price">
        <xs:complexType>
            <xs:extension base="xs:decimal">
              <xs:attribute name="currency" type="curr"/>
            </xs:extension>
        </xs:complexType>
</xs:element>

105
2018-01-19 12:47



Neue Antwort auf alte Frage

Keine der vorhandenen Antworten auf diese alte Frage behandelt die echtes Problem.


14
2017-10-23 13:07



Sie müssen einen Typ erstellen und das Attribut dieses Typs erstellen:

<xs:simpleType name="curr">
  <xs:restriction base="xs:string">
    <xs:enumeration value="pounds" />
    <xs:enumeration value="euros" />
    <xs:enumeration value="dollars" />
  </xs:restriction>
</xs:simpleType>

dann:

<xs:complexType>
    <xs:attribute name="currency" type="curr"/>
</xs:complexType>

7
2018-01-19 12:16



<xs:element name="price" type="decimal">
<xs:attribute name="currency" type="xs:string" value="(euros|pounds|dollars)" /> 
</element> 

Dies würde die Notwendigkeit der Aufzählung vollständig eliminieren. Sie können den Typ bei Bedarf in den Double-Modus ändern.


0
2017-09-30 09:30