Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML—区分不同可能的子元素的首选方法 问题_Xml - Fatal编程技术网

XML—区分不同可能的子元素的首选方法 问题

XML—区分不同可能的子元素的首选方法 问题,xml,Xml,我有一个xml元素(shape),对于该元素,可能有不同的子元素(circle,square,…),它们本身都有不同的元素结构: 圆具有半径 正方形具有长度 因此,我的问题是如何表示shape的子元素的不同可能性。不仅从设计的角度来看,而且要记住将使用xml文件的软件 方法 第1版: 使用此版本时,radius标记似乎有点被放弃,但是结构是有意义的,因为在这种特定情况下(形状是一个圆)半径实际上是形状的一个属性 对我来说,一个缺点是引入了额外的属性type,该属性的名称不太容易选择(也可以

我有一个xml元素(
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>