最佳实践:XML属性与XML元素 - 何时应该使用元素以及何时应该使用属性?

Rob*_*Rob 23 xml

哪个是这个XML数据的正确格式,它们是等价的还是两者之间的权衡?

1.

<sitemap>
  <category name="Animals">
    <section title="Dogs">
      <page url="/pics/greatdane.jpg" title="Great Dane"/>
    </section>
  </category>
</sitemap>
Run Code Online (Sandbox Code Playgroud)

2.

<sitemap>
  <page>
    <category>Animals</category>
    <section>Dogs</section>
    <title>Great Dane</title>
    <url>/pics/greatdane.jpg</url>    
  </page>
</sitemap>
Run Code Online (Sandbox Code Playgroud)

我用我的样式表实现了第一个例子,它似乎工作正常,但我不确定正确的形式应该是什么.

cle*_*tus 20

属性与元素的问题已经存在了十年的大部分时间,并且没有正确的答案.而是考虑差异,从而应该能够决定使用哪个:

  • 虽然您可以使用DTD或XML Schema对元素强制执行此操作,但只能有一个属性实例;
  • 属性是无序的.元素不是;
  • 如果没有子节点,属性会导致更简洁的语法.相比:

    <page name ="Sitemap"/>

至:

<page>
  <name>Sitemap</name>
</page>
Run Code Online (Sandbox Code Playgroud)

我知道我更喜欢哪一个;

  • 现在不太相关,因为DTD在XML Schema上的使用不多(如果有的话),但我还是会添加它:DTD允许属性的默认值(隐含),但没有元素的这种机制; 和
  • 作为elementss的元素可以拥有自己的子元素和属性.属性显然不能.

因此,从您的示例中,您的最内层<page>元素具有URL属性(尽管由于某种原因它是图像 - 可能是预览图标?如果是这样,属性名称会产生误导).一个网页只有一个URL(通常),所以这是一个可以作为属性的好例子.

另一方面,如果你想在页面上列出图像,那么显然可能有不止一个,所以你需要元素.

但是,最后,大多数时候没有正确或错误的答案,这在很大程度上是一种风格问题.


Ste*_*ner 12

这两个例子不相同,因为它们形成了不同的层次结构.站点地图是一个类别列表,如第一个示例吗?或者它是第二个例子的页面列表?

答案是与元素与属性问题正交.

关于元素与属性的问题:这是您转换为属性方法的第二个示例:

<sitemap>
 <page    
  category='Animals'
  section='Dogs'
  title='Great Dane'
  url='/pics/greatdane.jpg'
  /> 
</sitemap>
Run Code Online (Sandbox Code Playgroud)

上面和你的第二个案例是等价的.选择一个与另一个的一个考虑因素是基于您是否可以在将来修改架构.在url元素中添加属性,如下例所示,可能是一个向后兼容的更改.在属性方法中,语义相同的修改是不可能的,因为您不能将属性附加到属性.

<sitemap>
 <page>    
  <category>Animals</category>
  <section>Dogs</section>    
  <title>Great Dane</title>    
  <url nofollow="true">/pics/greatdane.jpg</url>
 </page> 
</sitemap>
Run Code Online (Sandbox Code Playgroud)