识别 XML 文档

 
XML 文件名不一定以 .xml 结束, 实际上 XML 文档可能根本不是一个文件。它可以是一个数据库记录、文件片段、永远不会写入磁盘的内存中的临时字节流,或者不同文件的组合 。但是,很多 XML 文档确实存放在硬盘或其他固定介质上。这样就有必要快速地识别 XML 文档。本文总结了 XML 文档使用的常见文件扩展名和 MIME 媒体类型。有时候,随大流要比发明新的约定更简单。

至少从 20 世纪 60 年代起,就已经使用三字符的扩展名表示文件类型了,并且一直沿用至今。有些操作系统使用四个、两个甚至一个字符作为扩展名,而不是三个,但基本的格式仍然是文件名-句点-扩展名 。在不同的系统之间转移文件时,文件名和扩展名常常是随着一起移动的唯一元数据。

如果在文件系统中存储 XML 文档,应使用标准的文件扩展名。这样更便于人们发现、识别和处理 XML 文件。到目前为止,最常用的扩展名是 .xml,但是还有一些用于 XML 的特定子集,如表 1 所示。

表 1. 常见的 XML 文件扩展名

 

扩展名 含义
.xml一般 XML 文档
.ent解析实体,文档片段
.dtd文档类型定义(DTD)
.rdf资源描述框架(RMF)XML 语法
.atomAtom 连锁提要
.owlWeb 本体论语言
.xhtml可扩展超文本标记语言(XHTML)
.xsdW3C XML Schema Language 模式
.xslXSL 转换
.foXSL 格式化对象
.rngRELAX NG XML 语法
.schSchematron 模式
.svg可缩放向量图形(SVG)
.rssRSS(真正简单的连锁、丰富站点摘要或 RDF 站点摘要——取决于缩写定义者)连锁提要
.plistApple 的专有列表格式

Web 服务器提供的资源不一定在文件系统中。但是,如果资源是 XML 文档,仍然要选择适当的具体类型,保证这些资源 URL 最后以上述扩展名结束。

 



 

 

MIME 媒体类型

Web 服务器传输文件时不仅仅发送文件名和内容,在 HTTP 头部中还要发送大量的元数据,如清单 1 所示:


清单 1. 元数据

				
HTTP/1.1 200 OK
Date: Sun, 23 Jan 2005 18:21:33 GMT
Server: Apache/2.0.52 (Unix) mod_ssl/2.0.52 OpenSSL/0.9.7d
Last-Modified: Sun, 10 Oct 2004 16:17:21 GMT
ETag: "3e06d-16a05-2dbc8640"
Accept-Ranges: bytes
Content-Length: 92677
Content-Type: application/xhtml+xml

 

注意最后一行的 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 列出了可能遇到的一些媒体类型。

表 2. XML MIME 媒体类型

 

媒体类型 文档格式
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+xmlSOAP 消息
application/epp+xml可扩展配置语言(Extensible Provisioning Protocol)
application/rdf+xmlRDF XML 语法
application/xhtml+xmlXHTML
application/xop+xmlXML 二进制优化打包(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+xmlapplication 类型告诉处理程序将该文件视作非 ASCII 数据。子类型后面的 +xml 告诉处理程序这是 XML,x- 则警告说这是未注册的类型,tvml 说明是什么类型的数据。

text/xsl

捏造 MIME 类型最为声名狼藉的例子是 Microsoft® Internet Explorer 用于标识 XSLT 样式表的 text/xsl 伪类型,该类型纯属 Microsoft 的想像。IANA 没有注册过这样的类型,也不可能会注册,因为 XSL 规范现在按照 RFC 3023 的规定,建议使用 application/xslt+xml 作为 MIME 类型。不幸的是,其他很多软件和文档鹦鹉学舌般地照抄了 Microsoft 的错误(毫无疑问,这是一项错误:对于任何类型的 XML 文档,不论 XSL 还是其他类型,text 都不是一种适当的媒体类型),而没有看看规范中是怎么说的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值