2016-02-13 39 views
1

我想寫一個帶有未知命名元素的XML,其中包含一些已知屬性和無限數量的未知屬性。這是如何完成的,如下所示?要求具有未知名稱的元素的屬性?

XML

<Nodes> 
<COM.US.BattleShip UUID="adaKAj62ja" "X="4" Y="4" cannons="5" crew="50"> 
<COM.US.Cruiser UUID="dhRTV53ga" "X="4" Y="4" destroyed="true"> 
</Nodes> 

XSD

<xsd:element name="Nodes"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element> 
     <xsd:complexType> 
     <xsd:attribute name="UUID" type="xsd:string" use="required"/> 
     <xsd:attribute name="X" type="xsd:int" use="required"/> 
     <xsd:attribute name="Y" type="xsd:int" use="required"/> 
     <xsd:attribute type="xsd:string" maxOccurs="unbounded"/> 
     </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
+0

一些誤解先清除掉。在XML Schema中,所有元素都被命名。我懷疑你的意思是'名字未知的元素'而不是'匿名元素'。其次,在XML模式中,元素的類型決定了其內容。您無法描述具有未知名稱但已知內容的元素。最後,XML屬性不能重複,因此屬性聲明中的maxOccurs = unbounded是非法的。 – kimbert

+0

謝謝我編輯過。所以如果我想擁有未知數量的屬性,我應該將它們添加爲內部標籤? – Josephus87

回答

2

XSD 1.0不能要求對未知名的元素屬性。

您可以在XSD 1.1中編寫斷言,但實際上,您最好重新處理XML設計。您可以使用預定義的通用元素名稱,而不是允許使用任何元素名稱,以便使用常規的XSD 1.0屬性所需限制。您可以捕獲COM.US.BattleShip作爲屬性值而不是元素名稱

<Nodes> 
    <Node name="COM.US.BattleShip" UUID="adaKAj62ja" X="4" Y="4" cannons="5" crew="50"/> 
    <Node name="COM.US.Cruiser" UUID="dhRTV53ga" X="4" Y="4" destroyed="true"/> 
</Nodes> 

如果這個XML的設計是可以接受的,那麼XSD可以很容易地寫在XSD 1.0護住擔憂:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Nodes"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Node" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:attribute name="name" type="xs:string" use="required"/> 
      <xs:attribute name="UUID" type="xs:string" use="required"/> 
      <xs:attribute name="X" type="xs:int" use="required"/> 
      <xs:attribute name="Y" type="xs:int" use="required"/> 
      <xs:anyAttribute processContents="skip"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

啊是美好的,我只是好奇,如果有可能。主要關注的是具有比XSD中定義的更多的屬性,而不必求助於內部標籤。 – Josephus87

相關問題