Ограничьте значение элемента примитивными типами схемы XML в XSD - PullRequest
1 голос
/ 27 мая 2011

Я знаю, что вы можете ограничить значение элемента, выполнив следующее.

<xs:element name="DataType">
    <xs:simpleType>
        <xs:restriction base="???">
            <xs:enumeration value="integer" />
            <xs:enumeration value="string" />
            <xs:enumeration value="boolean" />
        </xs:restriction>
    </xs:simpleType>
<xs:element>

Но что если я захочу ограничить значения списком примитивных типов схемы XML, таких как xs: integer, xs: string, xs: boolean и т. Д. Что должно иметь атрибут @base ограничениястихия быть?

Я хочу сделать что-то вроде ...

xs: integer

1 Ответ

2 голосов
/ 28 мая 2011

Я хочу ограничить значения списком примитивных типов схемы XML, таких как xs: целое число, xs: строка, xs: логическое значение и т. Д.

Вы имеете в виду, что выхотите, чтобы значения были списком определенного типа, или вы хотите иметь список типов и разрешить этому значению иметь любой тип, упомянутый в этом списке?

Для первого используйте <xs:list>для второго используйте <xs:union>.

Как использовать <xs:union>

Объединения объявляются просто путем перечисления соответствующих (простых) типов в атрибуте memberTypes.Вы также можете использовать именованные простые типы, определенные в этом файле схемы.

<xs:element name="DataType">
    <xs:simpleType>
        <xs:union memberTypes="xs:integer xs:boolean"/>
    </xs:simpleType>
<xs:element>

Это позволяет использовать следующий код

<DataType>42</DataType>
<DataType>true</DataType>

Как использовать <xs:list>

Списки объявляются аналогично объединениям, но вы не можете напрямую объединять несколько типов в одном и том же списке (хотя возможно использование типа, полученного объединением, в качестве базового типа типа списка).

<xs:element name="DataType">
    <xs:simpleType>
        <xs:list itemType="xs:integer"/>
    </xs:simpleType>
<xs:element>

Это позволяет использовать следующий вид кода

<DataType>42</DataType>
<DataType>2 18 10794</DataType>

Символы разделителя списка являются фиксированными: элементы должны быть разделены пробельным символом.

Изменить для добавления комментария ниже

Извинитеза недопонимание вашего вопроса.Нет встроенного типа данных, в котором перечислены имена типов, поэтому вам нужно перечислить все имена в перечислении.

Если вы используете перечисление, вам на самом деле не нужно использовать какие-либо специальные (более ограниченные) базовый тип, потому что только действительные значения перечислены.Обычный старый xs:string достаточно хорош для атрибута base.Точно говоря, все имена встроенных типов являются квалифицированными именами (или неколонизированными именами, если префикс пространства имен не учитывается), поэтому наиболее подходящий базовый тип должен быть xs:QName или xs:NCName.Вы можете использовать эти типы, если хотите пропустить перечисление и только хотите убедиться, что содержимое может синтаксически быть допустимым именем для типа.

Типы данных встроенной схемы (и их деривационная иерархия) видно из этого изображения http://www.w3.org/TR/xmlschema-2/#built-in-datatypes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...