Я хочу ограничить значения списком примитивных типов схемы 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