0

以下の xsd で検証エラーが発生しています。

cos-nonambig: "http://alert.schemas.tr.com/TriggerSynchronizationService/Data/2010-02-08/":resyncRequestID および WC[##any] (またはそれらの置換グループの要素) は、「固有粒子属性」に違反しています。 "。このスキーマに対する検証中に、これら 2 つの粒子に対してあいまいさが生じます。

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に一致します。その場合、それは最初の(オプションの)ものですか、それともワイルドカードですか?ここでは、内容が明らかに曖昧であり、先読みは役に立ちません。

1 つの方法は、xsd:any の定義を変更して、その前のコンテンツと一致しないようにすることです。名前空間を制約することは、常に簡単な方法です。

または、xsd:any の直前にパーティクルを必須にします。このようにして、読者は「ワイルド」がどこから始まるかを知ることができます...

それができない場合は、xs:any の直前に特別な「マーカー」タグを導入します。それは必須でなければなりません!

上記は通常、XSD の UPA 設計制約を満たすための「XSD のリファクタリング」と呼ばれます。

于 2012-05-31T10:56:36.337 に答える