如果XML节点内容依赖于节点属性值,这是一种不好的做法吗?

时间:2013-10-08 14:07:42

标签: xml

我需要用XML描述查询。查询子句由值和比较类型组成。例如,让我们采用三种比较类型:相等,包含在范围和相似性中,其中整数定义相似程度。我可以像这样形容他们:

<Clause type="equal">42</Clause>
<Clause type="inside" lowerlimit="41" upperlimit="43"/>
<Clause type="similar" degree="2">Abcd</Clause>

或者我可以在特定于上下文的节点中描述值,如下所示:

<Clause type="equal">
  <Value>42</Value>
</Clause>

<Clause type="inside">
  <RangeLimit lowerlimit="41" upperlimit="43"/>
</Clause>

<Clause type="similar">
  <Similarity degree="2">Abcd</Similarity>
</Clause>

我发现第一个例子更具人性化,解析器代码更简洁。还有一个事实是我有9种类型的子句只接受值(如相等),只有两种具有附加参数。因此,如果我选择第二个选项,那么生成的XML将会变得非常大,并且大小在我正在解决的问题中很重要。

另一方面,我不确定我喜欢属性之间的关系,第二个例子更具描述性和统一性。

第一选择是否有任何可能的影响?

1 个答案:

答案 0 :(得分:1)

依赖于属性的元素很难在模式中描述。

如果您必须在您提供的两者之间进行选择,那么从编程角度来看,第二个更容易使用。在两者中的任何一个中,您都不能轻易地限制混合两种形式的<Clause>元素:

<Clause type="similar">
    <RangeLimit lowerLimit="42" upperLimit="43"/>
</Clause>

以下是一些替代方案:

<Equal>42</Equal>
<Inside lowerLimit="42" upperLimit="43"/>
<Similar degree="2">Abcd</Similar>

<Clause>
    <Similar degree="2">Abcd</Similar>
</Clause>