2012-12-20 64 views
0

我正在寫一個針對xml文件的xml架構。我得到了以下代碼的錯誤,但無法弄清楚爲什麼。任何建議?針對XML錯誤的xml架構

cvc-type.3.1.1:元素'employees'是一個簡單的類型,所以它不能擁有屬性,除了名稱空間名稱與'http://www.w3.org/2001/XMLSchema-實例',其[本地名稱]是'type','nil','schemaLocation'或'noNamespaceSchemaLocation'之一。但是,找到了'essns'屬性。發現問題始於simpleType。

<xs:element name="employees" > 
     <xs:simpleType> 
     <xs:list itemType ="xs:integer"/> 
     </xs:simpleType> 
     </xs:element> 
     <xs:element name= "projectsControlled"> 
     <xs:simpleType> 
     <xs:list itemType ="xs:integer" /> 
     </xs:simpleType> 
     </xs:element> 

此以下是XML代碼

<employees essns="888665555"/> 
<projectsControlled pnos="20"/> 
+1

錯誤消息看起來相當明確。類型'employees'不能擁有'essns'屬性,因爲模式不允許。 –

回答

1

元件可以具有簡單類型或複雜類型。

具有簡單類型的元素無非是圍繞有效的適當類型的包裝。不允許擁有其他內容,不允許擁有子元素,也不允許擁有屬性。

也就是說,只有受複雜類型管理的元素才允許擁有屬性。 (如錯誤消息中所述,xsi:nil,xsi:type,xsi:schemaLocation和xsi:noNamespaceSchemaLocation發生異常。)

您的'employees'元素被聲明爲具有簡單類型:a整數列表。因此允許包含整數列表,但尚未爲其聲明任何屬性。如果你想這樣做,你可以聲明它具有「簡單內容的複雜類型」 - 實質上是一種複雜類型,通過添加屬性來擴展簡單類型。

<xs:simpleType name="list-of-integers"> 
    <xs:list itemType="xs:integer"/> 
</xs:simpleType> 

<xs:element name="employees"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:extension base="tns:list-of-integers"> 
     <xs:attribute name="essns" 
         type="tns:list-of-integers"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

,或者它可能是你究竟想要做的就是申報employees與命名essns的屬性,其值可以是整數列表的空元素。在這種情況下,你不希望複雜的內容類型,因爲你想要的不是簡單的內容,而是沒有內容。

<xs:element name="employees-sib"> 
    <xs:complexType mixed="false"> 
    <xs:sequence/> 
    <xs:attribute name="essns" 
        type="tns:list-of-integers"/> 
    </xs:complexType> 
</xs:element>