2013-11-01 46 views
0

我嘗試建立一個下面的一組XSD方案的電腦遊戲中的地圖數據:分裂XSD計劃分成幾個文件

  1. CreatureDefinitionsSchema.xsd
  2. CreatureSchema.xsd
  3. GoalList.xsd
  4. LightScheme的.xsd
  5. RoomScheme.xsd
  6. SeatScheme.xsd
  7. TrapScheme.xsd

中心是MapDefinitionSchema.xsd模式,它應該引用其他模式。 我還沒有」碰到過這樣的例子,但總的想法是創建一套補充

  1. CreatureDefinitionsSchema.xml
  2. CreatureSchema.xml
  3. GoalList.xml
  4. LightScheme.xml
  5. RoomScheme.xml
  6. SeatScheme.xml
  7. TrapScheme.xml

然後在帶有xsd:import的MapDefinition.xml中使用它。 我想要的是能夠根據MapDefinitionScheme.xsd 和其他xml文件對其* .xsd對應文件驗證MapDefinition.xml。

但是我看到我管理到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-必match.1:含量'序列'必須匹配(註釋?,(元素|選擇|序列|任何)*)。發現問題始於: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> 

是有史以來最可行的,而不是類型,但在元件上運行?

回答

0

您似乎混淆了XInclude,它在任意位置執行引用文件的文本包含(以及樹移植),以及XSD的包含和導入聲明,它們只能在頂層運行(即,作爲xs:schema元素的子元素)。您已經在xs:include元素中聲明瞭XInclude命名空間,這非常令人困惑。

您可以像使用它構建任何其他XML文檔一樣使用XInclude構建模式文檔,但這不是通常的方法。通常的做法是使用xs:include(如果定義位於同一個命名空間中)或xs:import(如果它們位於不同的命名空間中)。如果你想在結構中包含一些東西,做到這一點的方法是(a)在頂層,包括一個定義命名模型組的模式文檔(xs:group name =「n」)和( b)在您希望包含該組的點上,將其包含在模型組參考中:<xs:group ref="n"/>

+0

這就是它的一半!基本上我希望每個都在單獨的xsd文件中定義,以便稍後驗證XML (僅包含遊戲數據的某些部分!)。 不能包含元素(註釋?,(全部|選擇)) – paul424

+0

啊我沒有注意到我可以將元素包裝在上述容器之一中,而不是組中...... – paul424