独特的粒子属性错误
Unique Particle Attribution error
目标:
我有一个名为 Schema1.xsd 的现有标准 XSD。
我想在 Schema2.xsd.
的 complexType("TVDSection") 中扩展 Schema1.xsd 的 complexType("tElementWithIDAndName")
当我尝试在 Altova XMLSpy/oXygen xml 编辑器中验证 Schema2.xsd 时,出现以下错误:
错误:
[Xerces] cos-nonambig:“http://www.mySchema.com/Generic/1":element1 and WC[##other:"http://www.mybasic.com/1”,“”](或其替换组中的元素)违反 "Unique Particle Attribution"。在针对此模式进行验证期间,将为这两个粒子创建歧义。
Schema1.xsd:
<?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>
我不知道where/how这违反了独特的粒子属性。
请帮助我解决上述问题。
您的内容模型可以解释为 "any number of elements named p:additionalName, followed by any number of elements provided they are not in namespace 'p', followed by any number of elements named q:element1, "。现在,如果遇到 q:element1 元素,验证器不知道是将其放入第二组(不在命名空间 'p' 中的任何数量的元素)还是第三组(任何名为 q:element1)。因此模棱两可。
在 XSD 1.1 中,规范已更改,因此在这种情况下,如果存在同时匹配的特定粒子和通配符粒子,则始终优先选择特定粒子。因此,一种解决方案是简单地移动到 XSD 1.1。如果您想继续使用 XSD 1.0,则需要更改 xs:any 通配符,以便对允许的元素的命名空间施加更多限制。
目标: 我有一个名为 Schema1.xsd 的现有标准 XSD。 我想在 Schema2.xsd.
的 complexType("TVDSection") 中扩展 Schema1.xsd 的 complexType("tElementWithIDAndName")当我尝试在 Altova XMLSpy/oXygen xml 编辑器中验证 Schema2.xsd 时,出现以下错误:
错误: [Xerces] cos-nonambig:“http://www.mySchema.com/Generic/1":element1 and WC[##other:"http://www.mybasic.com/1”,“”](或其替换组中的元素)违反 "Unique Particle Attribution"。在针对此模式进行验证期间,将为这两个粒子创建歧义。
Schema1.xsd:
<?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>
我不知道where/how这违反了独特的粒子属性。 请帮助我解决上述问题。
您的内容模型可以解释为 "any number of elements named p:additionalName, followed by any number of elements provided they are not in namespace 'p', followed by any number of elements named q:element1, "。现在,如果遇到 q:element1 元素,验证器不知道是将其放入第二组(不在命名空间 'p' 中的任何数量的元素)还是第三组(任何名为 q:element1)。因此模棱两可。
在 XSD 1.1 中,规范已更改,因此在这种情况下,如果存在同时匹配的特定粒子和通配符粒子,则始终优先选择特定粒子。因此,一种解决方案是简单地移动到 XSD 1.1。如果您想继续使用 XSD 1.0,则需要更改 xs:any 通配符,以便对允许的元素的命名空间施加更多限制。