XSD:有没有办法从名称/值对构建枚举?

时间:2011-07-15 22:41:50

标签: xsd enumeration name-value

我希望在我的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>

此记录将用于异常报告记录(作为“结果”元素):

<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 个答案:

答案 0 :(得分:4)

如何使用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>

答案 1 :(得分:2)

我认为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>