2011-07-15 60 views
3

我想在我的XSD中有一个枚举,它指定了一组与错误代码和相关描述相对应的名称/值对。例如:XSD:有没有办法从名称/值对构建枚举?

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

我不认为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> 
+0

谢谢,Otavio。如果没有更好的办法,我会这么做......我只是希望有这样的事情。 ;) –

+0

XSD可以对单个元素定义限制,但是对于跨元素的限制没有支持(我知道),我想这超出了范围。但是,您可以通过建立约定并创建位置对应的单独限制来“伪造”,以便您可以使用相同的索引来检索密钥和值。它只是不看犹太教。 –

+0

由于无论如何都会以(Ruby或C#)代码处理一个条目的实际内容,所以我可能只是使用一个简单的约定,如带有管道符号分隔符的代码|描述。 Ruby或C#可以轻松地将其与字符串提取功能分开。我并不需要XML来理解语义。所以这真的不是一种方法的不好... –

4

如何使用XSD:注释/ 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> 
+0

xs * d *是错字还是故意的?有人建议编辑从xs更改为xsd,但我不知道这是否是一个错误。 – SuperBiasedMan

+0

我建议编辑,Visual Studio 2013提示这是一个错误。看到这篇文章:http://stackoverflow.com/questions/7787481/xsd-different-between-xsdelement-and-xselement – Oxymoron

+0

一般来说,这并不重要,并与你的XML声明有关。所以我建议编辑,因为此线程中的所有内容都使用“xs”而不是“xsd”。 – Oxymoron

相关问题