2017-09-27 107 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就像您爲resp/@name屬性所做的那樣。

更換

<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:restriction base="xs:string"> 
    <xs:maxLength value="1064"/> 
    <xs:enumeration value="letter.c"/> 
    <xs:enumeration value="di.js"/> 
</xs:restriction> 

旁註:

  • 使用自閉合標籤,以提高可讀性。
  • 您的xs:minLength value="0"針對xs:string基數爲 多餘。
+0

我還有一件事忘了問,如果我只想匹配'di.js',而不是'letter.c',那麼任何值都可以來或者它也可以爲空 – Sierra

+0

從邏輯上講,如果我正確理解你,這相當於簡單地使它成爲一個不受約束的'xs:string'。 – kjhughes

+0

所以基本上能來作爲'<響應SRC = 「XML」> letter.c di.js ' - 或 - '<響應SRC = 「XML」> di.js '' - 或 - <響應SRC = 「XML」> di.js '所以我需要讓所有這些,但如果該值'di.js'得到改變,那麼需要被拒絕。 – Sierra