您可能遇到的问题之一称为唯一粒子属性。这完全取决于any
您想要的那些元素可能属于哪些名称空间。
最坏的情况是任何命名空间。因此,满足您的要求(与 InfantPro'Aravind' 不同,它通过在您希望它是可选的地方将内容部分规定为强制性的,并将您的任何元素的 maxOccurs 限制为任意数字来解决问题)这就是我们开始的地方(坏模式,违反 UPA)。首先,修复任何的 maxOccurs 以允许1 or more elements to be placed in the location
:
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="content">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="metadata" minOccurs="0" maxOccurs="unbounded"/>
<xsd:any maxOccurs="unbounded"/>
<xsd:element name="content-section" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="content-footer" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
错误是:
Error occurred while loading [how-can-i-describe-an-element-with-some-any-child-element-and-some-known.xsd], line 8 position 6.
Wildcard '##any' allows element 'metadata', and causes the content model to become ambiguous. A content model must be formed such that during validation of an element information item sequence, the particle contained directly, indirectly or implicitly therein with which to attempt to validate each item in the sequence in turn can be uniquely determined without examining the content or attributes of that item, and without any information about the items in the remainder of the sequence.
现在你需要解决这个问题。这些是您的选择:
1) 将任何名称空间限制为其他内容(例如##other):
<xsd:any maxOccurs="unbounded" namespace="##other"/>
如果你不能限制你的命名空间,这些是你的选择:
2)将内容包装any
到另一个元素(称为扩展):
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="content">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="metadata" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="extension"/>
<xsd:element name="content-section" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="content-footer" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
所有其他都涉及移动any
底部的内容。
3)any
在底部向右移动,并在其前面加上一个强制元素。
如果您希望这种类型是全局的并允许它不是最终的,那么您将进入其他模式。