1

是否可以为所有节点名称具有相同名称且只能由属性值标识的 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>
4

0 回答 0