Xml 如何在XSD中定义具有可选和必需元素的组?
这是XML:Xml 如何在XSD中定义具有可选和必需元素的组?,xml,xsd,Xml,Xsd,这是XML: <employee> <name>John Doe</name> <!-- exactly one mandatory element --> <age>35</age> <!-- exactly one mandatory element --> <manager/> <!-- optional element, can be absent --> </e
<employee>
<name>John Doe</name> <!-- exactly one mandatory element -->
<age>35</age> <!-- exactly one mandatory element -->
<manager/> <!-- optional element, can be absent -->
</employee>
无名氏
这就是我验证的方式:关键可能是您使用的验证器,和/或您得到的确切错误
如果我使用这个XSD(与您的XSD非常相似,除了一些小的清理和使用全局元素来匹配您的实例XML):
这样的XML是完全有效的(注意,我已经注释掉了manager元素):
无名氏
35
将manager
元素添加回,XML仍然有效(根据minOccurs=0)
回到我的开场白。。。你必须说出你正在使用的验证器。。。上述内容适用于.NET和Java(stock Xerces)——它们应该如此。manager元素不应该存在,如果您不想将其发送给其他用户。我的意思是在XML中。还要检查您是否需要xsd中元素的类型。我一点也不了解:(您能再解释一下吗?您的manager元素的类型是什么?您拥有的顶级xml有manager元素(第三个)。如果您不打算发送管理器数据,请不要在其中使用此元素。此外,XSD中应该提到管理器的类型,我看到XSD文件中没有提到任何类型。因此,它应该类似于@Zeus,不是真的…您不需要为元素定义类型(在这种情况下,默认值开始生效,它是anyType。我想你错了,这就是我得到的:元素'employee'的内容不完整。{manager}中应该有一个。
(当manager
不存在时)。我使用的是Java Xerces。你能给我一个指向规范这一部分的链接吗?(我也使用的是2.11)部分,滚动到模式组件约束:所有组有限。错误消息意味着不能在元素粒子上使用minOccurs;规范明确规定:组的{particles}中所有粒子的{max occurs}必须为0或1。
minOccurs定义为0或1.Hm..我也发现了这一点(这证实了您所说和显示的内容)…那么为什么我的模式不起作用呢?…(我有一个比上面更复杂的示例,但在语法和语义上类似)我发布了一个链接,指向用于验证的Java代码(请参阅更新的问题)
<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>
<?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>
<employee>
<name>John Doe</name> <!-- exactly one mandatory element -->
<age>35</age> <!-- exactly one mandatory element -->
<!--
<manager/>
-->
<!-- optional element, can be absent -->
</employee>