【发布时间】:2014-08-30 03:29:45
【问题描述】:
给定以下两种模式
(根)
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:someNs="first"
xmlns:someOtherNs="second"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="unqualified"
attributeFormDefault="unqualified"
version="1.0"
targetNamespace="first">
<xsd:import namespace="second" schemaLocation="./child.xsd" />
<xsd:element name="employee" type="someNs:fullpersoninfo" />
<xsd:complexType name="personinfo">
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string" />
<xsd:element name="lastname" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="fullpersoninfo">
<xsd:complexContent>
<xsd:extension base="someNs:personinfo">
<xsd:sequence>
<xsd:element name="address" type="xsd:string" />
<xsd:element name="city" type="xsd:string" />
<xsd:element name="country" type="xsd:string" />
<xsd:group ref="someOtherNs:Child" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
和(孩子)
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="someId-1"
targetNamespace="second"
elementFormDefault="qualified"
xmlns:someOtherNs="second"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="second">
<xs:element name="ChildElement" type="ChildElement"
nillable="false" />
<xs:complexType name="ChildElement">
<xs:sequence>
<xs:element name="firstname" type="xs:string" />
<xs:element name="lastname" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:group name="Child">
<xs:sequence>
<xs:element ref="ChildElement" minOccurs="0" maxOccurs="1" />
<xs:any processContents="lax" minOccurs="0"
maxOccurs="unbounded"
namespace="##other" />
</xs:sequence>
</xs:group>
</xs:schema>
不应该出现唯一的粒子属性,因为孩子使用elementFormDefault="qualified",而根使用elementFormDefault="unqualified"。但是,当通过 Java 的 xjc 运行时,无法使用生成的类,因为类上的注释似乎不够——至少看起来如此。如何避免 UPA?
有问题的错误如下:
org.xml.sax.SAXParseException;行号:8;列号:41; cos-nonambig:"second":ChildElement 和 WC[##other:"first"] (或它们替换组中的元素)违反“唯一粒子属性”。在针对此模式进行验证期间,将为这两个粒子创建歧义。
【问题讨论】:
-
对于哪个声明,您收到 UPA 错误?请将确切的错误消息粘贴到您的问题中。谢谢。