2011-01-10 3 views
3

を受け入れられるように表していますか.....使用....持つXML検証の問題は、私は、私は少し困惑している奇妙な状況があり、私は制約が普遍

私が持っていますXMLデータファイル私は、使用されるパーサーによって異なる結果をもたらすように見えるスキーマに対して検証しようとしています。 ....私が間違っているのか、どのようにすべてのパーサーが正常にXMLを検証できるように、より良いスキーマに制約を表すことになっているのかわからない。ここスキーマの問題部分の抜粋です:

<xsd:element name="DemoValues"> 
<xsd:annotation> 
    <xsd:documentation>Demo values for any, or all, of the demo categories defined on the GAP . A 
    demo value includes a reference to the category it applies to, a value in the appropriate 
    format and an optional market reference if it is for a specific market. If the market 
    reference is omitted the demo value applies to the entire area serviced by the outlet. Each 
    demo category may only have a single demo value within this group of demo values. However if 
    the demo value is for a market, there may be a demo value per market within this group of 
    demo values. </xsd:documentation> 
</xsd:annotation> 
<xsd:complexType> 
    <xsd:sequence> 
    <xsd:element name="DemoValue" type="gap:demoValueType" maxOccurs="unbounded"/> 
    </xsd:sequence> 
</xsd:complexType> 
<xsd:unique name="DemoValueConstraint"> 
    <xsd:annotation> 
    <xsd:documentation>Constraint allows only up to one demo value for a demo category, and per 
     market when a market reference exists. </xsd:documentation> 
    </xsd:annotation> 
    <xsd:selector xpath="gap:DemoValue"/> 
    <xsd:field xpath="@demoRef"/> 
    <xsd:field xpath="@marketRef|@demoRef"/> 
</xsd:unique> 

<DemoValues> 
      <DemoValue demoRef="DM0" marketRef="MKT1">0.40</DemoValue> 
      <DemoValue demoRef="DM1">15.00</DemoValue> 
</DemoValues> 

は、このエラーが発生します:

要素 '{http://www.AAAA.org/schemas/canadianTVGAP}DemoValue'、属性「マークここ

は、問題のあるXMLでありますetRef ':一意の識別制約のフィールドの{@ http://www.AAAA.org/schemas/canadianTVGAP}DemoValueConstraint}のXPath' @marketRef | @demoRef 'は、複数のメンバーを持つノードセットを評価します。

簡略化されたエラーは次のとおりです。 フィールド 'marketRef'には、最大1つの値が必要です。

XMLの目的は、これらすべての組み合わせできるようにすることである。

1)

<DemoValues> 
      <DemoValue demoRef="DM0" marketRef="MKT1">0.40</DemoValue> 
      <DemoValue demoRef="DM1">15.00</DemoValue> 
</DemoValues> 

2)

<DemoValues> 
      <DemoValue demoRef="DM0" marketRef="MKT1">0.40</DemoValue> 
      <DemoValue demoRef="DM0" marketRef="MKT2">0.41</DemoValue> 
      <DemoValue demoRef="DM0" marketRef="MKT3">0.42</DemoValue> 
      <DemoValue demoRef="DM0" marketRef="MKT4">0.43</DemoValue> 
      <DemoValue demoRef="DM1">15.00</DemoValue> 
</DemoValues> 

3)のいずれについて

<DemoValues> 
      <DemoValue demoRef="DM0" marketRef="MKT1">0.40</DemoValue> 
      <DemoValue demoRef="DM1" marketRef="MKT1">0.41</DemoValue> 
      <DemoValue demoRef="DM2" marketRef="MKT1">0.42</DemoValue> 
      <DemoValue demoRef="DM3">15.00</DemoValue> 
</DemoValues> 

おかげ助けて!!

答えて

1

属性リストを説明する組み合わせに限定する以外の理由でフィールドを使用する必要がありますか?

XML要素は、名前付き属性のインスタンスを最大1つまで持つことができます。これは、スキーマとは独立したXMLに関する事実です。

gap:demoValueTypeの定義では、単に<xsd:attribute ... />を使用して2つの属性を指定します。あなたの例を見れば、おそらくuse="required"を@demorefの定義に使用したいと思うでしょう)

+0

この場合、スキーマを定義するときのフィールドと属性の違いは何ですか? (XSD初心者の言い訳はありません) – Paul

1

仕様が非常にあいまいなので、ここから別のプロセッサーと異なる結果になっているのは驚くことではありません。しかし、2番目のxs:フィールドの共用体表現は間違っています。複数のノードを選択できるフィールドを持つべきではありません。あなたの最初のフィールドが@demoRefで、2つ目が@marketRefなら、正しく動作すると思いますが、スペックを再読み込みしていて、別の解釈をする実装者と議論することをためらっています。

+0

ベンダーからのオリジナルのドキュメンテーションをもっと掘り下げなければなりません.....しかし、私はあなたの意見を見ることができます.....私は彼らが " demoRef、marketRef "がリスト内のユニークな要素になる..... .....エキスパートのXSD開発者ではない...そのような状況を定義する良い方法があると私は考えている? – Paul

関連する問題