Схема XML: установка значения по умолчанию для complexType? - PullRequest
9 голосов
/ 29 июня 2009

Допустим, я хочу настроить общий 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" />

и я пытаюсь удалить избыточность настолько простым способом, насколько это возможно.

1 Ответ

19 голосов
/ 30 июня 2009

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

<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

...