반응형
XML 스키마 열거형으로 속성을 제한하는 방법
다음 XML 태그가 있습니다.
<price currency="euros">20000.00</price>
통화 속성을 다음 중 하나로 제한하려면 어떻게 해야 합니까?
- 유로
- 파운드
- 달러를
그리고 가격은 두 배로?
두 가지를 모두 입력하려고 하면 오류가 발생합니다. 지금까지 확인한 내용은 다음과 같습니다.
<xs:element name="price">
<xs:complexType>
<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:complexType>
</xs:element>
가격 정의에 수치가 누락된 것 같습니다.다음을 시도해 봅니다.
<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>
기존 질문에 대한 새로운 답변
이 오래된 문제에 대한 기존의 답 중 어떤 것도 진짜 문제를 다루지 않습니다.
진짜 문제는.xs:complexType
직접 가질 수 없는xs:extension
어린 시절에 XSD에 있었습니다.해결책은 사용하는 것입니다.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>
메모들
- @Paul에 의해 언급된 바와 같이, 이것들은 컨텐츠 타입을 변화시킵니다.
price
부터xs:string
로.xs:decimal
, 하지만 이것은 엄밀하게 필요한 것도 아니고 진짜 문제도 아니었습니다. - @user998692에 의해 답변된 것처럼, 당신은 통화의 정의를 분리할 수 있고, 당신은 다음으로 바꿀 수 있습니다.
xs:decimal
, 하지만 이것 역시 진짜 문제는 아니었습니다.
진짜 문제는.xs:complexType
직접 가질 수 없는xs:extension
어린 시절 XSD에 있었습니다.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>
유형을 생성하고 해당 유형의 속성을 다음과 같이 만들어야 합니다.
<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:complexType>
<xs:attribute name="currency" type="curr"/>
</xs:complexType>
언급URL : https://stackoverflow.com/questions/8925706/xml-schema-how-to-restrict-attribute-by-enumeration
반응형
'programing' 카테고리의 다른 글
SQL 쿼리 결과를 보고서 양식 테이블에 출력하는 방법은 무엇입니까? (0) | 2023.10.10 |
---|---|
SYS_CONTEXT/USERENV에서 모든 파라미터 읽기 (0) | 2023.10.10 |
파이썬으로 경로 이름만 얻는 방법? (0) | 2023.10.10 |
log2가 내 수학에서 발견되지않았습니까? (0) | 2023.10.10 |
동적으로 작성된 필드에서 JQuery Datepicker 사용 (0) | 2023.10.10 |