XML文档的语义等价

时间:2016-02-11 00:50:02

标签: xml xsd semantics

假设我有两个简单的XML文件:

示例1

<parent name="Bob" gender="male">
    <child name="Steve" gender="male"></child>
    <child name="Stephanie" gender="female"></child>
</parent>

示例2

<parent name="Bob" gender="male">
    <child name="Stephanie" gender="female"></child>

    <child name="Steve" gender="male"></child>

</parent>

我正在尝试创建一个函数,该函数将输入两个表示XML的字符串,并且当且仅当它们在语义上等效时才返回true。在这种情况下,即使存在空格差异且子节点的顺序不同,XML文件仍然在语义上相同。

我目前有一个看似有效的解决方案,但我担心它可能有缺点,或者我可能已经推翻了这个问题。我目前的解决方案包括三个步骤。

  1. 从字符串中删除所有空格
  2. 按字母数字排序字符串
  3. 执行标准字符串相等性检查
  4. 这个解决方案似乎有效,但我想知道它是否有任何问题,或者我是否应该以另一种方式解决这个问题。

2 个答案:

答案 0 :(得分:2)

XML没有内在语义。语义通常是指含义,而作为数据格式,XML本身并不关心含义。

您真正想要的是两个XML文档之间的等价形式。为了能够应用&#34;标准字符串相等性检查&#34;你提一下,考虑把XML放到一个标准的 lexical 形式,例如由以下建议之一定义:

最后,如果文档根据相同的XML模式同时有效,则可以认为两个文档在语法而不是词汇级别上是等效的。

答案 1 :(得分:1)

XML中的重要内容只有您自己才能决定。史蒂夫和斯蒂芬可能是也可能不是同一个名字。最好不要使用&#34;语义和#34;这个词来定义你的等价规则。测试等价的一般方法是定义一个正规形式,将数据转换为正常形式,然后对标准化值进行简单的词法测试 - 这是一种完全合理的方法。但只有你可以决定适当的规范化功能是什么。