이전 질문에 대한 새로운 답변
이 오래된 질문에 대한 기존 답변 중 실제 문제를 해결하는 것은 없습니다.
진짜 문제 는XSD에서 아이를xs:complexType
직접 가질 수 없다는 것xs:extension
입니다. 수정은xs:simpleContent
먼저사용하는 것입니다. 자세한 내용은 다음과 같습니다.
XML,
<price currency="euros">20000.00</price>
다음 수정 된 XSD 중 하나 에 대해 유효합니다 .
로컬에서 정의 된 속성 유형
<?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>
전역 적으로 정의 된 속성 유형
<?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>
메모
- 따라 @ 폴에 의해 주석 , 이들의 콘텐츠 형식 변경 할
price
에서 xs:string
대상을 xs:decimal
, 그러나 이것은 반드시 필요한 것은 아니며, 진짜 문제가 아니었다.
- @ user998692가 대답 했듯이 통화의 정의를 분리하고로 변경할 수
xs:decimal
있지만 이것도 실제 문제는 아닙니다.
진짜 문제 는 XSD에서 아이를 xs:complexType
직접 가질 수 없다는 xs:extension
것입니다. xs:simpleContent
먼저 필요합니다.
관련 문제 (요청되지 않았지만 다른 답변을 혼동했을 수 있음) :
price
속성이 있다는 것을 어떻게 제한 할 수 있습니까?
이 경우 별도의 전역 정의 priceType
가 필요합니다. 로컬 유형 정의만으로는이를 수행 할 수 없습니다.
요소에 속성이있을 때 요소 콘텐츠를 제한하는 방법
<?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>