2017-09-27 17 views
1

XSD를 사용하여 특성 값과 요소 값을 제한해야하는 요구 사항이 있습니다. 지금까지XSD를 사용하여 요소 값 및 속성 값 제한

JSON 
SWAGGER 

중 하나에 속성 값을 제한 할 수있었습니다, 그러나 나는 또한뿐만 아니라

letter.c 
di.js 

중 하나에 요소 값을 제한 할 필요가있다.

XML :

<response src="XML"> 
    <resp name="JSON">letter.c</resp> 
    <resp name="SWAGGER">di.js</resp> 
</response> 

XSD :

<xs:schema attributeFormDefault="unqualified" 
      elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="response"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="resp" maxOccurs="14" minOccurs="1"> 
        <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="respFilter"> 
           <xs:attribute name="name" use="required" 
               type="Enum" /> 
          </xs:extension> 
         </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:attribute name="src" use="required"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
         <xs:enumeration value="XML"></xs:enumeration> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:attribute> 
     </xs:complexType> 
    </xs:element> 
    <xs:simpleType name="Enum"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="JSON"> 
      </xs:enumeration> 
      <xs:enumeration value="SWAGGER"> 
      </xs:enumeration> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="respFilter"> 
     <xs:restriction base="xs:string"> 
      <xs:minLength value="0"></xs:minLength> 
      <xs:maxLength value="1064"></xs:maxLength> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

XSD를 사용하여 내가 그들 모두를 제한 할 수있는 방법이 있나요?

답변

1

속성의 경우처럼 xs:enum을 사용하십시오.

<xs:restriction base="xs:string"> 
    <xs:maxLength value="1064"/> 
    <xs:enumeration value="letter.c"/> 
    <xs:enumeration value="di.js"/> 
</xs:restriction> 

사이드 노트

<xs:simpleType name="respFilter"> 
    <xs:restriction base="xs:string"> 
     <xs:minLength value="0"></xs:minLength> 
     <xs:maxLength value="1064"></xs:maxLength> 
    </xs:restriction> 
    </xs:simpleType> 

교체 :

  • 를 사용하여 자동 폐쇄 태그는 가독성을 향상 할 수 있습니다.
  • xs:minLength value="0"에 대한 xs:string베이스는 불필요한 것입니다.
+0

'di.c'대신 'di.js' 만 일치 시키려고하면 깜박 한 점이 있습니다. 모든 값이 올 수 있거나 비어있게 될 수도 있습니다. – Sierra

+0

논리적으로, 당신을 올바르게 이해한다면, 단순히 제약이없는'xs : string'이되는 것과 같습니다. – kjhughes

+0

그래서 기본적으로는'<응답 SRC = "XML">로 올 수 letter.c 을'di.js - 또는 - '<응답 SRC = "XML"> <= "SWAGGER"RESP 이름> di.js '- 또는'<응답 SRC = "XML"> 가'그래서 난 후,이 모든 것을 허용해야하지만, 값이'으로 변경되는 di.js' 경우 di.js 요구하는 거절 당한다. – Sierra