• RDF

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • rdf - 简介

     资源(Resource):所有在Web上被命名、具有URI(Unified Resource Identifier 统一资源描述符)的东西。如网页、XML文档中的元素等; 
    描述(Decription):对资源属性(Property)的一个陈述(Statement),以表明资源的特性或者资源之间的联系; 
    框架(Frameword):与被描述资源无关的通用模型,以包容和管理资源的多样性、不一致性和重复性。
    综合起来,RDF就是定义了一种通用的框架,即资源—属性—值的三元组,一不变应万变,来描述Web上的各种资源。 
    一个简单的RDF的例子: 
    (指明被描述资源的URI) 
    Tim Bray (被描述资源有一个叫Author即作者的属性,其值是Tim Bray) 
    (被描述资源有一叫Home-Page即主页的属性,其值指向另一资源) 
    (结束标志)

    • rdf - 两大关键技术


    RDF有两大关键技术——URI和XML。URI是Web资源的唯一标识,它是更常用的统一资源定位符URL的超集,除了网页以外,它还可以标识页面上的元素、书籍、电视等资源,甚至可以标识某一个人。在RDF中,资源无所不在,资源的属性是资源,属性的值可以是资源,甚至于一个陈述也可以是资源,也就是说,所有这些都可以用URI标识,可以再用RDF来描述。那RDF怎样放在网络上让人使用呢?XML作为一种通用的文件格式承担了这个责任,它定义了RDF的表示语法,这样就可以方便的用XML来交换RDF的数据。

    • rdf - contents.rdf 文件

    我们先抛开那些形式上的目录结构,了解一下最重要的东西。

    content,locale,skin 这三个目录都被称为包(package),那么什么是包呢?在 Mozilla 下,包(package)就是一组文件集合,它的内容和功能就像上面对 content,locale,skin 等目录描述的那样。包可以被注册到 Mozilla 系统下,并且一旦被注册,它其中的文件就可以通过一种被称为 chrome 的地址协议进行访问。包可以包含任意类型的文件,这些文件可以被分别放置于不同的子目录下。包的表现形式既可以是目录也可以是 JAR 文件,但常以 JAR 做为表现形式,同时 contents.rdf 文件是必须的。那么,contents.rdf 的确切功能又是什么呢? contents.rdf 文件就是用来分别描述这些包的,它描述了每种包的结构和负责完成的功能。确切的说,它其中的信息是为包的注册服务的。扩展在安装时,负责安装扩展的程序会分析它的内容,并将包注册到 Mozilla 系统中。只有在包被注册到 Mozilla 系统之后,它才可以进行正常的工作,才可以被通过 chrome 地址协议进行访问。本章的后面将对 chrome 地址协议和扩展的安装原理做更一步的解释,现在只说明 contents.rdf 文件的结构。 再有,由于基于 Gecko 1.8 内核的 Mozilla 程序采用一种新的方式来进行包的注册,所以 contents.rdf 其实已经被废弃掉了。新方式通过一个位于扩展顶级目录的 chrome.manifest 文件来完成同样的功能,它是一个格式十分简单的纯文本文件。但为了保证扩展能够兼容 Gecko 1.8 以前的版本,我们还要在扩展中使用 contents.rdf 文件格式,直到它真正的被废弃掉。 我们已经了解到,contents.rdf 的文件格式是 RDF/XML 格式的,它是一种通过 XML 描述的 RDF 格式。RDF(Resource Description Framework,译为“资源描述框架”)主要用来描述资源之间的关系,并且可以用许多格式来表示,但常用 XML 格式进行表示。Mozilla 也只是应用了这样一种格式来描述它的包资源。前面提到的 3 个包属于 3 种不同类型的资源,所以在进行描述时也会有所区别。并且这些包的描述格式是相对固定的,你完全可以通过修改下面的模板文件来生成你的 contents.rdf 文件。 

    适用于 content 包的 contents.rdf 文件 

    示例格式如下: 

    <?xml version="1.0"?> 

    <RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:chrome="http://www.mozilla.org/rdf/chrome#">

    <!-- list all the packages being supplied by this directory -->

    <RDF:Seq about="urn:mozilla:package:root"> 

    <RDF:li resource="urn:mozilla:package:sampleext"/> 

    </RDF:Seq> 

    <!-- package information --> 

    <RDF:Description RDF:about="urn:mozilla:package:sampleext" chrome:name="sampleext"> 

    <!-- additionally for Mozilla Suite and old Firefox/Thunderbird versions include: chrome:extension="true" chrome:displayName="Sample Extension" chrome:author="Your Name Here" chrome:authorURL="http://sampleextension.mozdev.org/" chrome:description="A sample extension with advanced features" chrome:settingsURL="chrome://sampleext/content/settings.xul" --> </RDF:Description>

    <!-- overlay information --> 

    <RDF:Seq about="urn:mozilla:overlays"> 

    <RDF:li resource="chrome://browser/content/browser.xul"/> 

    </RDF:Seq>

    <RDF:Seq about="chrome://browser/content/browser.xul"> 

    <RDF:li>chrome://sampleext/content/overlay.xul</RDF:li> 

    </RDF:Seq> 

    </RDF:RDF> 

    下面对以上的一些格式做解释说明,先看一下它的文件头部。

    <?xml version="1.0"?> <RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:chrome="http://www.mozilla.org/rdf/chrome#"> 

    上面这一段格式相对固定,它主要是用来引入 RDF 和 chrome 命名空间。

    接下来 <!-- list all the packages being supplied by this directory --> 

    <RDF:Seq about="urn:mozilla:package:root"> <RDF:li resource="urn:mozilla:package:sampleext"/> </RDF:Seq> 

    这里的 package 和 sampleext 都需要注意。首先,package 用来说明它描述的是一个 content 类型的包。对于 locale 和 skin 类型的包,应把它替换成 locale 和 skin,虽然这看上去与包目录的命名有些不一致。sampleext 是用来唯一标识扩展的名称,Mozilla 系统靠它来识别是哪个扩展的注册信息。后面还有好几处出现了同样的内容,你都需要注意。对于 locale 和 skin 则不能写能 locale:sampleext 或 skin:sampleext 这种“类推”出来的格式,它们的格式后面做说明。 

    文件的中间部分 

    <RDF:Description RDF:about="urn:mozilla:package:sampleext" chrome:name="sampleext">

    <!-- additionally for Mozilla Suite and old Firefox/Thunderbird versions include: chrome:extension="true" chrome:displayName="Sample Extension" chrome:author="Your Name Here" chrome:authorURL="http://sampleextension.mozdev.org/" chrome:description="A sample extension with advanced features" chrome:settingsURL="chrome://sampleext/content/settings.xul" --> </RDF:Description> 

    <!-- -->标识中的内容已经说明,它是适用于 Mozilla Suite 和老版本 Firefox/Thunderbird 的附加信息,所以对于内核较老的 Mozilla 必须被写成: 

    <RDF:Description RDF:about="urn:mozilla:package:sampleext" chrome:name="sampleext"> chrome:extension="true" chrome:displayName="Sample Extension" chrome:author="Your Name Here" chrome:authorURL="http://sampleextension.mozdev.org/" chrome:description="A sample extension with advanced features" chrome:settingsURL="chrome://sampleext/content/settings.xul">

    </RDF:Description> 

    对于新版本的 Mozilla,<!-- --> 中的内容可以忽略。这段内容主要用来描述扩展的一些附加信息,如作者和扩展的显示名称等。其实在 install.rdf 文件中,存在同样的一段描述信息。因而,这里再做描述显得有些罗嗦,作者也不建议你在 contents.rdf 中加入那些附加的信息。 

    文件的结尾部分 

    <RDF:Seq about="urn:mozilla:overlays"> <RDF:li resource="chrome://browser/content/browser.xul"/> </RDF:Seq> <RDF:Seq about="chrome://browser/content/browser.xul"> <RDF:li>chrome://sampleext/content/overlay.xul</RDF:li> </RDF:Seq> 

    这是 content 类型的 contents.rdf 文件所描述的关键部分。Mozilla 下的扩展之所以能够和浏览器整合在一起,像一个程序一样工作,是因为它采用了一种被称为“覆盖(Overlays)”的技术。你的扩展可以在 Mozilla 的某个已有界面上,再组合上另外的 XUL 界面元素,而不会与之产生任何的冲突和不协调。这种技术与其说是“覆盖”,不如说是“合并”更合适。因为,原有的界面元素会根据加上去的界面元素自动调整自己的位置,以适应变化。同时,“覆盖”技术还为扩展程序的运行提供了“入口点”,这也正是我们编写的扩展能够运行的原因。 在上面的内容中,第一个 RDF:Seq 标记指明要对 Mozilla 的界面进行覆盖;而要对哪些界面进行覆盖,则通过它的子标记 RDF:li 标记进行描述,如: <RDF:li resource="chrome://browser/content/browser.xul"/> 它意思是要覆盖负责描述浏览器界面的 browser.xul 文件,这个文件就是通过 chrome 地址协议进行指定的,后面你还将看到在许多情况下,我们都需要通过 chrome 地址协议来访问注册到 Mozilla 系统下的包资源。如果你还想覆盖其它的界面文件,你只需像上面一样指定多个 RDF:li 标识。 第二个 RDF:Seq 对那些被覆盖的文件做更进一步的描述,它描述了指定的目标文件会被当前包下的哪几个文件所覆盖。如:

    <RDF:Seq about="chrome://browser/content/browser.xul"> <RDF:li>chrome://sampleext/content/overlay.xul</RDF:li>

    </RDF:Seq> 

    意思是用 overlay.xul 覆盖 browser.xul 文件,并且 overlay.xul 也是以 chrome 方式进行定位的,或者说是以已经注册后的地址进行定位的。如果还有更多的界面文件要覆盖到 browser.xul 上,照上面格式书写即可。 

     

     适用于 locale 包的 contents.rdf

    文件 示例格式如下: 

    <?xml version="1.0"?> 

    <RDF:RDF xmlns:chrome="http://www.mozilla.org/rdf/chrome#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

    <RDF:Seq about="urn:mozilla:locale:root"> 

    <RDF:li resource="urn:mozilla:locale:en-US"/> 

    </RDF:Seq>

    <RDF:Description about="urn:mozilla:locale:en-US" chrome:author="Me" chrome:displayName="English(US)" chrome:name="en-US"> 

    <chrome:packages> 

    <RDF:Seq about="urn:mozilla:locale:en-US:packages"> 

    <RDF:li resource="urn:mozilla:locale:en-US:sampleext"/> </RDF:Seq> 

    </chrome:packages> 

    </RDF:Description>

    </RDF:RDF> 

    我们可以看到,locale 包的 contents.rdf 文件的与 content 包的 contents.rdf 文件没有什么太大的区别,只有文件前面的 RDF:li,其 resource 中写的是 locale:en-US,注意区别前面 content 中的 package:sampleext。后面的 RDF:Description 格式相对固定,只是你要注意将 RDF:li 中的 sampleext 替换成与上面一致的扩展名称。另外,由于这一类型的 contents.rdf 是用来描述语言包的,所以,你必须要处理好相应的语言描述信息。 

    适用于 skin 包的 contents.rdf 文件

    示例格式如下:

    <?xml version="1.0"?> <RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:chrome="http://www.mozilla.org/rdf/chrome#"> <RDF:Seq about="urn:mozilla:skin:root"> <RDF:li resource="urn:mozilla:skin:classic/1.0" /> </RDF:Seq> <RDF:Description about="urn:mozilla:skin:classic/1.0"> <chrome:packages> <RDF:Seq about="urn:mozilla:skin:classic/1.0:packages"> <RDF:li resource="urn:mozilla:skin:classic/1.0:sampleext" /> </RDF:Seq> </chrome:packages> </RDF:Description> </RDF:RDF> 

    我们可以看到,它与 locale 包的 contents.rdf 文件差不多,格式也很相近,只是 RDF:Description 标记中的属性少了一些。因为,这两种资源的描述几乎是采用一致的格式进行注册的,你只要注意 skin:classic/1.0 即可。 以上只是给出一些标准的格式,随着你对扩展开发的深入,你会发现一些特殊的格式及应用。另外,由于这个文件是 XML 的,所以作者提醒你保存成不带文件头标记(BOM)的 UTF-8 格式,并且建议你在创建完此文件之后,用浏览器再验证一下文件的格式和编码问题。

    • 标签:
    • 扩展
    • 文件
    • chrome
    • rdf
    • mozilla
    • 描述
    • 资源
    • contents.rdf
    • seq
    • 格式
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部