2012-05-31 92 views
0

我在下面的xsd中得到驗證錯誤。XS:任何模式驗證

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

XSD不允許含糊不清的內容。解析器能夠明確地指出它與XSD的相對位置;即使look-ahead也是不允許的。

由於您的xsd:any可以是(##)任何名稱空間,那麼resyncRequestID會匹配它;在那種情況下,是第一個(可選的)還是通配符?這裏的內容顯然是模糊不清的,沒有前瞻會有所幫助。

一種方法是讓xsd:any的定義發生變化,使它不會與之前的任何內容相匹配。限制名稱空間始終是一個簡單的方法。

或者,在xsd之前製作粒子:任何必需的。通過這種方式,讀者可以知道「野外」開始的位置......

如果這不是一個選項,請在xs:any之前引入一個特殊的「標記」標記。它必須是強制性的!

上面通常稱爲「重構XSD」以滿足XSD的UPA設計約束。