2017-07-14 27 views
1

在使用我的XSD XML驗證停止元素我想空元素不被接受如何在XML被空使用XSD

我的XML:

<Request> 
<Query>Select * from Table</Query> 
<Query></Query> 
</Request> 

我的XSD:

<xs:simpleType name="className"> 
    <xs:restriction base="xs:string"> 
     <xs:minLength value="1" /> 
    </xs:restriction> 
</xs:simpleType> 
<xs:simpleType name="status"> 
    <xs:restriction base="xs:integer"> 
     <xs:minInclusive value="100" /> 
     <xs:maxExclusive value="600" /> 
    </xs:restriction> 
</xs:simpleType> 
<xs:simpleType name="requires"> 
    <xs:restriction base="xs:string"> 
     <xs:minLength value="1" /> 
    </xs:restriction> 
</xs:simpleType> 
<xs:complexType name="sql"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
      <xs:attribute name="requires" type="requires"/> 
      <xs:attribute name="when" type="xs:string" /> 
      <xs:attribute name="limit" type="xs:string" /> 
      <xs:attribute name="offset" type="xs:string" /> 
      <xs:attribute name="classname" type="className" /> 
      <xs:attribute name="status" type="status"/> 
     </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 
<xs:complexType name="query"> 
    <xs:complexContent> 
     <xs:extension base="sql"> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

<xs:element name="Request"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Query" type="query" maxOccurs="unbounded"> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

我希望如果查詢標記爲空,則不接受查詢標記,因此這應該是無效的。希望我的問題是關鍵的。 :)

回答

2

你已經有了一個簡單類型className定義一個非空字符串使用屬性minOccurs=1元素上的架構。將其重命名爲non-empty-string以反映意圖,然後更改sql類型,將其定義爲non-empty-string的擴展名而不是xs:string

+0

非常感謝。這對我來說很愚蠢。我爲非空字符串聲明瞭一個新的simpleType,因爲將來可能需要爲className放置一些正則表達式。 –

0

,如果你希望它是強制性

+0

這只是爲了指定在我的XML中有多少個查詢標記,我可以給minOccurs = 0。但那不是我的觀點。 –