2012-02-16 57 views
0

我有XML文件:XSD:抽象類集合

<Parent> 
    <Child1 ... /> 
    <Child2 ... /> 
    ... 
    <Child1 ... /> 
    <Child1 ... /> 
<Parent> 

凡Clild1和CHILD2 - 父抽象類的兒童。

也就是說,問題是: 如何爲可以有任意數量的元素不同類型的集合設置驗證方案?

此致敬禮!

+0

你是指父元素和子元素嗎? XML沒有類層次結構。 – 2012-02-16 06:01:04

+0

是的,我沒有這麼說,我的意思是一個類結構 - 這個XML的來源。我認爲這可能會有用。 – f4x 2012-02-16 06:36:16

+0

我仍然不確定你的分類結構是什麼意思,但是我繼續寫下了你可能想要驗證你的樣本輸入的例子。 – 2012-02-16 07:22:21

回答

1
<xs:element name="Parent"> 
    <xsl:complexType> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="Child1"/> 
     <xs:element name="Child2"/> 
    </xs:choice> 
    </xs:complexType> 
</xs:element> 

爲了說明這是如何工作的,讓我們使用示例輸入的簡化版本。

<Parent> 
    <Child1 ... /> 
    <Child2 ... /> 
    <Child1 ... /> 
    <Child1 ... /> 
</Parent> 
  1. 驗證器着眼於第一元件。 <Parent>是第一個驗證的元素。
  2. 驗證器然後查找父代中的複雜類型。它發現<Child1>。由於<Child1>choice塊中的第一個元素,因此它會進行驗證。
  3. 驗證程序然後查找<Child2>元素。由於<Child2>是下一個它也驗證。
  4. 驗證器然後查看下一個元素。它不是</Parent>,因此驗證程序會將其與choice塊進行覈對,因爲它可能會發生無限次數爲maxOccurs=unbounded
  5. 驗證程序找到驗證的<Child1>元素。
  6. 驗證程序查找不存在的<Child2>元素,因此它完成choice塊。
  7. 驗證器然後查看下一個元素。它不是</Parent>,因此驗證程序會將其與choice塊進行覈對,因爲它可能會發生無限次數爲maxOccurs=unbounded
  8. 驗證程序找到驗證的<Child1>元素。
  9. 驗證器然後查看下一個元素。這是驗證的</Parent>
  10. 確認器完成。文檔成功驗證。

由於minOccurs=0這還允許在有0出現一個<Child1><Child2>元件的情況下。除非明確聲明,否則XML模式元素將繼承其父元素的屬性。在這種情況下,由於我們沒有聲明<Child1><Child2>的minOccurs屬性,因此這相當於<xs:element minOccurs="0" name="Child1"/><xs:element minOccurs="0" name="Child2"/>

+0

謝謝你的回答!謝謝你的回答,關於解密問題的嘗試和一個詳細的例子,這使我的大腦在這個地方:) – f4x 2012-02-16 09:28:26