2012-09-26 46 views
1

我一直在尋找一段時間,並得出結論,它可能無法改變每個屬性值的驗證。如何創建在屬性值上驗證有所不同的XSD?

例如我有兩個「行動」的節點,都與一個「type」屬性和兩個元素(「名稱」和「描述」)

只有當「類型」屬性的值是「1 「它有一個帶」abc「子元素的」a「元素,當」type「屬性爲」2「時,它有一個帶有」未「子元素的」bla「元素。型2型

<action type="2"> 
    <name>yup2</name> 
    <description>RRR</description> 
    <bla> 
    <yet /> 
    </bla> 
</action> 

我想創建一個XSD *誰檢查對子級兩種類型的1

<action type="1"> 
    <name>yup</name> 
    <description>yyy</description> 
    <a> 
    <abc>false</abc> 
    </a> 
</action> 

實例,這可能嗎? 如果是這樣,怎麼樣?

  • 它必須是一個XSD,因爲我想將XSD放在MSSQL數據庫表的XML列上。

回答

1

你是正確的,這是不可能的XSD 1.0這是MSSQL唯一支持的XSD版本。您可以獲得的最好方法是在abla之間創建一個選項,可能會對屬性值type等設置一些限制。下面是一個說明。

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="action"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="name" type="xs:string" /> 
     <xs:element name="description" type="xs:string" /> 
     <xs:choice>  
      <xs:element name="a"> 
       <xs:complexType> 
       <xs:sequence> 
        <xs:element name="abc" type="xs:boolean" /> 
       </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
      <xs:element name="bla"> 
       <xs:complexType> 
       <xs:sequence> 
        <xs:element name="yet" type="xs:anyType" /> 
       </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:sequence> 
     <xs:attribute name="type" type="xs:unsignedByte" use="required" /> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

如果你控制了XML結構,並仍想使用一些屬性來控制的內容模型,然後XSI:類型是做到在XSD 1.0的唯一途徑。

0

您可以使用工具XML Stylus Studio創建任何類型的複雜XSD。

檢查細節:http://www.stylusstudio.com/

+0

這是非常通用的答案。 我也嘗試使用XMLSpy生成XSD,但它仍未驗證值。 –

相關問題