0

すべて「座標」を含む複数の地域タイプからの選択について説明する必要があります。残念ながら、同じ名前の複数のxsd要素を持つことは許可されていません-それらが複数回定義されているか、単に複数回参照されているかは関係ありません。

<xs:group name="Region">
    <xs:choice>
        <xs:group ref="tns:CircularRegion" />
        <xs:group ref="tns:RectangularRegion" />
        <xs:group ref="tns:PolygonalRegion" />
    </xs:choice>
</xs:group>

参照されるグループの場合:

<xs:group name="Coordinates">
    <xs:sequence>
        <xs:element name="Latitude" type="xs:integer" />
        <xs:element name="Longitude" type="xs:integer" />
    </xs:sequence>
</xs:group>
<xs:group name="CircularRegion">
    <xs:sequence>
        <xs:group ref="tns:Coordinates" />
        <xs:element name="Radius" type="xs:integer" />
    </xs:sequence>
</xs:group>
<xs:group name="RectangularRegion">
    <xs:sequence>
        <xs:group ref="tns:Coordinates" />
        <xs:group ref="tns:Coordinates" />
    </xs:sequence>
</xs:group>
<xs:group name="PolygonalRegion">
    <xs:sequence>
        <xs:group minOccurs="3" maxOccurs="12" ref="tns:Coordinates" />
    </xs:sequence>
</xs:group>

「Latitude」と「Longitude」は複数回参照されているため、検証プロセスはエラー(複数の定義...)で終了します。

これを解決する方法はありますか?

編集「LiquidXMLStudio2012」バリデーターからのエラーメッセージ(ドイツ語):

エラーMehrereDefinitionendes Elements'Psid' verursachen einmehrdeutigesInhaltsmodell。Ein Inhaltsmodell muss so gebildet werden、dasswährendderValidierung einer Elementinformationssequenz das darin direkt、indirekt oder implizit enthaltene Partikel、mit dem versucht wird、jedes Element in der Sequenz zu validieren、wiederum e zu untersuchen und ohne dass beliebige Informationen zu den Elementen imRestderSequenzbenötigtwerden。

英語で(Google翻訳

エラー要素Psid'のいくつかの定義により、コンテンツモデルがあいまいになります。コンテンツモデルは、直接、間接、または暗黙的に含まれる要素情報シーケンスの検証中に、シーケンス内の各要素を検証しようとする粒子が、そのアイテムのコンテンツまたは属性を必要とせずに一意に決定できるように形成する必要があります。調査し、シーケンスの残りの項目に関する情報なしで。

4

1 に答える 1

1

問題は、グループへの複数の参照ではありません。問題は、 Unique Particle AttributionルールCoordinatesの違反です( XML仕様では決定論的であると説明されています。説明は理解しやすいです)。

これは、CircularRegionとのどちらかを選択できるためですが、どちらも同じ要素(from )RectangularRegionで始まります。要素を含むxmlドキュメントを解析しようとすると、パーサーはその要素を見ただけでは、それがグループからのものかグループからのものかを判断できません。(xmlでさらに先を見れば可能ですが、UPAルールでは許可されていません)。これは特定の種類のあいまいさです。複数のパーティクル(スキーマの一部)がその要素に起因する可能性があるため、一意のパーティクルアトリビューションではありません。<Latitude>Coordinates<Latitude>CircularRegionRectangularRegion


これに対する最も明確な解決策は、グループの代わりにcomplexTypesを使用して、選択したものをそれぞれ一意の要素(、、など)でラップすること<CircularRegion>です<RectangularRegion><PolygonalRegion>

ただし、XSDが記述している(または許可されている場合は記述している)XMLが必要であるという印象を受けます。これを行う簡単な方法は、共通のプレフィックスを除外することです。

<xs:group name="Region">
  <xs:sequence>
    <xs:group ref="tns:Coordinates"/>                <!-- common prefix -->
    <xs:choice>
      <xs:element name="Radius" type="xs:integer" /> <!-- Circular      -->
      <xs:group minOccurs="1" maxOccurs="11" ref="tns:Coordinates" />
                                                     <!-- Rect and Poly -->
    </xs:choice>
  </xs:sequence>
</xs:group>

ところで:私はあなたのオリジナルのXSDと私のxsdパーサー(xmllint)をテストしました、そしてそれはうまくいきました、それぞれの選択に一致するxmlを解析しました。それはUPA問題にフラグを立てませんでした....それは奇妙です。この証拠にもかかわらず、私はそれがUPA規則に違反していることを確信しており、xmllintに誤りがあります。誰かがこれを確認または反論できますか?

私も自分のソリューションをテストしましたが、それも機能します。

EDITは、@SebastianMauthoferがコメントで指摘した2番目のレベルのあいまいさを削除しました。

于 2012-12-11T13:22:12.373 に答える