我在下面的xsd中收到验证错误。
cos-nonambig:“http://alert.schemas.tr.com/TriggerSynchronizationService/Data/2010-02-08/":resyncRequestID和WC [## any](或其替换组中的元素)违反 “独特的粒子归因”。在针对此模式进行验证期间,将为这两个粒子创建歧义。
我想我没有正确声明xs:
<xs:complexType name="GenerationTriggerData">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="resyncRequestID" type="xs:int" />
<xs:element minOccurs="0" maxOccurs="1" name="userID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="alertID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="triggerID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="logicalType" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="version" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="state" type="q1:State_Enum" />
<xs:element minOccurs="0" maxOccurs="1" name="criteria" xmlns:q2="http://expressions.schemas.tfn.thomson.com/2006-09-04/" type="q2:ExpressionRoot" />
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
</xs:sequence>
</xs:complexType>
答案 0 :(得分:0)
XSD不允许含糊不清的内容。 UPA是关于解析器能够明确地确定它相对于XSD的位置;不允许look-ahead。
由于 xsd:any
可以是(##)任何命名空间,因此resyncRequestID
会匹配它;在这种情况下,是第一个(可选),还是通配符?这里的内容显然是暧昧的,没有前瞻会有所帮助。
一种方法是使xsd:任何定义发生变化,使其与之前的任何内容都不匹配。约束命名空间总是一种简单的方法。
或者,在xsd之前使粒子正确:任何强制性。这样读者就会知道“狂野”的开始......
如果这不是一个选项,请在xs:any之前引入一个特殊的“marker”标记;它必须是强制性的!
以上通常称为“重构XSD”以满足XSD的UPA设计约束。