2009-06-29 2 views
8

Скажем, я хочу, чтобы настроить общий ComplexType так:XML-схема: установка значения по умолчанию для complexType?

<xs:complexType name="button"> 
    <xs:sequence> 
     <xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="href" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="label" type="xs:string" minOccurs="0" maxOccurs="1"/> 
    </xs:sequence> 
</xs:complexType> 

И я хочу, чтобы ссылаться на эту ComplexType в различных местах в моем файле схемы следующим образом:

<xs:element name="someButton" type="button" /> 

Возможно ли мне установить значения по умолчанию для подэлементов кнопки через элемент someButton? (Т.е., если я хочу someButton иметь метку по умолчанию «Go» или HREF по умолчанию «index.html»)

В принципе ... сейчас у меня есть что-то вроде

<Field Name="State" DataSourceField="State" /> 

и я m пытается удалить избыточность как можно проще.

ответ

18

Нет, только для простых значений. Но, возможно, вы можете использовать их для выполнения того, что хотите, указав значения по умолчанию для всех простых частей вашего сложного типа. Однако он лучше работает для атрибутов, чем для элементов, которые у вас есть (поскольку «значения атрибута по умолчанию применяются, когда отсутствуют атрибуты, а значения элементов по умолчанию применяются, когда элементы пусты» - см. Ниже). Атрибуты сами по желанию по умолчанию:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="button" type="button"/> 
    <xs:complexType name="button"> 
    <xs:attribute name="id" type="xs:string"/> 
    <xs:attribute name="href" type="xs:string" default="index.html"/> 
    <xs:attribute name="label" type="xs:string" default="Go"/> 
    </xs:complexType> 
</xs:schema> 

<button id="1"/> 

по умолчанию значения обоих атрибутов и элементов объявляются с помощью атрибута по умолчанию, хотя этот атрибут имеет несколько иное последствие в каждом конкретном случае. Когда атрибут объявляется значением по умолчанию, значение атрибута представляет собой любое значение, отображаемое как значение атрибута в экземпляре документа; если атрибут не отображается в документе экземпляра, процессор схемы предоставляет атрибуту значение, равное значению атрибута по умолчанию. Обратите внимание, что значения по умолчанию для атрибутов имеют смысл только в том случае, если сами атрибуты являются необязательными, и поэтому это ошибка, указывающая как значение по умолчанию, так и значение, отличное от значения опционального для использования.

Процессор схемы обрабатывает элементы по умолчанию несколько иначе. Когда элемент объявляется со значением по умолчанию, значение элемента представляет собой любое значение, отображаемое как содержимое элемента в документе экземпляра; если элемент появляется без какого-либо содержимого, процессор схемы предоставляет элементу значение, равное значению атрибута по умолчанию. Однако, если элемент не отображается в документе экземпляра, процессор схемы вообще не предоставляет элемент. Таким образом, различия между значениями по умолчанию элемента и атрибута могут быть указаны как: Значения атрибутов по умолчанию применяются, когда атрибуты отсутствуют, а значения элементов по умолчанию применяются, когда элементы пусты. [курсив]

http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

Смежные вопросы