1

コンピュータゲームのマップデータ用に、次の一連の XSD スキームを構築しようとしています。

  1. CreatureDefinitionsSchema.xsd
  2. CreatureSchema.xsd
  3. ゴールリスト.xsd
  4. LightScheme.xsd
  5. RoomScheme.xsd
  6. SeatScheme.xsd
  7. TrapScheme.xsd

中心となるのは MapDefinitionSchema.xsd スキーマで、他のスキーマを参照する必要があります。私はそのような例に出くわしたことはありませんが、一般的なアイデアは補完的なセットを作成することです

  1. CreatureDefinitionsSchema.xml
  2. CreatureSchema.xml
  3. ゴールリスト.xml
  4. LightScheme.xml
  5. RoomScheme.xml
  6. SeatScheme.xml
  7. TrapScheme.xml

xsd:import を使用して MapDefinition.xml で使用します。私が望むのは、MapDefinition.xml を MapDefinitionScheme.xsd に対して検証し、他の xml ファイルを対応する *.xsd に対して検証できるようにすることです。

ただし、他の xsd から xs:import タイプを管理していることがわかります (必要なものではありません)。私が欲しいのはもっと似ています:

<xs:element name="GameMap">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="MapSizeX">  </xs:element >
            <xs:element name="MapSizeY">  </xs:element >                
            <xs:include xmlns:xi="http://www.w3.org/2001/XInclude" href="SeatScheme.xsd" />
        </xs:sequence>           

    </xs:complexType>

、しかし、私は得る

エンジン名: Xerces 重大度: エラー 説明: s4s-elt-must-match.1: 'sequence' の内容は一致する必要があります (注釈?, (要素 | グループ | 選択 | シーケンス | 任意)*)。include から始まる問題が見つかりました。開始場所: 9:18 終了場所: 9:28 <<

これらの要素をランダムに含めることはできないようです。

私の SeatScheme.xsd :

<xs:element name="SeatList" type="Seat"/>        
    <xs:complexType name="Seat">
    <xs:sequence>
        <xs:element name="color" type="xs:string"/>
        <xs:element name="faction" type="xs:string"/>
        <xs:element name="startingX" type="xs:integer"/>
        <xs:element name="startingY" type="xs:integer"/>
        <xs:element name="colorR" type="xs:decimal"/>            
        <xs:element name="colorG" type="xs:decimal"/>
        <xs:element name="colorB" type="xs:decimal"/>            
    </xs:sequence>
</xs:complexType> </xs:schema>

型ではなく要素で操作することは可能ですか?

4

1 に答える 1

1

任意の場所で参照ファイルのテキスト インクルード (つまり、ツリー グラフト) を行う XInclude と、トップ レベル (つまり、 xs:スキーマ要素)。xs:include 要素内で XInclude 名前空間を宣言しましたが、これはかなり紛らわしいです。

XInclude を使用して、他の XML ドキュメントを作成する場合と同様にスキーマ ドキュメントを作成できますが、これは通常の方法ではありません。通常のアプローチは、xs:include (定義が同じ名前空間にある場合) または xs:import (異なる名前空間にある場合) を使用することです。構造の途中に何かを含めたい場合、その方法は (a) 最上位に、名前付きモデル グループ (xs:group name="n") を定義するスキーマ ドキュメントを含め、( b) そのグループを含めたい時点で、モデル グループ参照を使用して含めます。<xs:group ref="n"/>

于 2013-11-01T15:11:00.103 に答える