常用链接

统计

最新评论

#

DOM教程(什么是DOM)-----来源:IBM developerWorks

DOM教程(什么是DOM)
                        作为结构的 DOM
      DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中导航仪寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。
      对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。这些基于事件的模型,比如 Simple API for XML(SAX),适用于处理数据流,即随着数据的流动而依次处理数据。基于事件的 API 消除了在内存中构造树的需要,但是却不允许开发人员实际更改原始文档中的数据。
     另一方面,DOM 还提供了一个 API,允许开发人员添加、编辑、移动或删除树中任意位置的节点,从而创建一个引用程序。
     解析器是一个软件应用程序,设计用于分析文档(这里是指 XML 文件),以及做一些特定于该信息的事情。在诸如 SAX 这样基于事件的 API 中,解析器将向某种监听器发送事件。在诸如 DOM 这样基于树的 API 中,解析器将在内存中构造一颗数据树。
作为 API 的 DOM
     从 DOM Level 1 开始,DOM API 包含了一些接口,用于表示可从 XML 文档中找到的所有不同类型的信息。它还包含使用这些对象所必需的方法和属性。
Level 1 包括对 XML 1.0 和 HTML 的支持,每个 HTML 元素被表示为一个接口。它包括用于添加、编辑、移动和读取节点中包含的信息的方法,等等。然而,它没有包括对 XML 名称空间(XML Namespace)的支持,XML 名称空间提供分割文档中的信息的能力。
     DOM Level 2 添加了名称空间支持。Level 2 扩展了 Level 1,允许开发人员检测和使用可能适用于某个节点的名称空间信息。Level 2 还增加了几个新的模块,以支持级联样式表、事件和增强的树操作。
     当前正处于定稿阶段的 DOM Level 3 包括对创建 Document 对象(以前的版本将这个任务留给实现,使得创建通用应用程序很困难)的更好支持、增强的名称空间支持,以及用来处理文档加载和保存、验证以及 XPath 的新模块;XPath 是在 XSL 转换(XSL Transformation)以及其他 XML 技术中用来选择节点的手段。
     DOM 的模块化意味着作为开发人员,您必须知道自己希望使用的特性是否受正在使用的 DOM 实现所支持。
                                        确定特性可用性
     DOM 推荐标准的模块性质允许实现者挑选将要包括到产品中的部分,因而在使用某个特定的特性之前,首先确定该特性是否可用可能是必要的。本教程仅使用 DOM Level 2 Core API,不过在着手您自己的项目时,了解如何能够检测特性是有所帮助的。
     DOM 中定义的接口之一就是 DOMImplementation。通过使用 hasFeature() 方法,您可以确定某个特定的特性是否受支持。DOM Level 2 中不存在创建DOMImplementation 的标准方法,不过下面的代码将展示如何使用 hasFeature() 来确定 DOM Level 2 样式表模块在某个 Java 应用程序中是否受支持。
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.DOMImplementation;
public class ShowDomImpl {
   public static void main (String args[]) {
      try {
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         DocumentBuilder docb = dbf.newDocumentBuilder();
         DOMImplementation domImpl = docb.getDOMImplementation();
         if (domImpl.hasFeature("StyleSheets", "2.0")) {
            System.out.println("Style Sheets are supported.");
         } else {
            System.out.println("Style Sheets are not supported.");
         }
      } catch (Exception e) {}      
 }
}
(DOM Level 3 将包括用于创建 DOMImplementation 的标准方法。)
     本教程将使用单个文档来展示 DOM Level 2 Core API 的对象和方法。
                                        基本的 XML 文件
     本教程中的所有例子都是用了一个包含如下节点的 XML 文件,它表示输入某个商业系统的订单。回顾一下,XML 文件的基本组成部分包括:
     XML 声明:基本的声明 <?xml version"1.0"?> 将这个文件定义为 XML 文档。在声明中指定一种字符编码的情况并不鲜见,如下所示。通过这种方式,不管该 XML 文件使用的语言或字符编码是什么,只要解析器理解特定的编码,它就能够正确地读取该 XML 文件。 
     DOCTYPE 声明:XML 是人机之间交换信息的便利手段,但是要使它能够顺利地工作,必须要有一个公共的词汇表。可选的 DOCTYPE 声明可用于指定一个应该用来与此文件做比较的文档(在本例中为 orders.dtd),以确保不会产生任何混淆或丢失信息(例如,丢失一个 userid 或错误拼写某个元素名称)。以这种方式处理过的文档称为有效的文档。成功的有效性检查并不是 XML 所必需的,后面的例子实际上从文档中省略了 DOCTYPE 声明。 
     数据本身:XML 文档中的数据必须包含在单个根元素内,比如下面的 orders 元素。要使 XML 文档得到处理,它必须是格式良好的(well-formed)。 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ORDERS SYSTEM "orders.dtd">
<orders>
   <order>
      <customerid limit="1000">12341</customerid>
      <status>pending</status>
      <item instock="Y" itemid="SA15">
         <name>Silver Show Saddle, 16 inch</name>
         <price>825.00</price>
         <qty>1</qty>
      </item>
      <item instock="N" itemid="C49">
         <name>Premium Cinch</name>
         <price>49.00</price>
         <qty>1</qty>
      </item>
   </order>
   <order>
      <customerid limit="150">251222</customerid>
      <status>pending</status>
      <item instock="Y" itemid="WB78">
         <name>Winter Blanket (78 inch)</name>
         <price>20</price>
         <qty>10</qty>
      </item>
   </order>
</orders>
    在 DOM 中,使用 XML 信息意味着首先将它划分为节点。

posted @ 2007-08-09 12:55 九宝 阅读(308) | 评论 (0)编辑 收藏

rdf schema(转)

RDF使用Schema来定义其类型系统,在定义类型时,RDF引入了部分面向对象的思想。由于RDF的图中主要包含以下几个部分,主语,谓语,宾语,文本。因此RDF Schema要做的主要就是为这不同的部分提供对应的一个类型。RDF Schema本身也是一个RDF文件。

<!--[if !supportLists]-->a)        <!--[endif]-->继承关系与实例关系

rdfs:subClassOf用于表示继承关系。三元组A rdfs:subClassOf B表示AB的子类,这与Java当中的class A extends B等价。

rdfs:type用于表示实例关系。三元组A rdfs:type B表示AB的一个实例,这与Java当中的A = new B()等价。

 

<!--[if !supportLists]-->b)        <!--[endif]-->类标记:

标记

说明

继承关系(rdfs:subClassOf

实例关系(rdfs:type

rdfs:Resource

所有出现在RDF图中的对象都属于资源

 

rdfs:Class

rdfs:Class

主语和宾语。用于指明主语或宾语所属的类型

rdfs:Resource

rdfs:Class

rdfs:Literal

文本

rdfs:Resource

rdfs:Class

rdfs:Datatype

用于有类型文本,指定数据类型

rdfs:Class

rdfs:Class

rdf:XMLLiteral

XML文本

rdfs:Literal

rdfs:Datatype

rdf:Property

谓语

rdfs:Resource

rdfs:Class

rdfs:Container

容器的基类

rdfs: Resource

rdfs:Class

rdf:Bag

 

rdfs:Container

rdfs:Class

rdf:Seq

 

rdfs:Container

rdfs:Class

rdf:Alt

 

rdfs:Container

rdfs:Class

rdf:List

集合

rdfs: Resource

rdfs:Class

rdf:nil

空列表

 

rdf:List

 

<!--[if !supportLists]-->c)        <!--[endif]-->类定义:

<rdf:Description rdf:about="A">

<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class">

<rdfs:subClassOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>

</rdf:Description>

     等价于

<rdfs:Class rdf:about="A">

<rdfs:subClassOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>

</rdfs:Class>

 

<!--[if !supportLists]-->d)        <!--[endif]-->范围与域:

rdfs:range用于指定宾语的范围。三元组P rdfs:range QA P B,在第一个三元组当中,我们规定了如果一个三元组使用了属性P,那么三元组当中的宾语必须是Q的实例。第二个三元组单中,由于使用了P,所以可以得出B必定是Q的实例。

rdfs:domain用于指定主语的范围。三元组P rdfs:range QA P B,在第一个三元组当中,我们规定了如果一个三元组使用了属性P,那么三元组当中的主语必须是Q的实例。第二个三元组单中,由于使用了P,所以可以得出A必定是Q的实例。

 

<!--[if !supportLists]-->e)        <!--[endif]-->属性标记,所有的标记都是rdfs:Proerpty的实例

标记

说明

域,主语(rdfs:domain

范围,宾语(rdfs:range

rdfs:range

对宾语进行约束

rdfs:Class

rdfs:Property

rdfs:domain

对主语进行约束

rdfs:Class

rdfs:Property

rdf:type

用于定义实例关系

rdfs:Resource

rdfs:Class

rdfs:subClassOf

用于定义继承关系

rdfs:Class

rdfs:Class

rdfs:subPropertyOf

用于定义属性之间的继承关系。子属性的含义是指如果AB的子属性,那么如果主语和宾语符合A关系,那么他们也符合B关系。

rdfs:Property

rdfs:Property

rdfs:label

提供用户友好的标签

rdfs:Resource

rdfs:Literal

rdfs:comment

对资源进行描述

rdfs:Resource

rdfs:Literal

rdfs:member

用于表示集合与元素之间的关系

rdfs:Resource

rdfs:Resource

rdf:first

用于指明某个资源是某个集合的首元素

rdf:List

rdfs:Resource

rdf:rest

 

rdf:List

rdf:List

 

<!--[if !supportLists]-->f)        <!--[endif]-->属性定义

<rdf:Property rdf:about="B">

 <rdfs:domain rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>

 <rdfs:range rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>

</rdf:Property>

 

posted @ 2007-08-09 12:48 九宝 阅读(645) | 评论 (1)编辑 收藏

[转贴]创建网站的 RSS 内容摘要

RSS 是一种“轻量级、多用途、可扩展的元数据描述及联合推广格式”,也可以理解为一种规范。它本身是一种 XML 格式,用于为内容整合客户端提供选择性的、汇总过的 Web 内容。如今,许多站点都开 
始通过创建 RSS feed 向浏览者提供内容整合服务,提供新闻、站点内容的更新等等。浏览者可以通过一些客户端软件方便地得到这些组织、汇总了的信息。

    那么,怎么在我们自己的网站上创建 RSS feed 呢?下面我以 Asp+Access 为例介绍一下。

    既然 RSS 是一种 XML 格式的文档,那么我们就应当可以对后台数据库中的数据按照条件进行筛选、组织,然后通过 ASP 生成 XML 格式的数据流,最后发送到客户端进行浏览。

    数据的选取、汇集是 Asp 的拿手好戏,关键在于怎么生成 XML 格式的数据流。其实 Asp 也已经有自己的解决办法,就是在写数据前对 response 对象的 ContentType 属性进行定义。如果 response.ContentType 的取值为 "text/xml",就会向浏览者发送 XML 格式的数据流。

    在 IE 浏览器中调用 RSS 源的方法和普通的链接没有什么区别,格式是:
    <a type="application/rss+xml" href="RssFeed.asp">RSS说明</a>
其中 type="application/rss+xml" 加不加好象没有什么区别。

    以下程序段是创建我的网站(goaler.xicp.net)上的“某个栏目”栏目的 RSS feed 的源代码,文件名为 RssFeed_news.asp。
    其中,变量 sXmlClear 用于声明产生的文档是一段 XML 格式的文档,该声明是可选的,以保持与旧版本 XML 的向后兼容性。
    sRssHead 定义 Rss 的基本元素。RSS feed 通常由 4 个主要元素构成:<channel>,<image>,<item> 和 <textinput>。其中,<channel> 元素是必需的,<item> 元素至少要出现一次。<textinput> 和 <image> 元素是可选的,是否使用要视具体情况而定。
    <channel> 元素包含 Channel(RSS feed 的来源)的一个简单描述。<title> 是频道的名称/标题;<link> 是与频道内容对应的包含了完整内容的那个网页的 URL;<description> 是与 <channel> 的内容有关的简单描述;<language> 代表语言。还有一些别的属性,不是太常用。
    <item> 元素用于对数据库中的记录进行描述。<item> 一般有若干项,对应了一个 Rss feed 的数据集合。

<!-Filename:RssFeed_news.asp:-->
<% Option explicit %>
<!-- #include file="conn.asp" -->

<%
  Dim sSQL, rs, sCrLf, sXmlClear, sRssHead, sRssEnd
  sCrLf = chr(13) & chr(10)  '回车+换行

  sXmlClear = "<?xml version='1.0' encoding='gb2312'?>" & sCrLf

  sRssHead = "<rss version='2.0'>" & sCrLf
  sRssHead = sRssHead & "<channel>" & sCrLf
  sRssHead = sRssHead & "<title>Goaler's Blog </title>" & sCrLf
  sRssHead = sRssHead & "<description> Goaler's Blog </description>" & sCrLf
  sRssHead = sRssHead & "<link></link>" & sCrLf
  sRssHead = sRssHead & "<language>zh-cn</language>" & sCrLf
  sRssHead = sRssHead & "<docs>Goaler's Blog </docs>" & sCrLf
  sRssHead = sRssHead & "<generator>Rss Generator By goaler.xicp.net</generator>" & sCrLf

  sRssEnd = "</channel></rss>"

  Response.CharSet="gb2312"  '数据集
  Response.ContentType="text/xml"  '数据流格式定义

  '输出:
  Response.write sXmlClear
  Response.write sRssHead

  sSQL="select top 15 * from news  order by sortid desc"
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.Open sSQL, s_Conn, 1, 1
  if not (rs.eof and rs.bof) then
    do while not rs.eof
      response.write "<item>" & sCrLf
      response.write "<title> " & rs("f_topic") & " </title>" & sCrLf
      response.write "<link> " & "/show_new.asp?autoid=" & rs("f_i_autoid") & " </link>" & sCrLf
      response.write "<author> " & rs("f_author") & " </author>" & sCrLf
      response.write "<pubDate> " & rs("f_datetime") & " </pubDate>" & sCrLf
      response.write "</item>" & sCrLf & sCrLf
      rs.movenext
    loop
  end if
  rs.close
  set rs=nothing

  Response.write sRssEnd
%>

    IE 中的调用格式是:<a href="/RssFeed_news.asp">技术新闻RSS</a>。如果用一些客户端软件订阅该 RSS,订阅的 Url 就是/RssFeed_news.asp。

posted @ 2007-08-09 12:36 九宝 阅读(182) | 评论 (0)编辑 收藏

仅列出标题
共9页: 上一页 1 2 3 4 5 6 7 8 9