XML 스키마의 ComplexType에 간단한 유형 또는 제한에 속성을 추가하십시오.
-
06-07-2019 - |
문제
문제는 다음과 같습니다.
다음 XML 스 니펫이 있습니다.
<time format="minutes">11:60</time>
문제는 속성과 제한을 동시에 추가 할 수 없다는 것입니다. 속성 형식은 값 몇 분, 몇 시간 및 초만 가질 수 있습니다. 시간에는 제한이 있습니다 \d{2}:\d{2}
<xs:element name="time" type="timeType"/>
...
<xs:simpleType name="formatType">
<xs:restriction base="xs:string">
<xs:enumeration value="minutes"/>
<xs:enumeration value="hours"/>
<xs:enumeration value="seconds"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="timeType">
<xs:attribute name="format">
<xs:simpleType>
<xs:restriction base="formatType"/>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
복잡한 유형의 타임 타입을 만들면 속성을 추가 할 수는 있지만 제한은 추가 할 수 없으며 간단한 유형을 만들면 속성을 추가 할 수는 있지만 속성을 추가 할 수 있습니다. 이 문제를 해결할 수있는 방법이 있습니까? 이것은 매우 이상한 제한이 아닙니다.
해결책
속성을 추가하려면 확장자별로 도출해야합니다. 제한에 의해 도출 해야하는 패싯을 추가하려면. 따라서 이것은 요소의 자식 내용을 위해 두 단계로 수행해야합니다. 속성은 인라인으로 정의 될 수 있습니다.
<xsd:simpleType name="timeValueType">
<xsd:restriction base="xsd:token">
<xsd:pattern value="\d{2}:\d{2}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="timeType">
<xsd:simpleContent>
<xsd:extension base="timeValueType">
<xsd:attribute name="format">
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="seconds"/>
<xsd:enumeration value="minutes"/>
<xsd:enumeration value="hours"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
다른 팁
속성을 추가하면서 상속 유형을 제한과 혼합하는 데 실제로 필요한 내용이 더 자세한 설명으로 예제를 제안하고 싶습니다.
이곳은 상속 된 유형을 정의하는 장소입니다 (내 경우 XS : 현장 Lenght 1024 제한이 적용된 문자열 기반). 필드에 "속성"을 추가 할 때 필드의 표준 유형으로이를 가질 수 없습니다.
<xs:simpleType name="string1024Type">
<xs:restriction base="xs:string">
<xs:maxLength value="1024"/>
</xs:restriction>
</xs:simpleType>
이곳은 귀하의 요소가 귀하의 개인 유형에 따라 정의되는 곳입니다 (내 경우 "String1024Type") 및 필요한 속성이 추가됩니다.
<xs:element maxOccurs="unbounded" name="event">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="string1024Type">
<xs:attribute default="list" name="node" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
두 블록 모두 스키마의 완전히 별도의 장소에있을 수 있습니다. 중요한 요점은 다시 한 번만 따르는 것입니다. 상속을 혼합하고 동일한 요소 정의에 기여할 수 없습니다.
제휴하지 않습니다 StackOverflow