XS:任何模式验证

时间:2012-05-31 10:20:00

标签: xsd

我在下面的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>

1 个答案:

答案 0 :(得分:0)

XSD不允许含糊不清的内容。 UPA是关于解析器能够明确地确定它相对于XSD的位置;不允许look-ahead

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

一种方法是使xsd:任何定义发生变化,使其与之前的任何内容都不匹配。约束命名空间总是一种简单的方法。

或者,在xsd之前使粒子正确:任何强制性。这样读者就会知道“狂野”的开始......

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

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