我的程序可以返回2个XML,如:
<RESPONSE>
<ERROR_ID>1</ERROR_ID>
<ERROR_MESSAGE>Parse error</ERROR_MESSAGE>
</RESPONSE>
<RESPONSE>
<ERROR_ID>2</ERROR_ID>
<ERROR_MESSAGE>Unexpected attribute</ERROR_MESSAGE>
</RESPONSE>
我尝试写一些XSD文件来验证它们是否正常。在这里我最终得到了:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified">
<xsd:element name="RESPONSE" type="Response"/>
<xsd:complexType name="Response">
<xsd:all>
<xsd:element name="ERROR_ID" type="ErrorId"/>
<xsd:element name="ERROR_MESSAGE" type="ErrorMessage"/>
</xsd:all>
</xsd:complexType>
<xsd:simpleType name="ErrorId">
<xsd:restriction base="xsd:positiveInteger">
<xsd:enumeration value="1"/>
<xsd:enumeration value="2"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ErrorMessage">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Parse error"/>
<xsd:enumeration value="Unexpected attribute"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
它验证正常,但我在想是否可以将错误ID与错误消息链接到不通过验证文件,其中错误id = 2将使用id = 1的错误消息:
<RESPONSE>
<ERROR_ID>2</ERROR_ID>
<ERROR_MESSAGE>Parse error</ERROR_MESSAGE>
</RESPONSE>
有一个很好的方法吗?我的程序当然会返回更多的错误ID和消息。
也许更好的问题是我是否应该期待从XSD进行这样的验证?
答案 0 :(得分:1)
XSD 1.0 无法根据其他元素的值限制一个元素的值。
XSD 1.1 可以使用xsd:assert
执行此操作,但是您应该重新考虑您的设计......
其他设计建议:
请勿查看XSD中的ERROR_ID
- ERROR_MESSAGE
配对。
将错误ID与错误消息连接:
<Error>1. Parse error</Error>
针对更具体的错误元素名称使用了固定属性:
<ParseError id="1" message="Parse error"/>
<UnexpectedAttributeError id="2" message="Unexpected attribute"/>
这些替代设计都不需要XSD 1.1。