2.8 W3C对于属性的使用建议
XML元素可以接受属性,其属性具有如下特点:
XML元素的属性必须有属性值,属性值必须用引号引起来。
同一个XML元素里不能有多个同名属性。
XML元素里的多个属性之间没有先后顺序。
通过前面的介绍我们知道:对于只包含字符串内容的子元素,可以将其包含的信息简化为属性形式。例如如下代码:
如果将<isbn…/>等子元素写成属性形式,则可以简化为:
从简洁性角度来看,第二种写法要简洁得多。但W3C(World Wide Web Consortium,万维网联盟)组织认为,属性通常提供不属于数据组成部分的信息,如果属性值里包含的信息属于该实体本身,则应该使用子元素来指定该信息。也就是说,对于上面的情形,W3C推荐使用子元素来定义图书的isbn、book_name和price等信息。
简而言之,W3C推荐尽量使用子元素,而避免使用属性。W3C还给出了3份代码示例,这3份代码包含了完全相同的信息。
第1个例子中使用了date属性:
第2个例子中使用了<date…/>子元素:
第3个例子中使用了带子元素的<date…/>元素:
上面3种形式的XML代码中,第3种最复杂,但其所包含的信息也最清晰,具有极好的可读性,因此计算机程序可以非常方便地获取这些信息。
综合起来看,使用属性有如下几个缺点:
属性无法包含多个值,而通过为子元素再次扩展子元素则可以包含多个值。
属性无法描述树状结构,而子元素可以。
属性不易扩展(以适应未来的变化)。
属性难以阅读和维护。
因此,W3C的观点是,元数据(有关数据的数据)才应该存储为属性,而数据本身则应该存储为元素。应尽量使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息。看到这里,读者应该明白:为什么web.xml文件中总是采用子元素而不是属性来存储信息。
提示
虽然W3C组织在XML问题上是权威的,但由于使用属性存储信息比使用子元素来存储信息要简洁得多,如果大量使用子元素来存储信息,将导致XML文档增长速度很快,不用多久就会臃肿不堪,因此现在主流的Java框架更倾向于使用属性方式来存储信息。当然,实际开发中如果使用XML交换数据,依然应该优先考虑使用子元素来存储数据。