XML 元素
元素命名
XML元素必须遵守以下的命名规则:
名字可包含字母、数字以及其他的字符
名字不能以数字或者标点符号开始
名字不能以字符“xml”(或者XML、Xml)开始
名字不能包含空格
当您“发明创造”元素名称时,请留意并遵循下面的简单的规则:
您可以使用除保留字外的任何名称,但是理想的做法是使名称具有描述性。使用下划线的名称也是不错的。
例子: <first_name>,<last_name>
应该在名称中避免"-"和"."。比方说,如果您将某个元素命名为"first-name",那么当您的软件试图从first段来提取名称时可能会出现混乱的局面。或者如果您将某个元素命名为"first.name",您的软件也许会认为"name"是"first"对象的一个属性。
元素名称可以是你希望的任何长度,但是也不要太夸张。名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>。
XML文档经常有一个对应的数据库,其中的域会对应XML文档中的某个元素。有一个实用的经验,即使用数据库的名称规则命名XML文档中的元素。
非英语的字母比如éòá也是合法的XML元素名,不过需要注意当软件开发商不支持字母时出现的问题。
不应在XML元素名称中使用":",这是由于它是用于被称作命名空间(namespaces)的保留字。
XML元素之间是有关系的
元素之间有父与子的关系。
为了理解XML的术语,我们需要了解XML之间的关系是如何命名的,以及元素的内容是如何被描述的。
下面是一个用XML文档描述的一本书:
<book><title>我的第一个XML</title><prod id="33-657" media="paper"></prod><chapter>XML 简介<para>HTML 的概念</para><para>XML 的概念</para></chapter><chapter>XML 的语法<para>元素必须拥有关闭标签</para><para>元素必须被正确地嵌套</para></chapter></book>
book(书)是根元素。Title、prod以及chapter是book的子元素。book是Title、prod以及chapter的父元素。Title、prod以及chapter是兄弟元素或者姐妹元素,这是因为它们都拥有相同的父母。
元素拥有内容
元素可以拥有不同的内容类型。
一个XML元素由(且包括)元素的开始标签起始,到(且包括)元素的结束标签终止。
一个元素可以拥有元素内容、混合型内容、简易内容或者空内容。元素也可以拥有属性。
在上面的例子中,book拥有元素内容,因为它包含了其他的元素。chapter拥有混合型内容,因为即包含文本,也包含其他的元素。para拥有简易内容(或文本内容),因为它仅包含文本。prod拥有空内容,因为它没有携带信息。
在上面的例子中,仅有prod元素拥有属性。名为id的属性的值为"33-657"。名为medea的属性的值为"paper"。
XML 属性
与HTML类似,XML元素也可以在开始标签中包含属性。
属性被用于提供关于元素的附加信息。
引号类型,"female" 还是 'female'?
属性值必须被引号所包围,不过单引号和双引号均可使用。比如某人的性别,person标签可以这样写:
<person sex="female">
或者这样也可以:
<person sex='female'>
注释:如果属性值本身包含双引号,那么有必要使用单引号包围它,就像这个例子:
<gangster name='George "Shotgun" Ziegler'>
注释:如果属性值本身包含单引号,那么有必要使用双引号包围它,就像这个例子:
<gangster name="George 'Shotgun' Ziegler">
使用元素还是属性
数据可被存储于子元素之中,或者在属性中也可以。
请看这些例子:
<person sex="female"> <firstname>Anna</firstname> <lastname>Smith</lastname></person>
<person> <sex>female</sex> <firstname>Anna</firstname> <lastname>Smith</lastname></person>
在第一个例子中,sex是一个属性。在第二个例子中,sex则是一个子元素。两个例子均可提供相同的信息。
没有规则可以告诉我们什么时候该使用属性,而什么时候该使用子元素。在XML中,我们应该尽量避免使用属性。
因使用属性而引起的一些问题:
属性无法包含多个值(子元素可以)
属性不易扩展(为未来的变化)
属性无法描述结构(子元素可以)
属性更难被编程代码处理
不易通过某个DTD对属性值进行测试 - DTD用来定义XML文档的合法元素
如果您使用属性作为数据的容器,那么就会造就难以阅读和维护的文档。请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
我们应该坚持这样的理念:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。