0

我在下面的 xsd 中收到验证错误。

cos-nonambig:“http://alert.schemas.tr.com/TriggerSynchronizationService/Data/2010-02-08/”:resyncRequestID 和 WC[##any](或它们的替换组中的元素)违反“唯一粒子属性” ”。在针对此模式进行验证期间,将为这两个粒子创建歧义。

我想我没有正确声明 xs:any。

<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>
4

1 回答 1

0

XSD 不允许有歧义的内容。UPA 是关于解析器能够明确地确定它相对于 XSD 的位置;甚至超前也是不允许的。

由于您xsd:any可以是 (##) 任何名称空间,因此resyncRequestID会匹配它;在这种情况下,是第一个(可选)还是通配符?这里的内容显然是模棱两可的,没有前瞻会有帮助。

一种方法是更改​​ xsd:any 定义,使其与之前的任何内容都不匹配。约束命名空间始终是一种简单的方法。

或者,在 xsd:any 之前使粒子成为强制性的。这样读者就会知道“狂野”从哪里开始......

如果这不是一个选项,请在 xs:any 之前引入一个特殊的“标记”标签;它必须是强制性的!

以上通常称为“重构 XSD”以满足 XSD 的 UPA 设计约束。

于 2012-05-31T10:56:36.337 回答