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. 座位方案.xml
  7. 陷阱方案.xml

并在 MapDefinition.xml 中使用 xsd:import 。我想要的是能够针对 MapDefinitionScheme.xsd 和其他 xml 文件针对它们的 *.xsd 对应项来验证 MapDefinition.xml。

但是我看到我设法 xs:import types from other xsd (not what I want) 。我想要的更像是:

<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:“序列”的内容必须匹配(注释?,(元素|组|选择|序列|任何)*)。发现一个问题开始于:包括。开始地点: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,它在任意位置对引用文件进行文本包含(嗯,树嫁接),而 XSD 的 include 和 import 声明只能在顶层操作(即,作为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 回答