Является ли xs: выбор эквивалентом перечисления C ++?

У нас много сериализации, выполненной через MS XML 4. Когда мы сериализуем перечисления C ++, мы используем таблицу для перевода каждого возможного значения в строку, и они сохраняют эту строку в качестве значения атрибута. Когда мы десериализуем, мы читаем это значение атрибута, сравниваем его со всеми элементами в таблице и извлекаем соответствующее значение перечисления. Если мы не сможем найти ошибку, мы вызываем ошибку.

Чтобы облегчить создание XML-файлов внешними программами, мы опубликовали XML-схемы для всех интересующих типов данных. Атрибуты для перечислений определяются следующим образом:

<xs:complexType>
    //other fields here
    <xs:attribute name="Color" type="xs:string"></xs:attribute>
</xs:complexType>

Он работает, но не содержит определений для возможных значений строк. Как я могу добавить возможные значения в это определение? Использую ли я xs: выбор для этого?

xml,xml-serialization,xsd,

3

Ответов: 2


3

Нет, xs:choiceпредоставляет схему с информацией, которая гласит: «В этом месте вы можете иметь то или иное, но не комбинацию»; Вы можете узнать больше о xs:choiceздесь .

Чтобы создать перечисление, вам нужно определить их как часть ограниченного типа на основе xs:string.

Например:

<xs:simpleType name="ColorType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="white"/>
    <xs:enumeration value="black"/>
    <xs:enumeration value="blue"/>
  </xs:restriction>
</xs:simpleType>

Затем вы можете использовать этот тип, как и любой другой:

<xs:complexType>
  <xs:attribute name="Color" type="ColorType" />
</xs:complexType>

Для получения дополнительной информации об использованииxs:restriction и других элементах и ??атрибутах XSD посетите веб-сайт www.w3schools.com . Они имеют хорошие справочные руководства и руководства по многим темам, связанным с сетью, таким как XHTML, XSLT, XPath и XSD (а также javascript и AJAX).


0
<xs:complexType>
  //other fields here
  <xs:attribute name="Color">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="RED"/>
        <xs:enumeration value="BLUE"/>
        <xs:enumeration value="GREEN"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
</xs:complexType>

Вы также можете создать это как внешний тип:

<xs:complexType>
  //other fields here
  <xs:attribute name="Color" type="Color"/>
</xs:complexType>
<xs:simpleType name="Color">
  <xs:restriction base="xs:string">
    <xs:enumeration value="RED"/>
    <xs:enumeration value="BLUE"/>
    <xs:enumeration value="GREEN"/>
  </xs:restriction>
</xs:simpleType>

<xs:choice>что-то другое. Имена в XML-схеме неинтуитивные и несколько вводят в заблуждение. Выбор означает один из содержащихся элементов.

XML, XML-сериализации, XSD,
Похожие вопросы
Яндекс.Метрика