2014-01-14 30 views
1

這是XML:如何在XSD中使用可選和必選元素來定義組?

<employee> 
    <name>John Doe</name> <!-- exactly one mandatory element --> 
    <age>35</age> <!-- exactly one mandatory element --> 
    <manager/> <!-- optional element, can be absent --> 
</employee> 

我想在XSD定義它:當manager元素不存在

<xs:complexType name="employee"> 
    <xs:all> 
    <xs:element name="name" type="xs:string"/> 
    <xs:element name="age" type="xs:string"/> 
    <xs:element name="manager" minOccurs="0"/> 
    </xs:all> 
</xsl:complexType> 

驗證抱怨。我究竟做錯了什麼?

可能與Middle way between XSD all and XSD sequence

這是我如何驗證:https://github.com/jcabi/jcabi-xml/blob/jcabi-0.7.5/src/main/java/com/jcabi/xml/XSDDocument.java#L161-L207

+1

如果您不想發送它,管理員元素不應存在。我的意思是在XML中。還要檢查你是否需要xsd中元素的類型。 – Zeus

+0

我根本沒有找到你:(你能否再解釋一下嗎? – yegor256

+0

什麼是你的經理元素的類型? – herry

回答

1

的關鍵可能是你使用的是什麼驗證,和/或什麼是你得到你確切的錯誤。

如果我用這個XSD(這一點很像你的,除了一些小的清潔和使用全局元素,以匹配您的實例XML):

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="employee"> 
     <xsd:complexType> 
      <xsd:all> 
       <xsd:element name="name" type="xsd:string"/> 
       <xsd:element name="age" type="xsd:string"/> 
       <xsd:element name="manager" minOccurs="0"/> 
      </xsd:all> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

那麼像這樣的XML是完全有效(注意到我註釋掉經理元素):

<employee> 
    <name>John Doe</name> <!-- exactly one mandatory element --> 
    <age>35</age> <!-- exactly one mandatory element --> 

    <!-- 
    <manager/> 
    --> 
    <!-- optional element, can be absent --> 
</employee> 

添加manager元素早在和XML仍然有效(按的minOccurs = 0)。

回到我的開場白的評論......你必須說出你正在使用什麼驗證器......以上的作品在.NET和Java(股票Xerces) - 他們應該。

+0

我認爲你錯了,這是我得到的:'元素'員工'的內容不完整。預計會有'{manager}'之一。(當'manager'缺席時)。我正在使用Java Xerces – yegor256

+0

您能否給出一個指向該部分規範的鏈接? (我也使用2.11) – yegor256

+0

Section [3.8.6](​​http://www.w3.org/TR/xmlschema-1/#coss-modelGroup),滾動到Schema Component Constraint:All Group Limited。您的錯誤消息意味着不能在元素粒子上使用minOccurs;該規範明確指出:「組中{粒子}中所有粒子的{max發生}必須是0或1.'minOccurs被定義爲0或1. –

相關問題