mozilla
Your Search Results

    模板:介绍

    介绍                                                                       下一页 [[User talk:Dongdong/编辑­Rule]]

    XUL模板是一种从各种数据源中通过查询操作,得到一组结果集的方式。一个类似的技术是数据库的查询,每个查询得到的结果形成一组满足要求的结果集。XUL模板是XUL中进行数据挷定的有效方式。

    每个模板从一个数据源中获取数据。默认支持RDF, XML and SQLite 这三种数据源,如果要支持其它数据源,需要重写处理过程。在XUL中,通过指定datasources 属性来设置数据源。通常情况下,是指定数据源所在地址的URI。如果是一个XML数据源,那就用XML文件的URL。当XUL处理器看到一个元素有datasources属性时,它会新建一个template builder,并将这个builder附加给该元素。最终希望看到的结果是:在这个XUL元素内有一个template。Template会去加载数据源,并对该数据源进行查询,从得到的记录中得到想要的内容。由于datasources可能是多种数据源中的一种,querytype属性可以用来指定使用的是哪种数据源,如果使用RDF数据源,可以设定querytype=rdf。querytype将会影响数据源的使用,及后来要使用的查询语法。

    模板产生的内容将会被插入到XUL中,就像你自己插入的一样。下面是一个例子:

      <vbox datasources="http://www.xulplanet.com/ds/sample.rdf" querytype="rdf">

    这个例子指定了"http://www.xulplanet.com/ds/sample.rdf"数据源,并且用querytype属性说明这是一个rdf数据源。

    咱们就先分析RDF数据源。就像你自己调用RDF服务直接加载数据源,template builder也通过调用RDF服务来加载数据源。通过数据源的URL,数据源被加载。Mozilla提供了一些常用的数据源,像rdf:histroy,它们都以rdf:作为前缀。如果数据源已经被加载,template builder可以立刻开始工作。否则,在数据源加载进来之前,它什么事也不会去做。当然,实际上这也不完全如此。RDF服务在后台加载数据源,template builder会
    着手进行结果集的生成,只不过此时没有数据,当然也就没有显示。

    一旦有数据到来,template builder会检查其中的信息,看看是否能得到一些满足条件的结果。如果是,那么将能得到一些结果,如果不是,那么还是什么也没有。一件有趣的事情是,由于RDF解析处理本身的原因,导致template builder搜索数据和最终得到结果可以随着数据的到来逐渐进行,也就是说数据来一个处理一个,而不用等到其全部加载成功再处理。在通常情况下,数据到来的速度都会很快,因此这个问题你也不会去很关心。如果数据已经加载,builder会在一个操作内就将结果生成,当然,这样说也不完全正确,我们继续分析下去就会知道了。

    如果是XML数据源,设置querytype=xml。datasources属性设置为XML文件的URL地址,可以是本地地址,也可以是网站上的地址。当template builder进行搜索,获得结果时,会去加载这个文件。例如:

      <listbox datasources="http://www.xulplanet.com/ds/sample.xml" querytype="xml">
      <template>
        <listitem label="?name" />
      </template>
      </listbox>
    这个template使用一个XML数据源去生成一个listbox(列表框)。现在只需要明白,这个简单例子的结果是:template会利用XML数据中的每一个子节点产生一个listitem,并用将listitem的label设置为XML数据中的name值。

    如果是一个SQLite数据源,datasources属性是数据库文件的URI。需要注意,只支持本地数据库,因此,这个URI只能使用文件URL,也就是文件地址。如果是支持的数据源类型,template builder可以使用多个数据源,但是这需要将多个数据源合成一个组合数据源才能使用。现在只有内建的RDF数据源支持这种机制,XML和SQLite数据源不能支持这种组合数据源的方式。多数据源是通过创建nsIRDFCompositeDataSource组件来进行管理的。在脚本中,你可以从database这个property中得到这个组合数据源,并且通过它增加或删除其内部的多个数据源。

    使用多个数据源时,多个RDF被当作一个大的数据源。这也就意味着,template的query语句能够从所有数据源中拿到数据。这种组合数据源经常被称作“聚合”数据源。这是一个非常有用的特征。例如,你可以将内置的书签数据源rdf:bookmarks和你自定义的数据源放在一起用,你可以对书签中的数据再进行描述。

      <vbox datasources="rdf:bookmarks http://www.xulplanet.com/ds/sample.rdf">

    除此之外,当在chrome协议中使用RDF数据源时,一个名为rdf:local-store的数据源总是会被加到组合数据源中。
    这个local-store数据源是保存状态信息的,像窗口大小、tree中的哪些列被显示、tree中的哪些项被展开了。你可以查询这个数据源中的任何数据,仅管这很少使用。

    有时候,你希望能够动态的指定数据源,能够在脚本中动态设置数据源。rdf:null就是用来指定一个空数据源,无论你真正的数据源是RDF还是其它类型的数据源,如XML、SQLite,都没有关系。因为它就是指定一个空数据源,所以,请放心大胆的使用这个rdf:null来指定空数据源。

    Document Tags and Contributors

    Contributors to this page: Dongdong
    Last updated by: Dongdong,