XML—区分不同可能的子元素的首选方法 问题
我有一个xml元素(XML—区分不同可能的子元素的首选方法 问题,xml,Xml,我有一个xml元素(shape),对于该元素,可能有不同的子元素(circle,square,…),它们本身都有不同的元素结构: 圆具有半径 正方形具有长度 因此,我的问题是如何表示shape的子元素的不同可能性。不仅从设计的角度来看,而且要记住将使用xml文件的软件 方法 第1版: 使用此版本时,radius标记似乎有点被放弃,但是结构是有意义的,因为在这种特定情况下(形状是一个圆)半径实际上是形状的一个属性 对我来说,一个缺点是引入了额外的属性type,该属性的名称不太容易选择(也可以
shape
),对于该元素,可能有不同的子元素(circle
,square
,…),它们本身都有不同的元素结构:
具有圆
半径
具有正方形
长度
shape
的子元素的不同可能性。不仅从设计的角度来看,而且要记住将使用xml文件的软件
方法
第1版:
使用此版本时,radius
标记似乎有点被放弃,但是结构是有意义的,因为在这种特定情况下(形状
是一个圆
)半径实际上是形状
的一个属性
对我来说,一个缺点是引入了额外的属性type
,该属性的名称不太容易选择(也可以是“kind”…)。
然而,一个重要的优点是软件立即知道存在形状
的哪些属性,这只需要查找圆
的属性(在某些规范中是固定的)
问题:
如果一次只有一个可能的子元素,并且每个子元素本身都包含子元素,那么区分不同可能的子元素的首选方法是什么?
您是否有任何经验/您是否看到这两种方法或另一种方法的优点和缺点?如果必须这样做,我将在shape
元素的xml模式定义中使用带有选项的第一种类型方法。因此,可以很容易地引入新的形状
这样,您将能够清晰地定义每个元素,同时也可以验证每种类型的形状
带有圆形
和方形
的形状的Xsd片段:
.....
现在可以根据需要灵活地定义每个类型circleType
、squareType
、和triangleType
,验证非常简单和严格。当然,您知道如何使用自己的有效元素集定义每个类型
由于使用了choice
,它只允许将一种形状类型作为子元素添加到shape
元素中。如果您想要更多的形状,您可以在需要的情况下将多重性(1+)设置为shape
元素
如果您选择另一种方法(#2),则可能会引入/扩展一个新的形状,无论是否更改xml模式定义
。但是,验证将是困难的
希望这有帮助。形状在任何时候都只包含一种类型吗?或者可以有许多侧面形状?选项3:仅1
@Rao一次只包含一种类型@wero这也带来了提取当前元素的问题。你只知道会有一个圆,circle
,square
。。。但是如果不放弃订单,你怎么知道是哪一个呢?此外,这可能会在shape
的父项范围内引入名称冲突。@a_客人,感谢您的澄清,请检查答案并查看是否需要更多信息。
<shape>
<circle>
<radius unit="meter">1</radius>
</circle>
</shape>
<shape type="circle">
<radius unit="meter">1</radius>
</shape>