Eski soruya yeni cevap
Bu eski soruya verilen mevcut cevapların hiçbiri gerçek sorunu ele almıyor.
Asıl sorun ,XSD'de bir çocuk olarakxs:complexTypedoğrudan olamamaktıxs:extension. Düzeltme önce kullanmaktırxs:simpleContent. Ayrıntılar takip edin ...
XML'iniz,
<price currency="euros">20000.00</price>
karşı geçerli olacak ya aşağıdaki düzeltilmiş XSD'ler arasında:
Yerel olarak tanımlanmış öznitelik türü
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="price">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="currency">
<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:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
Küresel olarak tanımlanmış öznitelik türü
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="currencyType">
<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:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="currency" type="currencyType"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
Notlar
- As @ Paul tarafından yorumladı , bunların içerik türünü değiştiririm
pricegelen xs:stringetmekxs:decimal , ancak bu kesinlikle gerekli değildir ve gerçek bir sorun değildi.
- @ User998692 tarafından yanıtlandığı gibi , para biriminin tanımını ayırabilirdiniz ve olarak değiştirebilirsiniz
xs:decimal, ancak bu da gerçek sorun değildi.
Asıl sorun , XSD'de bir çocuk olarak xs:complexTypedoğrudan olamamaktı xs:extension;xs:simpleContentönce gerekli.
İlgili bir konu (sorulmamış ancak diğer cevapları karıştırmış olabilir):
Nasıl olabilir priceBir niteliği olduğu göz önüne alındığında kısıtlanabilir?
Bu durumda ayrı, genel bir tanım priceType ihtiyaç duyulacaktır; bunu sadece yerel tip tanımlarıyla yapmak mümkün değildir.
Öğe özniteliğe sahipken öğe içeriği nasıl kısıtlanır
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="priceType">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0.00"/>
<xs:maxInclusive value="99999.99"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="price">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="priceType">
<xs:attribute name="currency">
<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:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>