XML 스키마의 ComplexType에 간단한 유형 또는 제한에 속성을 추가하십시오.

StackOverflow https://stackoverflow.com/questions/626319

  •  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>

두 블록 모두 스키마의 완전히 별도의 장소에있을 수 있습니다. 중요한 요점은 다시 한 번만 따르는 것입니다. 상속을 혼합하고 동일한 요소 정의에 기여할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top