允许类型为anyType
的元素具有任何属性和任何值空间内容,包括子元素。 anySimpleType
规定的限制在哪里?我特别感兴趣的是只允许(通过给定的XSD文档)属性的限制。
假设libxml2
的架构验证忠实于规范,以下内容至少显示anySimpleType
的一个限制:
foo.xsd
:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Foo">
<xs:complexType>
<xs:sequence>
<xs:element name="Bar" type="xs:anyType" />
<xs:element name="Baz" type="xs:anySimpleType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
foo.xml
:
<?xml version="1.0" encoding="utf-8"?>
<Foo>
<Bar abc="xyz" />
<Baz abc="xyz" />
</Foo>
验证:
$ xmllint --noout foo.xml --schema foo.xsd
foo.xml:5: element Baz: Schemas validity error : Element 'Baz', attribute 'abc': The attribute 'abc' is not allowed.
foo.xml fails to validate
答案 0 :(得分:1)
anySimpleType
是一个抽象的基本简单类型。它完全不受限制。
http://www.datypic.com/sc/xsd/t-xsd_anySimpleType.html
如果要指定只允许属性列表,那就是“复杂类型”的作业,例如simpleType
。 (很好的命名,呵呵?= /)
http://www.datypic.com/sc/xsd/t-xsd_simpleType.html
[编辑你的例子]:
啊,好的,我现在看到你在问什么。
在XSD中,“简单”类型不是通过限制而是通过限制,不能具有属性。 (某些解析器允许NS http://www.w3.org/2001/XMLSchema-instance中的某些默认属性,例如{'type','nil','schemaLocation','noNamespaceSchemaLocation'};这些属性对于扩展此基类型非常有用。)它们旨在是原子的,文字的等等 - 任何可以是XML中属性的/值/的东西。
anySimpleType
正如其名称所暗示的那样 - 一种完全不受限制的简单类型。它不能使用属性'abc',因为简单类型不能具有属性 - 它们是属性值。如果你想要一个元素接受一个属性列表,正如我上面说的那样是“复杂”类型的工作,而不是“简单”类型。
规范中涵盖了这一点:https://www.w3.org/TR/xmlschema11-1/#Type_Derivation
答案 1 :(得分:1)
xsd:anyType
可以是复杂或简单的(xsd:anySimpleType
)。只有复杂类型才能具有属性。
{3}}和xsd:anyType
之间的关系(以及所有复杂类型)可以在W3C的XSD建议书的图表中清楚地看到:3 Built-in datatypes: