2016-06-14 7 views
0

Элементу типа anyType разрешено иметь любые атрибуты и любое содержимое пространства значений, включая подэлементы. Где указаны ограничения для anySimpleType? Меня особенно интересует ограничение, которое разрешено только указанным (с помощью данного документа XSD).Каковы ограничения xsd: anySimpleType на xsd: anyType и где они перечислены?

Предполагая проверки схемы 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> 

:

<?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 

ответ

1

anySimpleType является абстрактным базовым простым типом. Он полностью неограничен.

http://www.datypic.com/sc/xsd/t-xsd_anySimpleType.html

Если вы хотите, чтобы указать, что только список атрибутов, допускается, что работа в «сложных типов», таких как simpleType. (? Великие имена для них, да = /)

http://www.datypic.com/sc/xsd/t-xsd_simpleType.html

[Edit повторно вашего примера]:

Ах, хорошо, я вижу, что вы спрашиваете прямо сейчас.

В XSD «простые» типы категорически, а не через ограничение, не могут иметь атрибуты. (Некоторые парсеры допускают некоторые атрибуты по умолчанию, такие как {'type', 'nil', 'schemaLocation', 'noNamespaceSchemaLocation'} в NS http://www.w3.org/2001/XMLSchema-instance, они полезны для расширения этого базового типа.) Они предназначены для атомарного, литерала и т. д. - все, что может быть/значением/атрибута в XML.

anySimpleType - это именно то, что подразумевает название - совершенно неограниченный простой тип. Он не может принимать атрибут «abc», поскольку простые типы не могут иметь атрибуты - это значения атрибутов. Если вы хотите, чтобы элемент принял список атрибутов, как я уже говорил выше, это задание «сложных» типов, а не «простых» типов.

Это описано в спецификации: https://www.w3.org/TR/xmlschema11-1/#Type_Derivation

+0

Спасибо за ответ; Я просто обновил этот вопрос с помощью примера отказоустойчивости. –

1

xsd:anyType может быть сложным или простым (xsd:anySimpleType). Только сложные типы могут иметь атрибуты.

Отношения между xsd:anyType и xsd:anySimpleType (и всех сложных типов) отчетливо видно на схеме XSD Рекомендации W3C в: 3 Built-in datatypes:

enter image description here