XSD: есть ли способ построить перечисление из пар имя / значение? - PullRequest
3 голосов
/ 16 июля 2011

Я хотел бы иметь перечисление в моем XSD, которое указывает набор пар имя / значение, соответствующих кодам ошибок и связанным описаниям. E.g.:

101  Syntax error
102  Illegal operation
103  Service not available

И так далее. Я могу построить простую структуру, event_result, чтобы держать это:

<xs:complexType name="event_result">
    <xs:sequence>
       <xs:element name="errorcode" type="xs:integer"/>
       <xs:element name="errormessage" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

Эта запись будет использоваться в отчете об исключении (как элемент "result"):

<xs:complexType name="event_exception">
    <xs:sequence>
        <xs:element name="event_id" type="xs:integer"/>
        <xs:element name="result" type="event_result"/>
        <xs:element name="description" type="xs:string"/>
        <xs:element name="severity" type="xs:integer"/>
    </xs:sequence>
</xs:complexType>

Теперь выгода в том, что я хотел бы определить глобальное перечисление со всеми известными кодами исключений и их описаниями. В идеале я хотел бы, чтобы это было частью XSD, а не отдельным файлом данных XML. Я не уверен, как определить перечисление, члены которого являются сложным типом, или как выполнить ту же задачу другим способом. В языке программирования это был бы простой двумерный массив, и он был бы прост в XML, но не уверен, как это сделать в XSD.

Мысли? Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 06 декабря 2012

Как насчет использования элемента xsd: annotation / xsd: appinfo для хранения сообщения об ошибке:

 <xs:simpleType name="event_result">
    <xs:restriction base="xs:string">
      <xs:enumeration value="101">
         <xs:annotation><xs:appinfo>Syntax error</xs:appinfo></xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="102">
         <xs:annotation><xs:appinfo>Illegal operation</xs:appinfo></xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="103">
         <xs:annotation><xs:appinfo>Service not available</xs:appinfo></xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
2 голосов
/ 16 июля 2011

Я не думаю, что xsd изначально поддерживает то, что вы хотите. Я видел реализации, подобные этой:

  <xs:simpleType name="event_result">
    <xs:restriction base="xs:string">
      <xs:enumeration value="101, Syntax error"/>
      <xs:enumeration value="102, Illegal operation"/>
      <xs:enumeration value="103, Service not available"/>
    </xs:restriction>
  </xs:simpleType>
...