xsd:anySimpleType对xsd:anyType有什么限制,它们在哪里枚举?

时间:2016-06-14 00:43:49

标签: xml xsd

允许类型为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

2 个答案:

答案 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

enter image description here