XML 文件名不一定以 .xml 结束, 实际上 XML 文档可能根本不是一个文件。它可以是一个数据库记录、文件片段、永远不会写入磁盘的内存中的临时字节流,或者不同文件的组合 。但是,很多 XML 文档确实存放在硬盘或其他固定介质上。这样就有必要快速地识别 XML 文档。本文总结了 XML 文档使用的常见文件扩展名和 MIME 媒体类型。有时候,随大流要比发明新的约定更简单。
至少从 20 世纪 60 年代起,就已经使用三字符的扩展名表示文件类型了,并且一直沿用至今。有些操作系统使用四个、两个甚至一个字符作为扩展名,而不是三个,但基本的格式仍然是文件名-句点-扩展名 。在不同的系统之间转移文件时,文件名和扩展名常常是随着一起移动的唯一元数据。
如果在文件系统中存储 XML 文档,应使用标准的文件扩展名。这样更便于人们发现、识别和处理 XML 文件。到目前为止,最常用的扩展名是 .xml,但是还有一些用于 XML 的特定子集,如表 1 所示。
扩展名 | 含义 |
.xml | 一般 XML 文档 |
.ent | 解析实体,文档片段 |
.dtd | 文档类型定义(DTD) |
.rdf | 资源描述框架(RMF)XML 语法 |
.atom | Atom 连锁提要 |
.owl | Web 本体论语言 |
.xhtml | 可扩展超文本标记语言(XHTML) |
.xsd | W3C XML Schema Language 模式 |
.xsl | XSL 转换 |
.fo | XSL 格式化对象 |
.rng | RELAX NG XML 语法 |
.sch | Schematron 模式 |
.svg | 可缩放向量图形(SVG) |
.rss | RSS(真正简单的连锁、丰富站点摘要或 RDF 站点摘要——取决于缩写定义者)连锁提要 |
.plist | Apple 的专有列表格式 |
Web 服务器提供的资源不一定在文件系统中。但是,如果资源是 XML 文档,仍然要选择适当的具体类型,保证这些资源 URL 最后以上述扩展名结束。
|
|
Web 服务器传输文件时不仅仅发送文件名和内容,在 HTTP 头部中还要发送大量的元数据,如清单 1 所示:
|
注意最后一行的 Content-Type
头。这个头的值,即 application/xhtml+xml
, 是一种 MIME 媒体类型(可能还包括可选的文档字符集信息)。Web 浏览器和其他客户机使用这些元数据决定如何处理该文件,比如判定本身能否显示它还是要传递给帮助器程序。 MIME 类型还用于其他场合,包括电子邮件和少数实验性的操作系统,特别是 BeOS。 Linux 和其他 UNIX® 系统也使用 MIME 类型,但通常是将文件名映射到 MIME 类性,而不是直接用 MIME 类型标记文件。MIME 类型的真正实际应用是在 Internet 上。
一般 XML 文档的基本内容类型是 application/xml 。类型 text/xml 也是注册过的,但是这种类型已经被废止了 ,因为很不幸地与 HTTP 协议的其他部分有冲突。(使用 text/xml 表示文档用 ASCII 编码,即使文档的 XML 声明指定了其他编码。) 其他注册的基本 MIME 类型包括:
- application/xml-dtd 用于 DTD
- application/xml-external-parsed-entity 用于文档片段
对于更具体的 XML 格式类型,惯例是使用类型 application/ foo+xml ,其中的“foo”表示具体的 XML 词汇表,如 application/rdf+xml (RDF)、application/xhtml+xml (XHTML)、application/svg+xml (SVG),依次类推。这样,一般 XML 处理程序就能识别出 XML,专门格式的处理程序也能识别相应的格式。表 2 列出了可能遇到的一些媒体类型。
媒体类型 | 文档格式 |
image/svg+xml* | SVG |
application/atom+xml* | Atom 摘要连锁格式(Atom Feed Syndication Format) |
application/mathml+xml* | 数学标记语言 |
application/beep+xml | 块扩展交换协议(Blocks Extensible Exchange Protocol) |
application/cpl+xml | 呼叫处理语言(Call Processing Language) |
application/soap+xml | SOAP 消息 |
application/epp+xml | 可扩展配置语言(Extensible Provisioning Protocol) |
application/rdf+xml | RDF XML 语法 |
application/xhtml+xml | XHTML |
application/xop+xml | XML 二进制优化打包(XML-binary Optimized Packaging) |
application/xslt+xml* | XSLT 样式表 |
application/xmpp+xml | 可扩展消息传递和到场协议(Extensible Messaging and Presence Protocol) |
application/voicexml+xml* | VoiceXML |
* 正在注册之中
您 不能为创建的每种新格式都凭空挑选一种 MIME 媒体类型。必须在正式规范(通常是 IETF 请求注解)上发布新类型并向 Internet Assigned Numbers Authority (IANA) 注册。但是无需注册即可发布实验性子类型。这类子类型必须以 x- 开始。比如,如果需要为 XML 1.1 Bible 一书中我发明的电视清单列表发明一种新的自定义类型,我可以将其称为 application/x-tvml+xml 。application 类型告诉处理程序将该文件视作非 ASCII 数据。子类型后面的 +xml 告诉处理程序这是 XML,x- 则警告说这是未注册的类型,tvml 说明是什么类型的数据。
|