约定和注意事项
投笔从戎 @ 战争研究


前言
绝对连接和相对连接
网页不能正常显示
文件名、目录名和URL
空白和换行
编码和格式
特殊字符
字母大小写
标记和空标记
属性和属性的值
前言
    本文是为"战争研究"网站的制作者和合作者们编写的,总结了在使用XML建站时的一些注意事项和内部约定,其中一部分内容已在其他文章中提及。
绝对连接和相对连接
    关于绝对连接和相对连接,需要编写网页的人认真对待,要同时考虑到资料之间在逻辑上的关系和未来可能发生的网站结构调整。
    一般来说"上一页"、"下一页"、"回目录"要写成相对连接,比如"回目录"是"./index.xml";资料中附的图片是资料的一部分,一般也存放在同一目录或同一目录的images子目录下,也要使用相对连接,比如"./images/1.jpg"。
    对于xsl、css和站点logo的地址,在网站中的位置固定,与特定的资料无关,而且在任何位置的网页都要能方便的找到它们,同时要考虑到我们的域名以后会改变,应该写成以"/"开头的绝对路径,也就是从站点根目录开始的路径,比如"/xsl/article.xsl"。
    这样一来,如果把http://studyofwar.51.net/history/civilwar目录下的资料全体移动到http://www.studyofwar.com/history/west/usa/civilwar目录下,资料网页中的连接就完全不用修改。
    同样,在使用"参考资料"这种连接,也就是<link type="reference">XXX</link>时,要仔细考虑应使用哪种连接,如果随意使用的话,日后就会在网站中出现大量的"死连接"。
网页不能正常显示
    当IE在读取xml网页时,如果发现有错误,它处理的方式是直接把错误原因和位置报告给用户,这也是xml规范规定的。
    因此xml网页不能正常显示时,出现在屏幕上的不是乱码而是错误报告,不要急,看一看它说什么。
    目前大家可能经常碰到的错误有两种:
    一是找不到xsl文件,检查一下是不是改动了样式单连接"/xsl/article.xsl",是不是把article.xsl存到文档说中的指定地点。
    二是xml文件中有语法错误,比如少写了一个结束标记或属性的值没加引号等等,IE会告诉你为什么错,错误在第几行,按照它的提示修改。《如何使用XML编写底层网页》的"核心知识"要仔细阅读,可以少走弯路。
文件名、目录名和URL
    Microsoft Windows 系统对文件名和目录名没有太多的限制,多数人已经习惯了在给文件和文件夹起名字时,随意的使用空格、中文或标点符号。这些"非标准"的字符不能直接出现在URL里,而需要经过一些转换,比如半角空格要写成"%20",中文写成"%"开头的编码。如果网站建在 Microsoft Windows 系统上,用 IIS 做 Web Server,这些复杂的文件名和目录名不会造成任何问题,可以直接把它们写在URL里,IIS 会自动对你的URL做必要的转换。但是其他的 Web Server 就不那么令人放心,有些有能力处理含有"非标准"字符的URL,有的则需要手工转换URL中的空格和中文。
    理论上来说,URL是不区分大小写的,如果服务器是 Microsoft Windows 系统,的确不用关心大写字母还是小写字母,只要拼写对了就行;但是 Unix/Linux 操作系统是大小写敏感的,必须保证URL中的文件名和目录名的拼写和大小写都和服务器上的实际文件名和目录名一致,才能找到指定的网页或文件,为了减少可能发生的错误,Unix服务器的管理员一般都会建议文件名、目录名和URL全部使用小写字母,我们目前使用的 51.net 空间就是这样。
    因此为了减少错误和避免不必要的麻烦,我们按惯例约定,URL中只使用小写字母;文件名和目录名只能由英文小写字母和下划线("_")组成,不能包含空格、中文、标点符号或其他特殊字符。
空白和换行
    这里说的空白包括空格和制表符(Tab);换行包括回车符和换行符,如果你使用Windows操作系统,换行就表示键盘上的"Enter"键。
    按照W3C发布的xml规范,一个xml文件的第一行必须用指令<?xml version="1.0" ... ?>开头,在这个指令前面不能有任何空白和换行。在目前版本的IE中,这个规定不是必须的,第一条指令前面有空白和换行时网页也能正常显示,但是我们还是要求大家遵守这条规定。一方面是因为Microsoft正在尽可能的向规范靠拢,新版本的浏览器有可能会要求网页遵守这条规定;另一方面,我们以后可能会使用到其他的xml处理器,还是按W3C规范说的去做比较稳妥。
    写在xml网页中的空白和换行在显示的时候,表现和html中的相同:单独一个空格、制表符或换行都显示成一个空格;连续的多个空格、制表符和换行也当成一个空格显示。因此尽管你可以用回车键把<text></text>标记中的文本分成几段,IE还是会把一个text标记中的文字作为一个段落连续的显示出来,文本折行也不是在你输入回车符的地方,而是在显示区域的最右端,具体位置会随着IE窗口的大小自动调整。如果文字有若干段落,应该每段使用一个text标记,quote标记也是这样。
    不论编写是程序还是网页,按照语句的逻辑层次在源代码加入适当的缩进都是好习惯,但我们定义的xml应用很简单,不会出现元素深层嵌套的现象,因此在源代码的排版方面不做过多的要求,只要自己看着舒服就行了。
编码和格式
    我们约定统一使用GB2312字符集来保存xml网页,于是每个xml网页的第一行都写成这样:<?xml version="1.0" encoding="gb2312" ?>。相应的在保存xml文件时,也应该使用GB2312编码存成纯文本文件。如果你使用简体中文版的Windows系统,这是默认的字符集,多数文本编辑器不需要你做任何设置就会自动使用GB2312字符集保存纯文本文件,但是要小心Windows附带的"写字板",它会试图把你的文件存成.doc或.rtf格式,保存时不要忘了改成纯文本格式。
特殊字符
    5个特殊字符需要特殊处理 & < > " ' 如果不作为标记或属性的一部分而出现在普通文本中,需要分别转换成 &amp; &lt; &gt; &quot; &apos; 其中的分号是必须的,而且不能使用中文的全角分号。
字母大小写
    XML是区分大小写的,<text>和<TEXT>被认为是不同的标记,为了避免可能出现的错误,我们约定所有的标记和属性都使用小写。
标记和空标记
    所有的标记都是和它的结束标记一起成对出现的,单个的标记或结束标记被认为是错误。
    标记可以嵌套,但不能重叠,<text><note></note></text>是合法的,<text><note></text></note>是非法的。
    一个标记和它的结束标记之间可以有文本或其他标记,也可以什么都没有,后一种情况可以简写成这样:<link href="test.xml" type="next" />,和<link href="test.xml" type="next"></link>是等价的。
属性和属性的值
    在同一个标记中不允许出现两个或两个以上的同名属性。
    属性的值必须用引号括起来,type="next"是合法的,type=next是非法的。