2012-02-05 85 views
0

我有這樣的XSD驗證傳入的請求到我的API:是否有可能以更簡單的方式重寫此XSD?

<?xml version="1.0"?> 
<xs:schema version="1.0" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 
    <xs:element name="request"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="amenity"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="description" type="xs:string" /> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

但它似乎有點混亂。太多的嵌套元素等。是否有可能以一種更簡單,更容易混淆的方式重寫它?

+1

它對我來說不算太糟糕,因爲一般來說XSD往往是冗長的。我的建議,不要改變它,如果它的工作。 – 2012-02-05 10:47:34

+3

這就像XML模式獲取...一樣簡單。 – skaffman 2012-02-05 10:51:06

+0

您可以使用''而不是''。在你的情況下,它並不重要,你可以安全的20個字符;-) – 2012-02-05 11:51:40

回答

1

如果您不希望它嵌入太深,可以將複雜類型更改爲命名類型,然後通過元素聲明中的名稱引用它們。這樣做的好處是可以重用這些類型。但它不會讓這個簡單的模式中的任何簡單...

0

是有另一種方式..

它定義每個實體的complexType給它一個名稱,並且使用類型: )

這裏是烏拉圭回合的樣本XML和XSD
XML:

<request> 
    <amenity> 
    <description>text</description> 
    </amenity> 
</request> 

XSD

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="request" type="request"/> 

    <xs:complexType name="request"> 
    <xs:sequence> 
     <xs:element name="amenity" type="amenity"/> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="amenity"> 
     <xs:sequence> 
       <xs:element name="description" type="xs:string" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 


一些更多的解釋:
假設你的XML是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<request> 
    <amenity> 
    <description>text</description> 
    <foo>text</foo> 
    </amenity> 
    <foobar> 
    <amenity2> 
     <description>text2</description> 
     <foo>text3</foo> 
    </amenity2> 
    </foobar> 
</request> 

你的XSD將是很簡單..因爲你沒有定義<descirption/><foo/>標籤兩次:)
觀察我多次使用Type="General" :)

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="request" type="request"/> 

    <xs:complexType name="request"> 
    <xs:sequence> 
     <xs:element name="amenity" type="General"/> 
     <xs:element name="foobar" type="foobar"/> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="General"> 
    <xs:sequence> 
     <xs:element name="description" type="xs:string" /> 
     <xs:element name="foo" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="foobar"> 
    <xs:sequence> 
     <xs:element name="amenity2" type="General"/> 
    </xs:sequence> 
    </xs:complexType> 

</xs:schema> 
相關問題