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

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → [转帖]如何使用模式(或几个模式)约束 XML 文档处理 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 2648 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [转帖]如何使用模式(或几个模式)约束 XML 文档处理 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     anchen0617 帅哥哟,离线,有人找我吗?双子座1983-6-17
      
      
      威望:5
      等级:大二(研究C++)
      文章:281
      积分:3413
      门派:XML.ORG.CN
      注册:2004/10/17

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给anchen0617发送一个短消息 把anchen0617加入好友 查看anchen0617的个人资料 搜索anchen0617在『 DTD/XML Schema 』的所有贴子 访问anchen0617的主页 引用回复这个贴子 回复这个贴子 查看anchen0617的博客楼主
    发贴心情 [转帖]如何使用模式(或几个模式)约束 XML 文档处理

    早期的 DTD
    首先,让我简要地比较一下以供参考。在 XML 模式之前,每个人都使用 DTD 来进行约束,而且很多人现在仍这么做。要使用 DTD 进行约束,应在 XML 文档中使用 DOCTYPE 声明来引用 DTD,如“清单 1”所示:

    清单 1. 引用 DTD

    <?xml version="1.0"?>
    <DOCTYPE hockeyTeam SYSTEM "dtd/hockeyTeam.dtd">

    <hockeyTeam>
    <team name="Dallas Stars">
      <!-- More XML Content -->
    </team>
    </hockeyTeam>

    在“清单 1”的文档中,所引用的 DTD 名叫 hockeyTeam.xml ,它在目录 dtd 中。可以在 XML 文档的 DOCTYPE 标记中指定约束,以代替在独立的 DTD 文档中指定约束。对于这个示例,我使用了一个拥有 XML 约束的独立 DTD 文档,因为这是一个更好的设计,而且因为它与需要使用 XML 模式的方法类似。

    名称……空间中有什么?
    除了理解 XML 的基础,您还需要掌握 XML 名称空间规范的一些知识(请参阅 参考资料)。该规范的优点超出了本篇技巧说明的范围,但您需要知道的是名称空间基本上是将一个前缀(如 nhl )绑定到某个特定 URI(如 http://www.nhl.com)。可以将前缀添加到元素名称的开头(例如, nhl:hockeyTeam ),以便将该元素放到相关 URL 标识的名称空间中。如果指定了 URL,但是 没有指定前缀,那么该名称空间会成为 缺省名称空间;没有前缀的元素将落入缺省名称空间。“将缺省名称空间看作是带有空的前缀的名称空间”可能会对理解它有所帮助。名称空间声明的使用及其前缀让您可以在一个模式使用多个名称空间中的元素定义。

    一个 XML 模式可以对一个名称空间设置约束。因此,如果在一个 XML 文档中有 4 个名称空间,而且您要约束所有名称空间中的所有元素,通常需要 4 个 XML 模式。对于每个名称空间,都需要指定约束该名称空间的模式。再次声明,名称空间在内容和功能之间提供了一种很好的分离方法。

    切入正题
    好,基础知识已经介绍得足够多了;现在切入正题。

    首先需要在文档中声明“XML 模式实例”名称空间,以授予您对引用 XML 模式时需要的属性的访问权。当然,要添加前缀映射( xsi )和相关 URI,如“清单 2”中所示。我还添加了一个缺省名称空间 http://www.nhl.com,以便为文档中的所有无前缀元素提供驻留地(在本示例中,所有元素都是无前缀元素)。

    清单 2. 定义“XML 模式实例”名称空间

    <?xml version="1.0"?>

    <hockeyTeam xmlns="http://www.nhl.com"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <team name="Dallas Stars">
      <!-- More XML Content -->
    </team>
    </hockeyTeam>

    一旦“XML 模式实例”名称空间可用,就可以使用其内部的 schemaLocation 属性了。该属性的值其实是 两个值。第一值,或自变量,是要约束的名称空间。在本示例中,这个值是 http://www.nhl.com ,即缺省名称空间。第二个值,或自变量,是用于名称空间约束的 XML 模式的位置。要查看这个值,请参考“清单 3”:

    清单 3. 引用 XML 模式

    <?xml version="1.0"?>

    <hockeyTeam xmlns="http://www.nhl.com"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.nhl.com schemas/hockeyTeam.xsd">
    <team name="Dallas Stars">
      <!-- More XML Content -->
    </team>
    </hockeyTeam>

    请注意名称空间 URI 和模式之间的空格。 插入该空格需小心;省去这个空格会给您带来各种麻烦!此外,请注意,模式位置可以就是一个 URI,如“清单 4”所示:

    清单 4. 使用 URI 作为模式位置

    <?xml version="1.0"?>

    <hockeyTeam xmlns="http://www.nhl.com"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.nhl.com
                                    http://www.nhl.com/hockeyTeam.xsd">
    <team name="Dallas Stars">
      <!-- More XML Content -->
    </team>
    </hockeyTeam>


    好了。添加新的名称空间和模式很简单,只涉及到将 第二(或第三或第四)对值添加到 schemaLocation 属性。清单 5 将一个新的名称空间添加到 XML 文档中,并且添加了另一个与其相关的模式。

    清单 5. 引用多个模式

    <?xml version="1.0"?>

    <hockeyTeam xmlns="http://www.nhl.com"
                xmlns:stars="http://www.dallasstars.com"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.nhl.com
    http://www.nhl.com/hockeyTeam.xsd
    http://www.dallasstars.com http://www.dallasstars.com/stars.xsd"">
    <team name="Dallas Stars" stars:logo="http://www.dallasstars.com/logo.jpg">
      <!-- More XML Content -->
    </team>
    </hockeyTeam>

    如果您正在使用模式或者打算使用它们,那么您一定要掌握 XML 模式规范(从第 0 部分开始),因为在引用模式、使用模式(无论带不带名称空间)和设计文档约束时有许多选项。无论您使用这些特性的哪种组合,请明智地约束 XML,玩得开心点!


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    xml这门语言太好了,我们共同努力吧!!!!!

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

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

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