2012-06-05 36 views
0

我在嘗試在xsd中獲取此模式驗證時遇到問題。確保子元素不能在沒有父元素的情況下使用使用Xsd

有效的情況下

<root> 
    <groups> 
     <group/> 
    </groups> 
</root> 

Valid case 
<root> 
<groups/> 
</root> 

無效的情況下

<root> 
    <group/> 
</root> 

如何確保特定的子元素只能在一些家長在XML通過XSD存在,不是一個人?

在這個例如 組不能單獨存在,但是當羣體是父母能夠存在?

有人回答說,不要讓組元素的全球即包含它組元素中......

但有可能的情況下, 羣組不是父母的直接子女。 如 有效的情況下

<groups> 
<class> 
    <group> 
</class> 
</groups> 

我應該在的情況下完成......作爲類需要參照組太...

+0

等待回覆guys..m卡在這.. –

回答

0

當你不想要的元素本身表明,它必須在定義其父項的複雜類型中聲明。

下面是一個簡單的「修復」,由工具生成;當學習時,它可能是一個很好的方式來啓動XSD,至少要獲得正確的語法......

更新:如果您不斷添加內容,則需要更新架構。如果元素不是全局的,則解決方案是相同的:在其父代中定義。如果內容模型相同,則將其定義爲全局類型,並在元素的定義中引用它(在這種情況下,它將代替anyType)。

<?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="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="groups"> 
      <xs:complexType> 
      <xs:sequence minOccurs="0"> 
       <xs:element name="group" type="xs:anyType" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="groups"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="class"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="group" type="xs:anyType" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

感謝兄弟...是的,它會工作.. –

+0

但有一個問題,看我編輯的問題 –

1

根據你的問題,這聽起來更像是你想要課堂和小組是可以互換的。對於這一點,你需要使用遞歸模式元素,像這樣......

<xsd:element name="Groups"> 
    <xsd:complexType> 
     <xsd:complexContent> 
      <xsd:extension base="BranchType"/> 
     </xsd:complexContent> 
    </xsd:complexType> 
</xsd:element> 

<xsd:complexType name="BranchType"> 
    <xsd:sequence> 
     <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
      <xsd:element name="Class" type="BranchType" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Group" minOccurs="0" maxOccurs="1"/> 
     </xsd:choice> 
    </xsd:sequence> 
</xsd:complexType> 

我們基本上定義可以包含組元素或本身的任意組合一個BranchType(通過Class元素)。然後我們將頂級組定義爲類型BranchType。我使用了一系列選擇,以便Class和Group元素可以以任意順序出現,任意次數,以及任何級別的嵌套。

相關問題