新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 关于 XML 的一般性技术讨论,提供 XML入门资料 和 XML教程
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XML基础 』 → 存取XML实体与卷标 [推荐] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 7122 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 存取XML实体与卷标 [推荐] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 XML基础 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 存取XML实体与卷标 [推荐]


        你可以使用未解析实体宣告来将外部数据文件合并至XML 文件中。(所有未解析实体都是以一般外部形态存在。)使用未解析实体的方法,是将实体名称指定到具有ENTITY 或ENTITIES 形态的属性中,作为将外部实体档案与特定的XML 元素结合在一起的方法。XML 处理器并不会存取未解析实体档案。更确切的说,是XML 处理器仅仅让应用程序可以获得实体的描述与卷标,而应用程序则是可以适当地取得并使用这些信息。
        本节中提出一个XML 文件和HTML 网页,来显示使用DOM 从XML 文件来撷取实体的数据与描述实体格式卷标的基本步骤。Inventory Entity.xml
    <?xml version="1.0"?>
    <!--File Name:Inventory Entity.xml -->
    <!DOCTYPE INVENTORY
    [
    <!NOTATION TXT SYSTEM "plain text file">
    <!ENTITY rev_huck SYSTEM "Review of Huckleberry Finn.txt"
    NDATA TXT>
    <!ENTITY rev_leaves SYSTEM "Review of Leaves of Grass.txt"
    NDATA TXT>
    <!ENTITY rev_legend SYSTEM "Review of Sleepy Hollow.txt"
    NDATA TXT>
    <!ELEMENT INVENTORY (BOOK)*>
    <!ELEMENT BOOK (TITLE,AUTHOR,BINDING,PAGES,PRICE)>
    <!ATTLIST BOOK Review ENTITY #IMPLIED>
    <!ELEMENT TITLE (#PCDATA)>
    <!ELEMENT AUTHOR (#PCDATA)>
    <!ELEMENT BINDING (#PCDATA)>
    <!ELEMENT PAGES (#PCDATA)>
    <!ELEMENT PRICE (#PCDATA)>
    ]
    >
    <INVENTORY>
    <BOOK Review="rev_huck">
    <TITLE>The Adventures of Huckleberry Finn</TITLE>
    <AUTHOR>Mark Twain</AUTHOR>
    <BINDING>mass market paperback</BINDING>
    <PAGES>298</PAGES>
    <PRICE>$5.49</PRICE>
    </BOOK>
    <BOOK Review="rev_leaves">
    <TITLE>Leaves of Grass</TITLE>
    <AUTHOR>Walt Whitman</AUTHOR>
    <BINDING>hardcover</BINDING>
    <PAGES>462</PAGES>
    <PRICE>$7.75</PRICE>
    </BOOK>
    <BOOK Review="rev_legend">
    <TITLE>The Legend of Sleepy Hollow</TITLE>
    <AUTHOR>Washington Irving</AUTHOR>
    <BINDING>mass market paperback</BINDING>
    <PAGES>98</PAGES>
    <PRICE>$2.95</PRICE>
    </BOOK>
    </INVENTORY>
    列表9-7.
    Inventory Entity.htm
    <!--File Name:Inventory Entity.htm -->
    <HTML>
    <HEAD>
    <TITLE>Get Entity Information</TITLE>
    <SCRIPT LANGUAGE="JavaScrip" FOR="window" EVENT="ONLOAD">
    Document =dsoInventory.XMLDocument;
    Attribute =
    Document.documentElement.childNodes(0).attributes(0);
    if (Attribute.dataType =="entity")
    {
    DisplayText ="'" ++Attribute.nodeName
    +"'attribute has ENTITY type" ++"\n";
    DisplayText +="attribute value ="
    +Attribute.nodeValue +"\n";
    Entity =
    Document.doctype.entities.getNamedItem(Attribute.nodeValue);
    DisplayText +="entity file ="
    +Entity.attributes.getNamedItem("SYSTEM").nodeValue
    +"\n";
    NotationName =
    Entity.attributes.getNamedItem("NDATA").nodeValue;
    DisplayText +="entity notation =" ++NotationName +"\n";
    Notation =
    Document.doctype.notations.getNamedItem(NotationName);
    DisplayText +="notation URI or description ="
    +Notation.attributes.getNamedItem("SYSTEM
    ").nodeValue
    +"\n";
    alert (DisplayText);
    location.href =
    Entity.attributes.getNamedItem("SYSTEM
    ").nodeValue;
    }
    </SCRIPT>
    </HEAD>
    <BODY>
    <XML ID="dsoInventory" SRC="Inventory Entity.xml"></XML>
    </BODY>
    </HTML>
        在范例XML 文件中的每个BOOK 元素,包含了一个名为Review 的ENTITY 型态属性,此属性被指定成一个包含特定书籍数据的未解析实体。范例HTML 网页中包含一份script,显示了当DOM script 遇到拥有ENTITY 或ENTITIES 形态的属性时,所必须执行的基本步骤,以撷取所有关于实体的信息。特别是,script 撷取被指定到Review 属性的未解析实体信息,而Review属性位于文件中第一个BOOK 元素中。未解析实体的信息结果由「警告」消息框显示.

        下面是script 程序执行的基本步骤的简介:
        1. script 得到位于第一个BOOK 元素中代表Review 属性的Attribute 节点:
    2. Attribute = Document.documentElement.childNodes(0).attributes(0);
        3. script 使用dataType 节点属性(参考 表格9-2 ),来判断此属性是否具有ENTITY 形态:
    4. if (Attribute.dataType =="entity")
    5. {
    6. /*obtain entity information */
    }
        只有当属性具有ENTITY 形态时,script 才会继续执行接下来的步骤。意即,接下来的步骤皆包含在if 叙述之中,而且只有当if 条件判断成真时才会执行。
        7. script 将获得Entity 节点,该节点代表被指派到属性的实体DTD 宣告:
    Entity
    =Document.doctype.entities.getNamedItem(Attribute.nodeValu
    e);
        Document 属性doctype(在表格9-3 中解释过)提供一个代表文件形态宣告的DocumentType 节点。DocumentType 属性entities 提供一个Entity 节点的NamedNodeMap 集合,此集合代表DTD 中所有的实体宣告。藉由传入实体名称(Attribute.nodeValue)到NamedNodeMap 对象中的方法getNamedItem,我们可以得到代表某指定实体的Entity 节点,其中getNamedItem 方法已于表格9-7
    中介绍过。
        8. script 会得到实体的系统literal,而系统literal 指明了包含此实体数据文件的URI。系统literal 储存在名为SYSTEM 的Attribute 节点中:
    9. DisplayText +="entity file ="
    10. +Entity.attributes.getNamedItem("SYSTEM").node
    Value
    +"\n";
        11. script 会获得实体卷标的名字,而卷标是储存于名为NDATA 的Attribute 节点中:
    NotationName =
    Entity.attributes.getNamedItem("NDATA").nodeValue;
        12. script 会得到代表实体卷标宣告的Notation 节点:
    Notation =
    Document.doctype.notations.getNamedItem(NotationName);
        文件形态属性notations 提供一个名称节点对应集合,此集合包含表示DTD 中符号宣告的符号节点,藉由传入符号名称(NotationName)给名称节点对应中的getNamedItem 方法,得到表示实体符号的符号节点。
        13. script 会获得卷标的系统literal,该系统literal 包含了卷标的URI 或如同此例是标签的描述。系统literal 是储存于Attribute 节点SYSTEM 中:
    14. DisplayText +="notation URI or description ="
    15. +Notation.attributes.getNamedItem("SYSTEM").no
    deValue
    +"\n"
        16. script 借着「警示」消息框来显示所有的储存结果:
    alert (DisplayText);
        17. script 会借着Internet Explorer 5 开启并显示包含review 的实体档案作为结束。藉由将档案的URI(在第4 步骤中所得到的)指定到HTML 网页的location.href 属性,该URI 设定了目前显示于浏览器中档案的URL 值。
    location.href = Entity.attributes.getNamedItem("SYSTEM
    ").nodeValue;
        location.href 属性是DHTML 对象模型的一部分,你可以从网页 http://msdn.microsoft.com/workshop/author/default.asp 中取得相关的信息。

       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/10 15:03:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML基础 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/25 14:00:02

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms