2013-10-24 7 views
0

내가 다음 XML 코드에 의해 기술 된 라인 특성의 유효성을 확인하는 XML 스키마를 작성하는 것을 시도하고 설정합니다XML 스키마

<linecharacteristics> 
    <characteristic name = "color" value = "red" /> 
    <characteristic name = "style" value = "dashed" /> 
    ... 
    <characteristic name = "thickness" value = "medium" /> 
</linecharacteristics> 

여러 특성이 있고 이것은 XML 스키마 코드를 그 I 있습니다 :

<xs:element name="linecharacteristics"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="characteristic" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:attribute name="name" type="xs:string" use="required"/> 
       <xs:attribute name="value" type="xs:string" use="required"/> 
      </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

내가 알아 내려고하는 것은 속성이 올바른지 확인하는 방법입니다. 예를 들어, "name"속성은 'color', 'style'및 'thickness'는 말할 수 있지만 'shape'는 말할 수 없습니다. 또한 "name"속성에 'color'가 표시되면 '값'에는 'red', 'yellow', 'green'및 'dashed'이 포함될 수 없습니다. 'dashed'값은 'style'이름과 만 연관됩니다. 그렇다면 수용 가능한 속성 값 세트가 무엇인지 정의하려면 어떻게해야합니까?

도움 주셔서 감사합니다.

답변

2

XSD 1.1을 사용하는 경우 어설 션으로이를 관리 할 수 ​​있습니다. XSD 1.0을 사용한다면 Schematron과 같은 것을 사용하거나 기존의 프로그래밍 언어에서 제약 조건을 직접 코딩해야합니다. XSD 1.1을 사용하면 복잡한 유형을 다음과 같이 작성할 수 있습니다.

<xs:element name="linecharacteristics"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="characteristic" minOccurs="0" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:attribute name="name" type="xs:string" use="required"/> 
        <xs:attribute name="value" type="xs:string" use="required"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     <xs:assert test="(
      (@name = 'color') and @value = ('red', 'green', 'yellow') or 
      (@name = 'style') and @value = ('dashed') 
      )"></xs:assert> 

    </xs:complexType> 
</xs:element> 
0

스키마 유효성 검사에서 부분적으로 만 수행 할 수 있습니다. 이름에 올바른 값이 포함되어 있는지 확인할 수는 있지만, 값이 구조화 된 구조의 이름과 일치하는지 확인할 수는 없습니다 (아래 참조). 세트와 일치하는지 확인하려면 XSLT/비즈니스 규칙/사용자 정의 코드를 사용해야합니다.

<xs:element name="linecharacteristics"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element minOccurs="0" maxOccurs="unbounded" name="characteristic"> 
      <xs:complexType> 
       <xs:attribute name="name" use="required"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:enumeration value="color" /> 
        <xs:enumeration value="style" /> 
        <xs:enumeration value="thickness" /> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:attribute> 
       <xs:attribute name="value" use="required"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:enumeration value="red" /> 
        <xs:enumeration value="yellow" /> 
        <xs:enumeration value="green" /> 
        <xs:enumeration value="dashed" /> 
        <xs:enumeration value="medium" /> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:attribute> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element>