专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » php文档:使用 PHP 解析 RDDL 文档 »正文

php文档:使用 PHP 解析 RDDL 文档

来源: 发布时间:星期一, 2009年1月12日 浏览:10次 评论:0
  介绍

  如果曾经使用过 XML应该知道名称空间 通过和特定 URI 关联来限定 XML 元素名称从而避免同名元素冲突但通常仅仅个 URI 还不够实际上我们需要种办法使用多种资源来描述名称空间包括 DTD、XML 模式、XSL 样式表和软件Software文档

  于是资源目录描述语言 RDDL 登台亮相了正如这种语言官方网站WebSite所说RDDL “提供了有关些目标信息包……目标是 XML 名称空间”(请参阅 参考资料)RDDL 允许文档作者为用户提供有关特定资源更多信息帮助 PHP 开发人员利用这些信息是 XML_RDDLPHP Extension and Application Repository (PEAR) 提供个包XML_RDDL 包提供了从 RDDL 文件中提取各种资源信息并在 PHP 应用中使用 API从而为 PHP/RDDL 应用提供了种健壮、简单易用构件

  安装

  XML_RDDL 包由 Stephan Schmidt 维护采用 PHP 许可证在 PHP 社区发布最简单安装办法是用自动化 PEAR 安装应该包含在默认 PHP 安装包中安装只需在 shell 提示符下输入下列命令:

  shell> pear XML_RDDL

  PEAR 安装连接到 PEAR 包服务器并下载然后安装到系统适当位置本窍门技巧使用是 XML_RDDL V 0.9

  如果手工安装可以访问主页并下源代码压缩包然后手工解压到指定位置需要注意是手工安装必须对 PEAR 组织结构有所了解

  XML_RDDL 还需要另个 PEAR 包即 XML_Parser 包

  理解 RDDL 描述符

  首先必须对 RDDL 有所了解清单 1 中例子介绍说明了 RDDL 使用方法:

  清单 1. 使用 RDDL XHTML 文档

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:rddl="http://www.rddl.org/" xml:lang="en">
<head>
<title>An Example RDDL Document</title>
</head>
<body>
<h2>An Example RDDL Document</h2>
<p>Here are some resources:</p>
<ul>
<li>
<rddl:resource xlink:type="simple"
xlink:href="http://app.example.do/example.xsd"
xlink:role="http://www.w3.org/2000/10/XMLSchema"
xlink:title="Example XML Schema"
xlink:arcrole="http://www.rddl.org/purposes#schema-validation">
<a href="http://app.example.do/example.xslt">An Example XML Schema</a>
</rddl:resource>
</li>
<li>
<rddl:resource id="dtd" xlink:type="simple"
xlink:href="http://app.example.do/example.dtd"
xlink:role="http://www.isi.edu/in-notes/iana/assignments/media-types/
application/xml-dtd"
xlink:title="Example DTD"
xlink:arcrole="http://www.rddl.org/purposes#validation">
<a href="http://app.example.do/example.dtd">An Example DTD</a>
</rddl:resource>
</li>
<li>
<rddl:resource xlink:type="simple"
xlink:href="http://app.example.do/api.html"
xlink:role="http://www.w3.org/1999/xhtml"
xlink:title="Example API Reference"
xlink:arcrole="http://www.rddl.org/purposes#reference">
<a href="http://app.example.do/api.html">An Example API Reference</a>
</rddl:resource>
</li>
<li>
<rddl:resource xlink:type="simple"
xlink:href="http://app.example.com/video.mpg"
xlink:role="http://www.isi.edu/in-notes/iana/assignments/media-types/video/mpeg"
xlink:title="Explanatory Video"
xlink:arcrole="http://www.rddl.org/purposes#software-package">
<a href="http://app.example.com/video.mpg">Explanatory Video</a>
</rddl:resource>
</li>
<li>
<rddl:resource xlink:type="simple"
xlink:href="http://app.example.com/video2.mpg"
xlink:role="http://www.isi.edu/in-notes/iana/assignments/media-types/video/mpeg"
xlink:title="Explanatory Video 2"
xlink:arcrole="http://www.rddl.org/purposes#software-package">
<a href="http://app.example.com/video2.mpg">Explanatory Video</a>
</rddl:resource>
</li>
</ul>
</body>
</html>


  如 清单 1 所示RDDL 文档就是 XHTML 文档只不过增加了 <resource> 元素用于描述文档中引用资源这个 <resource> 元素用 XLink 修饰包括描述资源标题、目标、角色和用途属性上述文档列出了多种资源:包括 DTD、XML Schema、XHTML 文档还有两个 MPEG 媒体文件

  <resource> 属性中title 和 href 很简单分别提供了串描述和链接目标 URL<resource> 元素 role 和 arcrole 属性稍微复杂role 属性描述了资源性质必须是指向资源名称空间或者引用资源 MIME 类型 URIhttp://www.rddl.org/natures/ 列出了常见性质arcrole 属性指定了资源用途参见 http://www.rddl.org/purposes/

  上述内容对于 RDDL 1.0 来说是对但是 2004 年 1 月发布了 RDDL 规范标准更新草案 RDDL 2.0取消了 <resource> 元素及其属性该规范标准建议使用新属性 nature 和 purpose 将 RDDL 信息内嵌在标准 XHTML <a> 元素中这两个属性相当于原来 <resource> 元素中 role 和 arcrole 属性但是XML_RDDL 包不支持 RDDL 2.0因此本文中例子仅适用于 RDDL 1.0

  使用 PHP 访问 RDDL 信息

  得到包含 RDDL 资源定义 XHTML 文档的后使用 XML_RDDL 访问其中各类信息很简单清单 2 示范了使用 PHP 从 XHTML 文档中检索全部 RDDL 资源过程:

  清单 2. 使用 PHP 解析 RDDL 数据

<?php
// file
'XML/RDDL.php';
// create RDDL parser
// parse RDDL file
$rddl = XML_RDDL;
$rddl->parseRDDL('example.html');
// pr .gif' /> of resources
pr_r($rddl->getAllResources);
?>


  清单 2 使用 PHP XML_RDDL 包读取 清单 1 所示 XHTML 文档并检索所有资源首先读入 XML_RDDL 类文件化 XML_RDDL 类个例子然后用该类 parseRDDL 思路方法解析源文件(可以是本地文件或者远程 URL)文档解析的后getAllResources 思路方法用关联返回文档中所有 <resource> 元素列表

  清单 3 显示了 清单 2 输出结果片断:

  清单 3. 清单 2 输出结果

Array
(
[0] => Array
(
[lang] => en
[type] => simple
[href] => http://app.example.do/example.xsd
[role] => http://www.w3.org/2000/10/XMLSchema
[title] => Example XML Schema
[arcrole] => http://www.rddl.org/purposes#schema-validation
)
[1] => Array
(
[lang] => en
[type] => simple
[id] => dtd
[href] => http://app.example.do/example.dtd
[role] => http://www.isi.edu/in-notes/iana/assignments/media-types/
application/xml-dtd
[title] => Example DTD
[arcrole] => http://www.rddl.org/purposes#validation
)
...
)


  利用 PHP foreach 循环很容易改变格式以用 HTML 显示出来清单 4 示范了这个过程结果如 图 1 所示

  清单 4. 将 RDDL 数据格式化为表格

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
<style type="text/css">
table {
width:100%;
border-collapse:collapse;
}
td {
border: solid 1px black;
padding: 5px;
}
</style>
</head>
<body>
<h2>Resources</h2>
<?php
// file
'XML/RDDL.php';
// create RDDL parser
// parse RDDL file
$rddl = XML_RDDL;
$rddl->parseRDDL('example.html');
// get all resources as .gif' />
// format as table
$resources = $rddl->getAllResources;
(is_.gif' />($resources) && count($resources) > 0) {
?>
<table>
<tr>
<td>Resource</td>
<td>Description</td>
<td>Purpose</td>
<td>Role</td>
</tr>
<?php
foreach ($resources as $r) {
$purpose = explode('#', $r['arcrole']);
?>
<tr>
<td><a href="<?php echo $r['href']; ?>"><?php echo $r['href']; ?></a></td>
<td><?php echo $r['title']; ?></td>
<td><?php echo $purpose[1]; ?></td>
<td><a href="<?php echo $r['role']; ?>"><?php echo $r['role']; ?></a></td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
</body>
</html>


  图 1. 用 RDDL 数据创建 Web 页面



  上述例子表明XML_RDDL 包提供个非常有用 PHP 工具可以快速访问 XHTML+RDDL 文档中有关资源特定信息片断次遇到这样文档时不妨试看看效果如何!



相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: