考虑以下(设计不佳?)XML 文档:
<?xml version="1.0" ?>
<command_result>
<param name="protocol_version" value="3"/>
<param name="player_state" value="navigator"/>
</command_result>
我想要做的是创建一个 XML 模式(XSD 格式),它根据value
属性的实际值指定属性的数据类型name
。
示例(伪代码):
if (param name = "protocol_version") then (param value type="xs:integer")
if (param name = "player_state") then (param value type="xs:string")
有没有办法在不修改源 XML 的情况下在模式文件中引入这样的条件语句?我查看了各种解决方案,但所有这些都需要以某种方式更改源(例如设置 xsi:type)。
编辑
我当前的架构:
<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="command_result">
<xs:complexType>
<xs:sequence>
<xs:element name="param" minOccurs="2" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<!-- the following line needs to be modified somehow -->
<xs:attribute name="value" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>