Apache-Jena 学习笔记
前言:
这是一个 W3C 的资源描述框架(RDF)和Jena (RDF的Java API)的教程。可以通过原型(Prototyping)快速学习,并快速转向实现。以下内容已经假定你已经对XML和Java都有一定的了解。
RDF 采用 XML 语法,许多熟悉 XML 的人会根据这种语法来理解 RDF。这是错误的,应该从数据模型的角度来理解 RDF。RDF 数据可以用 XML 表示,但是理解 XML 的语法比理解数据模型更重要。
可以从 Apache-jena 下载 Jena API 的实现,包括本教程中使用的所有示例的工作源代码。
介绍:
资源描述框架(Resource Description Framework, RDF)是描述资源的标准(W3C推荐标准)
什么是资源?这是一个相当深刻的问题,且确切的定义仍有争议。
在这里,我们可以把它看作我们可以识别的任何东西。你可以是一个资源,就像你的主页,本教程,数字一和小说《Moby Dick》中的大白鲸一样。
本教程中的例子是关于人的。它们使用 VCARDS 的 RDF 表示。RDF的最佳思维表现模式是由节点和弧组成的图。在 RDF 中,一个简单的 vcard 可能看起来像这样:
资源 John Smith 显示为一个椭圆,由**统一资源标识符 (URI) **标识,在本例中为 “http://…/JohnSmith”。如果你不熟悉URI,可以简单地认为它们是看起来很奇怪的名称。
资源是有属性的。在这些例子中,我们感兴趣的是出现在 John Smith 的名片上的属性类型。图中只显示了一个属性,John Smith 的全名。
属性由一个弧表示,用属性的名称标记。属性的名称也是一个URI。由于URI相当长且笨重,因此图中以 XML qname 形式显示了它。**:
之前的部分 (vcard)称为命名空间前缀,表示命名空间。:
后面的部分(FN)称为本地名称**,表示该命名空间中的名称。当写成 RDF XML 时,属性通常以这种 qname 形式表示,这是在图表和文本中表示它们的方便快捷方式。但是严格来说,属性是通过URI标识的。nsprefix:localname 形式是命名空间的 URI 与 localname 连接的缩写。在浏览器访问属性时,并不要求将其 URI 解析为任何值。
每个属性都有一个值。在这个例子中,这个值是一个字面量,可以认为它是一个由字符组成的字符串。字面量以矩形表示。
Jena是一个Java API,可以用来创建和操作类似于这个的RDF图。Jena有对象类来表示图、资源、属性和字面量。表示资源、属性和字面量的接口分别称为资源(Resource)、属性(Property )和字面量(Literal )。在Jena中,图称为模型,由模型接口表示。
创建这个图或模型的代码很简单:
1 |
|
上述代码从常量定义开始,然后使用 ModelFactory
的方法 createDefaultModel()
在内存中创建一个空模型。Jena 包含 Model 接口的其他实现,例如使用关系数据库的实现:这些类型的模型也可以从 ModelFactory 中获得。
然后创建 John Smith 资源并向其添加属性。该属性由一个“常量(constant)”类 VCARD 提供,该类持有表示 VCARD 模式中所有定义的对象。Jena 为其他著名的模式提供了常量类,例如 RDF 和 RDF 模式本身、Dublin Core和OWL。
这个示例的代码可以在教程1中Jena发行版的/src-examples目录中找到。作为练习,获取并修改这段代码,为自己创建一个简单的VCARD。
创建资源和添加属性的代码可以用层叠样式编写得更简洁:
韩老师意见总结:
- 整体页面:大量的白色背景可能造成视觉疲劳,可以选择一些中性灰色作为背景,也能提升其他颜色的识别度;
- 左侧查询输入框:下拉提示栏应该更宽,让提示词显示完整;
- Schema 图:
- 节点的双线高亮样式可能过于明显,影响了节点中间的文字,样式有待进一步修改;
- 展开节点时,一次性产生大量节点可能造成识别的困难。可以进一步做出区分(透明度等形式,展现强弱次序),加快用户认知速度;
- 右侧树形列表:可以与 Schema 图的节点颜色进行匹配,提升用户识别效率,辅助用户认知;
数据:
交互:左侧搜索栏,节点下拉详情
样式:背景板样式、右侧搜索栏样式
,节点样式、
1 |
|