2011-07-05 82 views
2

我想設計一個XML結構來捕獲包含客戶名稱和許多不同數量列的電子表格的輸出。還有一排排。如何使用xml架構組元素

我有大約4個數量的列定義,我想作爲一個組重用。所以,我宣佈了一個名爲AmountsGroup的組,然後在我的複雜類型定義中使用Group Name作爲'ref'屬性。這裏是如何看起來像

<xsd:complexType name="AmountByCustomerType"> 
    <xsd:sequence> 
     <xsd:element name="Customer" type="xsd:string" /> 
     <xsd:group ref="AmountsGroup" maxOccurs="unbounded"/> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:complexType name="AmountByCustomerTotalType"> 
    <xsd:sequence> 
     <xsd:element name="Total" type="xsd:string" /> 
     <xsd:group ref="AmountsGroup" /> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:group name="AmountsGroup"> 
    <xsd:sequence> 
     <xsd:element name="AmountByPeriod" type="AmountByPeriodType" maxOccurs="unbounded" /> 
     <xsd:element name="NetAdjustments" type="xsd:decimal" /> 
     <xsd:element name="OriginalSalesAmount" type="xsd:decimal" minOccurs="0"/> 
     <xsd:element name="RevisedAmount" type="xsd:decimal" /> 
    </xsd:sequence>   
</xsd:group> 

這裏是我的問題:

  1. 我已經宣佈了集團具有的maxOccurs =「無界」第一複雜類型,其中在第二複雜類型,我已經離開它意思是它只會出現一次。這會正常工作嗎?我需要許多行的客戶數量和總數量只有一行。

  2. XML實例文檔不需要在任何地方都有該組名的名稱 - 是否正確?

  3. 有沒有更好的方法來構造單獨的行和結構的總體類型?

  4. 這是一個很好的做法,當我使用威尼斯盲人模式?我不想聲明一個complexType,因爲我必須聲明一個將出現在XML實例文檔中的元素,從而爲XML對象樹添加一個級別。有沒有辦法使用一個命名的類型,而沒有給它自己的元素?我希望你明白我在做什麼。

有什麼想法?

回答

2
  1. 正確,maxOccurs適用於整個組。

  2. 正確,組名只在模式中。

  3. 我打算建議引入一個元素來封裝組成員,但是我從你的問題中看到你試圖避免這個問題。我更喜歡它,因爲它使分析器更容易識別每個「行」的開始和結束並鏡像編程封裝。

  4. 似乎合理;您仍然保持威尼斯百葉窗可重用組件的精神,而不必爲本地元素提供名稱空間。