从RELO看OPENRDF

从RELO看OPENRDF
http://www.openrdf.org
在RELO中,Java从项目到package到class,包含里面的细节,最终都是RDF结构存储在RDF文件或者RDF数据库中, 不但用它表述了Java的关系,还有图上的连线、用户标注,位置、都用RDF描述。

根据我的不完全理解,欢迎大家批斗,RDF里面主要是Statement这个玩意,它是什么呢?就是咱们以前最烦的:
主谓宾。这是基本的自然语言。

如果我们要画个图,可能会对图上的元素建模,包含以下属性:x/y/w/h/text/parent/children/model
这里有比较复杂的对象引用。用RDF描述则表现为几条Statement语句, 随便打开一个relo保存的文档,截取一个对象的描述:
_:node142u7s296x3531
relo-jdt:refType <http://relo.csail.mit.edu/rdf/jdt-wkspc#edu.mit.csail.relo.modelBridge$Artifact> ;
a relo-jdt:field ;
relo-core:name "dstArt" ;
relo-core:initialized "true" ;
relo-jdt:access relo-jdt:access-none ;
relo-jdt:source-resource <http://relo.csail.mit.edu/rdf/relo-eclipse#bin_sledu_slmit_slcsail_slrelo_slmodelBridge_slArtifactRel.class> .
主语是文档中的一个node,每个谓语是有schema的所以几乎可以无限扩展。宾语是各种值。在javadoc中的定义:
Statement createStatement(Resource subject, URI predicate, Value object)
Value: Resource, IdValue, Literal,NativeValue, Resource, ValueNode
Resource: BNode, IdResource, NativeResource, ResourceNode, URI
主语是一个特定结构的Resource, 谓语是URI(近似Java中的URI),宾语可以是各种值。

这种结构的最大好处就是随意查询。任何值为null则代表"*"
StatementIterator getStatements(Resource subj, URI pred, Value obj)
这样,查询某个包下面有哪些类、某个类被那些方法引用等都会很简单,因为我们可以任意组合主谓宾的某个部分区查询。这就是RDF的强项。


在sesame中还支持内存、文本、二进制、关系数据库的存储,给我们的应用带来更大的灵活性。如果你有关系复杂的数据要描述、查询,不妨试试。
一些更复杂的特性不做介绍。[img]http://www.openrdf.org/doc/sesame/users/figures/sesame-arch.png[/img]
注意relo只使用了1.0版本中的存储api,不包含server。


个人认为这种结构更适合将来智能语言的处理。虽然效率不见得很高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值