语义 Web 上的智能代理以商业为导向的 Web 和学术派的 Web 存在着清晰的差别。商家几千年来就一直在纸媒介上做广告宣传。所以,在 Web 创建之始,他们立即就将其视为宣传推广其产品和服务的又一渠道。Web 随即成为了由人头脑内的设计和创意构造的文档 Web。
学术派则另有想法。计算机科学,作为一种学术研究领域,已经进行了长达数十年的人工智能研究,特别是知识工程研究。学术研究的产物有两个:代理技术和语义 Web,前者是作为一种商业性技术提出的,而后者则是一种科学技术。
语义 Web 也具有明显的商业益处,但是必须要基于 Tim Berners-Lee 在 2006 年提出的 Linked Data Design Note 中所定义的额外规定。通过将公共商业数据作为 Linked Data 公开,商家不仅可以使其产品或服务更易被找到,而且还能让数据容易被机器阅读,而这恰好是多代理系统所需的。将数据作为 Linked Data 公开成为了一种受追捧的市场营销技巧。
语义实现从本体向互连的转移不会阻止 Berners-Lee 等人的辉煌愿景。不过,其进展的方式可能与他们在 2001 年所预期的并不完全符合。得益于 Linked Data,代理现在将能实现跨全球这样一个巨大的图形从一点跟随至另一点。这种转变致使语义 Web 在 2006 年重新受到 Shadbolt 等的关注,也在 2008 年被 Cyganiak 重新启用。
Semantic Web 上的代理实例使用代理和语义 Web 能做的事情很多。比如,可以实现:
- Web 索引代理,将文档转变成正式的基于语义 Web 的知识
- 个人代理,使用正式的语义 Web 知识库来预定假期甚至进行门诊预约
- 多代理系统,能在自己的社区执行操作以构建和维护额外的 Linked Data 集
对于本文,我使用 JADE 框架和 DBpedia Linked Data Set 创建了一个简单示例。它是一个单代理系统,一经激活即可传递两个纯文本参数(一个对象名称及它的一个属性名称),然后搜索 DBpedia 数据集查找结果(属性值)。
代理系统一般使用多种技术构建。对于本例而言,我使用了一种最简单的要求、分析、设计和开发流程。
要求要求声明给出了对此代理系统预期功能的简要描述。在本例中,系统应该能够接受名词和该名词的一个属性键,搜索 Web 上可用的 Linked Open Data 并提供该属性的值。 例举了此系统的可能输出。
清单 1:所要求系统的示例输出1
2
| Noun input: Bob Marley<br>Attribute key Date of Birth<br><br>
Agent is fetching... <br>Attribute value: 1945-02-06
|
分析对于本例,我使用角色模型的分析方法,角色模型是 Gaia Agent Design Methodology(参见 )内提到的一种模型。它描述了特定代理的功能、为何有此功能以及它所具备的责任和权限:
角色模式:SimpleNounAttributeSearcher
- 描述:查找互连语义 Web 获得某对象的属性值
- 权限:从任一开放语义 Web 数据源读取和搜索数据
- 责任:
- 活跃度(Liveness):
- SimpleNounAttributeSearcher = ( GetURIs. BuildQuery. ExecuteQuery. InformUserOfValue }
- Safety:true
设计我使用的是如 所示的目标流程图来显示一个目标到下一个目标之间的流程,从而实现从对象名和属性名寻找属性值的整体目标。
图 1. 目标流程图 来自用户的输入是一个简单的纯文本,而语义 Web 系统通常使用 Uniform Resource Identifier (URI),因此 GetURIs 动作会基于纯文本表示获得一个 URI(这得益于 RDF 模式内的标签关系)。BuildQuery 动作接受这些 URI 并基于之前动作中找到的那些 URI 生成一个简单的查询。ExecuteQuery 之后执行此查询并决定结果是否有用。如果有用,InformUserOfAnswer 会将结果显示给用户。如果没用,这个简单代理以不同的 URI 再次开始。
中所描述的子目标将被转化为 Java 内的简单公共方法,然而整体的目标是转化为 JADE 行为。
我还使用了如 所示的一种面向对象的类图来将目标流程图转变成易于在面向对象语言(比如 Java)内进行开发的形式。这指的是 Agent 和 OneShotBehaviour,它们是 JADE 库的一部分。
图 2. 面向对象的类图 程序中最主要的类是 SemWebSearcherAgent,它的类型是 JADE 库中的 Agent。一个代理通常都会具有一个行为。在本例中,我选择的是 OneShotBehaviour(也是 JADE 库的一部分)并加以扩展以进行 SearchingBehaviour。SearchingBehaviour 将会执行大部分的搜索工作。所需代码附加在本文的 小节。请注意 SearchingBehaviour 的 queryengine 属性。它是基于 SPARQL 端点的 URL,我将在这个端点进行搜索。本例使用的 DBpedia 端点位于:
1
| http://dbpedia.org/sparql
|
它有如下的 HTTP 参数:
1
| format=text/rdf+n3&query=
|
其中,query 是用来发送此 SPARQL 查询的参数。在 SearchingBehaviour 内 Java 方法的使用与目标流程表内的类似。 |