我尝试为计算机游戏的地图数据构建以下一组XSD方案:
中心是MapDefinitionSchema.xsd架构,它应该引用其他架构。 我没有遇到这样的例子,但一般的想法是创建补充集
使用xsd:import在MapDefinition.xml中使用它。 我想要的是能够针对MapDefinitionScheme.xsd验证MapDefinition.xml 和其他x .x文件对抗* .xsd对应的文件。
但是我看到我管理xs:从其他xsd导入类型(不是我想要的)。我想要的更像是:
<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'的内容必须匹配(注释?,(element | group | choice | sequence | any)*)。从以下问题开始发现问题:include。 开始地点:9:18 结束地点:9:28&lt;&lt;
似乎我无法随意包含这些元素。
我的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>
这是否可行,不是在类型上运行,而是在元素上运行?
答案 0 :(得分:1)
您似乎混淆了XInclude,它在任意位置对引用文件进行文本包含(以及树,嫁接),以及XSD的包含和导入声明,它们只能在顶层操作(即, xs:schema元素的子元素。您已在xs:include元素中声明了XInclude命名空间,这非常令人困惑。
您可以使用XInclude来构建架构文档,就像使用它来构建任何其他XML文档一样,但这不是通常的方法。通常的方法是使用xs:include(如果定义在同一名称空间中)或xs:import(如果它们位于不同的名称空间中)。如果你想在结构的中间包含一些东西,那么这样做的方法是(a)在顶层,包括一个定义一个命名模型组的模式文档(xs:group name =“n”),和( b)在您想要包含该组的位置,将其包含在模型组引用中:<xs:group ref="n"/>