是否可以为所有节点名称具有相同名称且只能由属性值标识的 XML 编写 XSD 模式?
示例 XML 数据:
<root name="func">
<param name="User name">John Doe</param>
<param name="Home address">
<param name="Street 1">Some Street</param>
<param name="number">58</param>
<param name="geo">
<param name="value 1">1</param>
<param name="value 2">
...
</param>
</param>
</param>
<param name="Phone">
<param name="type">cell</param>
<param name="phone number">888 333 777</param>
</param>
</root>
不幸的是,我无法更改 XML 结构并将标记名称设置为与“名称”属性相同的值,因为它可能包含空格字符甚至一些特殊字符,例如感叹号等。
重要的是,每个嵌套节点也可以是复合类型,其子节点将具有类似的结构,元素名称为“param”和标识它们的“name”属性。
当然,节点子节点的结构应该取决于它的“name”属性,因此,例如,当我们将“电话号码”标签移动到“家庭地址”节点时,我们的模式应该将此类 XML 标记为无效。
XSD Schema 验证失败的无效 XML 示例:
<root name="func">
<param name="User name">John Doe</param>
<param name="Home address">
<param name="Street 1">Some Street</param>
<param name="number">58</param>
<param name="geo">
<param name="value 1">1</param>
<param name="value 2">
...
</param>
</param>
<param name="phone number">888 333 777</param> <!-- at this line validation should fail -->
</param>
<param name="Phone">
<param name="type">cell</param>
</param>
</root>