我正在重建一些XML feed,所以我正在研究何时使用元素以及何时使用XML属性。
有几个网站称“数据属于元素,元数据属于属性。”
那么,两者有什么区别?
我们来自W3Schools:
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
日期是否应作为note元素的属性保留?或者进入自己的元素更有意义吗?
<date>12/11/2002</date>
或者,将它分成多个元素是否有意义?
<date>
<day>12</day>
<month>11</month>
<year>2002</year>
</date>
答案 0 :(得分:2)
在“数据进入元素,属性中的元数据。”之后,我会将Date作为子元素。您不需要将其分解为日,月和年,因为我认为实际上有一种方法可以在XSD中指定元素必须是Date类型。我认为这里的“元数据”示例可能是noteID
字段,也可能是noteType
。例如:
<note id="NID0001234" type="reminder">
<date>2002-11-12</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
更新:正如许多其他人所指出的那样,它可能是相当主观的。我尝试将两者分开使用。数据通常会呈现给用户,元数据将控制演示文稿,并可能在内部用于其他目的。但总有例外......
答案 1 :(得分:2)
数据和元数据之间的区别几乎完全是主观的。一个人的数据是另一个人的元数据。 “属性中的元数据”规则源于标记世界,根据经验法则,如果删除所有标记,只留下文本,它应该是一个合理的文档。这意味着属性应该是可丢弃的,并且元素必不可少。如果您在一个不理解的浏览器中显示XML,它将以这种方式处理。
但是,您的XML(以及目前大多数XML)可能不会在不理解的浏览器中显示给用户,因此您可以使用更好的规则来设计XML。
例如,您可以拥有多个具有相同名称但不具有多个属性的元素。并且空格在属性中被忽略,但在元素中不被忽略。
答案 2 :(得分:1)
在决定是否对一段数据使用属性或元素时,使用的原则有不同的观点。例如,请参阅this old article from IBM,其中列出了一系列建议的原则,然后用一个巨大的警告来装饰整篇文章,其中说“有很多例外,这些原则并不是规定性的”(基本上) 。
我认为最重要的是内部一致。在你自己的世界里保持一致,无论多么大。你的“世界”可能是一个单一的模式 - 你应该在你的方法中保持一致。该模式中的每个元素都应该在哲学上保持一致。或者您的世界可以是一组相关模式,也可以是特定公司发出的所有XML文档,甚至是行业或技术组使用的所有XML模式。
现在,关于您提供的样本:
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend! Remember what happenned last time you forgot!!!</body>
</note>
......这似乎内部不一致,因为只有一个数据被分解出来,并且似乎没有充分的理由这样做。
如果所有项都是属性或者所有项都是元素,那就更好了。一个例外:长身体元素应该总是一个元素。这对我来说是对的:
<note date="12/11/2002" to="Tove" from="Jani" heading="Reminder">
<body>Don't forget me this weekend! Remember what happenned last time you forgot!!!</body>
</note>
将正文放入属性会损害可读性,并建议将正文放入元素中。
请记住,空格可以在属性值中折叠(来源:我引用的IBM文章);由此产生的硬性规则是,如果空白是有意义的,那么你应该使用一个元素。
现在,如果xml片段中的标题类似于电子邮件主题,我可能会将其分解为一个元素,因为主题可能很长。
至于关于日期月/日/年的问题,是的,如果您需要在处理XML的工具中轻松访问这些单独的数据,请将这些问题考虑在内。如果你明白我的意思,使用xpath语句搜索2009年之前的所有笔记会更容易,这些语句不需要进行字符串解析,然后进行字符串到数字的转换。另一方面,如果您对XML的使用不要求您选择或搜索这些单独的数据(月,日,年),那么请将它们合并为与原始数据一样的人类可读形式。
tl;博士:几乎没有坚定的规则。只要您对元素和属性的使用是一致的,其他开发人员和工具就很容易理解和使用。