Xml 唯一粒子属性误差
目标: 我有一个名为Schema1.XSD的现有标准XSD。 我想在Schema2.xsd的complexType(“TVDSection”)中扩展Schema1.xsd的complexType(“tElementWithIDAndName”) 当我尝试在Altova XMLSpy/oXygen xml编辑器中验证Schema2.xsd时,出现以下错误: 错误: [Xerces]cos nonambig:::element1和WC[##other:,“”](或其替换群中的元素)违反“唯一粒子属性”。在根据该模式进行验证期间,将为这两个粒子创建歧义 Schema1.xsd:Xml 唯一粒子属性误差,xml,xsd,xsd-validation,xml-validation,altova,Xml,Xsd,Xsd Validation,Xml Validation,Altova,目标: 我有一个名为Schema1.XSD的现有标准XSD。 我想在Schema2.xsd的complexType(“TVDSection”)中扩展Schema1.xsd的complexType(“tElementWithIDAndName”) 当我尝试在Altova XMLSpy/oXygen xml编辑器中验证Schema2.xsd时,出现以下错误: 错误: [Xerces]cos nonambig:::element1和WC[##other:,“”](或其替换群中的元素)违反“唯一粒子属性
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.mybasic.com/1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
targetNamespace="http://www.mybasic.com/1"
elementFormDefault="qualified"
version="0.1">
<xs:complexType name="tElementWithIDAndName">
<xs:sequence>
<xs:element name="additionalName" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>
Schema2.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.mySchema.com/Generic/1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:myBasic="http://www.mybasic.com/1"
targetNamespace="http://www.mySchema.com/Generic/1"
elementFormDefault="qualified" version="0.1">
<xs:import namespace="http://www.mybasic.com/1" schemaLocation="schema.xsd"/>
<xs:element name="Element1" type="TVDSection"/>
<xs:complexType name="TVDSection">
<xs:complexContent>
<xs:extension base="myBasic:tElementWithIDAndName">
<xs:sequence>
<xs:element name="element1" type="xs:string" minOccurs="0" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
我不知道这在哪里/如何违反唯一粒子属性。
请帮助我解决上述问题。您的内容模型可以解释为“任意数量的名为p:additionalName的元素,后跟任意数量的元素,前提是它们不在名称空间“p”中,后跟任意数量的名为q:element1的元素”。现在,如果遇到一个q:element1元素,验证器不知道是将其放入第二个组(不在名称空间“p”中的任意数量的元素)还是第三个组(任何名为q:element1的元素)。因此产生了歧义
在XSD 1.1中,等级库已经更改,因此在这种情况下,如果有一个特定粒子和一个通配符粒子都匹配,则始终优先选择该特定粒子。因此,一个解决方案就是简单地移动到XSD1.1。如果您想继续使用XSD 1.0,则需要更改xs:any通配符,以便对允许元素的命名空间施加更多约束。不幸的是,我无法更改schema1.XSD,因为它是来自另一个团队的项目的标准XSD。我现有的工具也不支持XSD1.1。这个问题有什么想法吗?为什么要扩展schema1.xsd中的复杂类型?它已经允许在additionalName元素之后使用通配符内容,为什么您需要更改它呢?至于“我现有的工具不支持XSD 1.1”,答案当然是切换到一家工具供应商,该供应商正在积极开发他们的产品并跟上最新的标准。非常感谢您提供的信息Michael Kay。