这是XML:
<employee>
<name>John Doe</name> <!-- exactly one mandatory element -->
<age>35</age> <!-- exactly one mandatory element -->
<manager/> <!-- optional element, can be absent -->
</employee>
我正在尝试在XSD中定义它:
<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>
验证者在manager
元素缺席时会抱怨。我做错了什么?
答案 0 :(得分: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是完全有效的(注意我已经注释掉了manager元素):
<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) - 正如他们应该的那样。