Python中的XML库4Suite Server的介绍

发表于 5年以前  | 总阅读数:320 次

在继续阅读本文之前,您务必要对我们在本专栏中将要讨论的一些技术有所了解。我们要使用的技术包括:可扩展的样式表语言转换(Extensible Stylesheet Language Transformations,XSLT)、XML 路径语言(XML Path Language,XPath)和资源描述框架(Resource Description Framework,RDF)。在 参考资料部分有到关于所有这些技术的信息的链接。
4Suite Server 概述

我们将使用由本文作者参与开发的 XML 资源库 4Suite Server(4SS)作为本文中示例的应用程序基础。4Suite Server 是一个 XML 资源库,它带有许多用于 XML 数据和元数据管理的功能程序,无论使用 Python 与否,这些功能程序都使得 4Suite Server 非常适合 Web 服务的快速开发。

本文中的示例是用 4Suite Server 0.11 编写的,需要使用 Python 1.5.2 或更高版本和 4Suite 0.11。在 参考资料部分有下载所有这些应用程序的链接。
在线软件资源库

本文是"Python Web Services Developer"专栏的第二部分,却是关于构建在线软件资源库的三部分系列的第一部分。在这部分中,我们将构建我们的基础架构。在随后的专栏中,我们将特别描述如何使用各种协议(例如,简单对象访问协议(Simple Object Access Protocol,SOAP)、HTTP 和 WWW 分布式编写和版本控制(WWW Distributed Authoring and Versioning,WebDAV))搜索建立了索引的内容和基于代理的内容添加或内容检索。

我们的在线软件资源库服务模式是基于 RPMFind.net 中的 RDF 模式的,但关系不太紧密。RPMFind 是一个用流行的 Red Hat 包管理器(Red Hat Package Manager,RPM)格式为 UNIX 和 Linux 软件包编制目录的系统。它包含关于软件包的关键元数据(包括作者、版本和描述,格式为 RDF,详见 清单 1)。关于 RDF 的简短定义,请阅读本专栏的前一期,或者去 参考资料部分查找这个简单格式基本介绍的链接。

XML 的实际格式是不相关的。事实上,因为所描述的技术适用于任何类型的 XML 内容,所以根本没必要去描述软件。您可以用这种技术描述书的目录、雇员信息,或者甚至是餐馆的酒类一览表。

这个示例中使用的所有代码和数据文件都可以从 参考资料部分的链接下载。
文档定义

在 4SS 的 XML 资源库中,文档定义允许您指定 XML 内容和 RDF 元数据之间的一个映射。为此,您需要定义由三个 XPath 表达式组成的集:一个主语(subject)表达式、一个谓语(predicate)表达式和一个宾语(object)表达式。XPath 表达式允许您在文档中定义一个节点关系集,并允许根据这些关系从文档返回内容的子集。当在资源库中添加、修改和删除每个 XML 文档时,都要根据 XML 文档求这些 XPath 表达式的值。求得的语句,也被称为 三元组(triple),被自动添加到 RDF 数据库(被称作 模型)中,或从其中删除。如果修改了文档,也要更改元组以反映发生的更改,如果文档被删除了,就要把元组从 RDF 服务器上删除。文档定义可以从其它文档继承定义的信息,这允许您定义 XML 内容到 RDF 元数据信息的复杂映射。

在我们的示例应用程序中,我们将扩展其中一个缺省文档定义。缺省文档定义描述了嵌入在 XML 内容中的 Dublin Core 标记到 Dublin Core 语句的映射。Dublin Core 是一个元数据倡议,它定义了基于 Web 的通用对象(例如, Creator 、 Title 和 Date )的一组标准属性。派生出的文档定义将为每个文档再添加一条语句。

如下所示,一个简单的声明将把这个文档的 Creator 元数据设置为求得的某个 XPath 的结果:


    RdfStatement(subject='$uri',
     predicate="http://purl.org/dc/elements/1.1#Title",
     object="/rdf:RDF/s:Software/dc:Creator")

(上面的代码是一个单行语句,但是为了适合这个格式进行了缩排。)

为了添加或更新系统缺省数据,您应该运行 4SS 自带的脚本 populate.py 。这样将从 ftp://ftp.fourthought.com下载有用的数据来更新您的服务器。下载的数据包含一些常用的项,如 Dublin Core 文档定义和 Docbook 样式表(Docbook 是技术文档流行的 XML 格式)。

在安装 4SS 时,植入脚本将自动安装在演示应用程序中。在基于 Unix 的机器上,植入脚本一般存储在 /usr/doc/4SuiteServer-0.11 或 /usr/local/doc/4SuiteServer-0.11 中。在 Windows 机器上,存储目录一般是 c:\Program Files\Python 或 c:\Python20 。 清单 2展示了植入您的基于 4SS 的应用程序的安装过程。
清单 2:植入 4SS 应用程序

复制代码 代码如下:

[molson@penny example]$ python /usr/doc/4SuiteServer-0.11/demo/populate.py
Downloading XML Documents
Downloading Stylesheets
Downloading DocDefs
Adding XML document: 'null'
Adding stylesheet: 'docbook_html1.xslt'
Adding stylesheet: 'presentation_toc.xslt'
Adding stylesheet: 'presentation.xslt'
Adding stylesheet: 'docbook_text1.xslt'
Adding document definition: 'dublin_core'
Adding document definition: 'docbook1'

接下来,我们必须为软件条目清单创建一个文档定义。为了添加定义,我们使用命令行脚本 4ss deserialize docdef ,将序列化的文档定义的文件名作为唯一的参数来传递。例如:

复制代码 代码如下:

[molson@penny example]$ 4ss deserialize docdef software.docdef

内容

我们将从命令行用 4ss create document 给系统添加新内容。在下载示例中,有两个软件清单,它们是名为 software1.rdf 和 software2.rdf 的 XML 文件。为了把这些文件添加到系统中,我们执行 4ss create document ,为它指定要使用的文档定义、要添加的文件的名称以及要赋予系统内资源的一列别名。

首先,我们要为我们服务器上的软件资源库创建一个容器,把容器的许可权设置成允许"uo"组有写访问权限,并允许所有人进行读访问(因为我们想要从这个目录提供 Web 页面):

复制代码 代码如下:

[molson@penny example]$ 4ss create container /softrepo
[molson@penny example]$ 4ss set acl --write=uo --world-read /softrepo

然后,我们把我们的样本下载文件添加到资源库中。尽管 4SS 资源库可以以任意格式存储很多数据,但是它针对存储 XML 数据进行了高度优化。当我们把 .tar 文件添加到资源库中时,我们指定 --imt 选项来设置文件的因特网媒体类型(Internet Media Type,IMT)(在这里是 application/x-gzip )。这个 IMT 除了其它作用,还可以被 HTTP 服务器用于检索 Web 上的内容。请注意,IMT 有时也叫"MIME 类型"。请参阅 清单 3,以了解添加内容的命令。请注意,在一个更复杂的项目中,您可以考虑把二进制文件放在一个单独的容器中。
取内容

取内容就和添加内容一样简单。不过,我们首先一定要将样式表添加到资源库中。我们的示例文件包含了一个非常简单的样式表。为了添加它,您可以使用 4ss create document ,并为其取别名为 software.xslt 。例如:

复制代码 代码如下:

[molson@penny example]$ 4ss create document BASE_XSLT software.xslt softrepo/software.xslt

BASE_XSLT 是一个特殊的文档定义,它告诉 4SS 将这个文档作为一个 XSLT 样式表来进行优化。

添加文档之后,您现在可以用您的 Web 浏览器连接到 4SS HTTP 服务器(支持普通的 Python 和 Apache 服务器)上,然后转到 http://localhost:8080/softrepo/pong.xml 页面。这将从资源库中取出 pong 软件描述文档。如果您正在使用一个支持 IMT text/xml 的浏览器(如 Internet Explorer 或 Mozilla),那么您就可以查看已添加到资源库中的 XML。要告诉 HTTP 侦听器(HTTP Listener)您想在页面被返回之前处理页面(通过在 XSLT 中运行),请指定 xslt URI 查询参数 http://localhost/softrepo/pong.xml?xslt=software.xslt 。

请注意,页面上下载包的链接也指向 localhost。这个链接还将检查 HTTP 侦听器,并取出我们为 pong-0.0.2.tgz 添加的资源。当它被返回到浏览器时,它会指定我们把资源添加到系统时所定义的 IMT。

生成索引页

为了生成索引页,我们将使用 4SS 的一些扩展函数,以使 XSLT 访问 RDF 模型。对于在 4SS 中生成一个索引页的问题,还有其它的解决方案。其中一种解决方案是用 Python 为 HTTP GET 消息写一个定制处理程序。这样做可能在请求 index.html 时需要查询 RDF 模型。另一个解决方案是,每当将一个新文档添加到系统中或者从系统中删除一个文件时,都使用 4SS 事件系统来更新 index.html 文档。

因为 XSLT 总是需要根据一个源文档而被应用,所以我们将给系统添加一个哑源文档。在下载示例中有一个叫 index.doc 的源文档。请用 4ss create document 将这个文档添加到资源库中,如下所示:

复制代码 代码如下:

[molson@penny example]$ 4ss create document index.doc BASE_XML softrepo/index.doc
[molson@penny example]$ 4ss set acl --world-read softrepo/index.doc

我们将在样式表中使用扩展函数 rdf.complete 来收集关于系统中所有软件的信息。扩展函数调用 RDF 模型上的 complete 方法。 complete 方法允许您搜索 RDF 模型以找到一个匹配指定模式的语句。该方法最多要用三个参数:一个 subject 、一个 predicate 和一个可选的 object 。这些参数都可以是空字符串。它将返回匹配所有指定值的一列语句。例如,如果您输入主语 foo,宾语 bar,将返回有主语 foo,任意谓语以及宾语 bar 的语句。

4SS 自动创建把文档链接到文档定义上的 RDF 语句。这些语句的主语是文档的 URI,谓语是 http://schemas.4suite.org/4ss#metaxml.docdef ,宾语是文档定义名。知道了这一点,我们就可以用一个简单的 complete 调用指定谓语和宾语,用 software 文档定义在我们的系统中获得一个文档列表。

我们用来生成索引的样式表叫 index.xslt 。与源文档根目录匹配的模板首先调用了 rdf.complete 。这个函数调用在 RDF 模型上为所有将 http://schemas.4suite.org/4ss#metaxml.docdef 作为谓语,将 software 作为宾语的语句进行了一次 complete 操作。 rdf.complete 函数调用的结果是 Statement 元素的一个节点集。每个 Statement 元素有三个子元素: Subject 、 Predicate 和 Object 。如 清单 4 所示,我们根据函数的结果使用 xsl:apply-templates ,并且显示模板内每个在 Statement 上匹配的软件项。

为了查看生成的索引页,请将您的浏览器转到 http://localhost:8080/softrepo/index.doc?xslt=index.xslt 。

然而,这个索引并不是一成不变的,我们很容易就能够明白如何将这个简单的页扩展为以任何风格显示软件标题。我们可以在样式表中修改显示每一项所用的方式,还可以通过向文档定义添加更多的映射来调整可用于样式表的数据。

结束语

哦,我们还是没有编写任何 Python 代码,但是我们确实粗略了解了一下 4Suite Server 的一些功能。在下个月的专栏中,我们将在本示例的基础上加以扩展,让软件资源库具有内容管理的功能,并能够搜索生成的所有元数据。

 相关推荐

刘强东夫妇:“移民美国”传言被驳斥

京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。

发布于:1年以前  |  808次阅读  |  详细内容 »

博主曝三大运营商,将集体采购百万台华为Mate60系列

日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。

发布于:1年以前  |  770次阅读  |  详细内容 »

ASML CEO警告:出口管制不是可行做法,不要“逼迫中国大陆创新”

据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。

发布于:1年以前  |  756次阅读  |  详细内容 »

抖音中长视频App青桃更名抖音精选,字节再发力对抗B站

今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。

发布于:1年以前  |  648次阅读  |  详细内容 »

威马CDO:中国每百户家庭仅17户有车

日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。

发布于:1年以前  |  589次阅读  |  详细内容 »

研究发现维生素 C 等抗氧化剂会刺激癌症生长和转移

近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。

发布于:1年以前  |  449次阅读  |  详细内容 »

苹果据称正引入3D打印技术,用以生产智能手表的钢质底盘

据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。

发布于:1年以前  |  446次阅读  |  详细内容 »

千万级抖音网红秀才账号被封禁

9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...

发布于:1年以前  |  445次阅读  |  详细内容 »

亚马逊股东起诉公司和贝索斯,称其在购买卫星发射服务时忽视了 SpaceX

9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。

发布于:1年以前  |  444次阅读  |  详细内容 »

苹果上线AppsbyApple网站,以推广自家应用程序

据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。

发布于:1年以前  |  442次阅读  |  详细内容 »

特斯拉美国降价引发投资者不满:“这是短期麻醉剂”

特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。

发布于:1年以前  |  441次阅读  |  详细内容 »

光刻机巨头阿斯麦:拿到许可,继续对华出口

据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。

发布于:1年以前  |  437次阅读  |  详细内容 »

马斯克与库克首次隔空合作:为苹果提供卫星服务

近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。

发布于:1年以前  |  430次阅读  |  详细内容 »

𝕏(推特)调整隐私政策,可拿用户发布的信息训练 AI 模型

据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。

发布于:1年以前  |  428次阅读  |  详细内容 »

荣耀CEO谈华为手机回归:替老同事们高兴,对行业也是好事

9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI操控无人机能力超越人类冠军

《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI生成的蘑菇科普书存在可致命错误

近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。

发布于:1年以前  |  420次阅读  |  详细内容 »

社交媒体平台𝕏计划收集用户生物识别数据与工作教育经历

社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”

发布于:1年以前  |  411次阅读  |  详细内容 »

国产扫地机器人热销欧洲,国产割草机器人抢占欧洲草坪

2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。

发布于:1年以前  |  406次阅读  |  详细内容 »

罗永浩吐槽iPhone15和14不会有区别,除了序列号变了

罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。

发布于:1年以前  |  398次阅读  |  详细内容 »
 相关文章
Android插件化方案 5年以前  |  237231次阅读
vscode超好用的代码书签插件Bookmarks 2年以前  |  8065次阅读
 目录