XML-схема: установка значения по умолчанию для сложного типа?

Допустим, я хочу настроить общий комплексный тип следующим образом:

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

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

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

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

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

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

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


person Adam Plumb    schedule 29.06.2009    source источник


Ответы (1)


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

<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

person 13ren    schedule 29.06.2009