在xml / xsd中表示逗号分隔的cData

时间:2017-04-16 05:11:58

标签: xml xsd

我必须在xml中表示逗号分隔的字符串。第一个字符串应对应于索引0,第二个字符串应对应于索引1等

这是我打算做的事情

选项1

<Representation>
<indexes>0,1,2</indexes>
<values><![CDATA[x,y,z]]>,![CDATA[x1,y1,z1]]>,![CDATA[x2,y2,z2]]></values>
</Representation>

选项2

<Representation>
<index id="0">x,y,z</index>
<index id="1">x1,y1,z1</index>
<index id="2">x2,y2,z2</index>
</Representation>

我更喜欢选项1,因为我可以用4行表示所有内容而不是选项2,这意味着让我们说要表示100个索引,选项1用两行完成,而在选项2中,线数会增加。选项1是否有效,我不确定?

3 个答案:

答案 0 :(得分:1)

两种XML设计的一个主要缺点是它们无法分别标记看似重要的数据项(x,y和z)。通常不应强迫XML的使用者进一步解析XML解析。

请改为尝试:

<Representation>
  <group>
    <item>x</item>
    <item>y</item>
    <item>z</item>
  </index>
  <!-- ... -->
</Representation>

补充说明:

  • 尝试选择适合域名而不是通用名称。
  • 我只是标记位置是多余的。
  • @separator上的group属性可能对某些用途有用。
  • 除非x,y和z打算有标记,否则不需要CDATA 您特别不希望将其解析为标记的字符 - 例如,如果你正在写一本关于XML的书并希望展示一本 明确的XML示例。

答案 1 :(得分:1)

在XML模式中,您可以使用列表类型来实现选项1,但每个字符串需要用空格分隔。

答案 2 :(得分:1)

使用CDATA是错误的。使用CDATA的唯一原因是避免必须转义特殊字符(&<)。您的数据不使用这些字符,因此CDATA不合适。许多XML处理技术没有向XML使用者透露CDATA边界,因此它不是指示逻辑结构的有用方法。

其次,需要非常小心地使用微语法(即属性或元素值中的任何类型的内部非XML语法)。在某些情况下,它可能很有用,但一般来说,与使用XML标记表示结构相比,您使收件人处理数据更加困难。问题是,您正在清楚地查看XML的各种设计选项,但您没有向我们提供任何关于您用来评估哪个选项“正确”的标准的线索。这通常会有一些易于写作,易于阅读,空间经济和变革的可能性,但不知道你想要优化的是什么,我们无法判断。

您已经标记了问题“xsd”,我们可能会猜测您的一个标准是您想要一个可以在XSD中准确描述的结构。如果是这种情况,那么你肯定希望避免任何比空间分隔列表更复杂的微结构,因为这是XSD能够描述的最多。