2014-10-03 123 views
0

我們從OData XML創建自己的模式,使其更加簡單和通用,以供合作伙伴使用。然而,我偶然發現它調用它自己的類型(自引用),我無法找出解決這個問題的方法。XSD自參考問題

這裏是代碼片段,有什麼想法?

<xsd:element name="User" type="userType"/> 
<xsd:complexType name="userType"> 
    <xsd:all> 
     <xsd:element name="customManagerList"> 
      <xsd:annotation> 
       <xsd:documentation>Custom Manager</xsd:documentation> 
      </xsd:annotation> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element name="customManager" type="userType" maxOccurs="unbounded"/> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
    </xsd:all> 
</xsd:complexType> 
</xsd:schema> 
+0

只需將minOccurs =「0」添加到您的自定義管理器元素粒子中,您應該沒問題。 – 2015-09-14 13:55:30

回答

2

到目前爲止,我沒有看到任何問題。只需在<xsd:schema>標籤中包含您的代碼即可,例如:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
... 
</xsd:schema> 

並通過驗證。有用。 complexType被允許引用它自己。

+0

確實,模式根據XSD規範是有效的;然而,出於所有實際的原因,**它是無效的**僅僅是因爲根據它沒有辦法創建一個有效的XML實例。要使其工作,需要將minOccurs =「0」添加到customManager元素粒子。我見過的一些驗證者正確地捕捉到了這種不可能性,並將其報告爲錯誤。 – 2015-09-14 13:53:09