我正在写一个xml架构来反对xml文件。我为以下代码得到了这个错误,但无法弄清楚原因。有什么建议吗?
cvc-type.3.1.1:元素'employees'是一个简单类型,因此它不能具有属性,除了名称空间名称与'http://www.w3.org/2001/XMLSchema-instance相同的属性'和[本地名称]是'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"/>
答案 0 :(得分:2)
元素可能包含简单类型或复杂类型。
具有简单类型的元素只不过是适当类型的有效类型的包装器。它不允许有其他内容,不允许有子元素,也不允许有属性。
也就是说,只允许由复杂类型控制的元素具有属性。 (如错误消息中所述,对xsi:nil,xsi:type,xsi:schemaLocation和xsi:noNamespaceSchemaLocation进行了异常。)
您的'employees'元素被声明为具有简单类型:整数列表。因此允许包含整数列表,但是您没有为它声明任何属性。如果你想这样做,你可以声明它具有“具有简单内容的复杂类型” - 本质上是一种复杂类型,它通过添加属性来扩展一个简单类型。
<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>