1

好的,很难找到这个问题的标题......对不起......我会尽力更好地解释我的问题!

我有一个图表和一个本体。我有数百个模型,如 Person、Animal、Book 等,其中任何一个都具有多个深度的属性:

<Person1>  <hasName>    <Luca>
<Person1>  <hasAddress> <Address1>
<Address1> <hasStreet>  "Some street"

注意,对于“模型”,我指的是 OWL/RDF 类和属性的集合,在示例中,模型“Person”包含“Person”和“Address”类。

我想做的是用 1 个查询获取整个模型实例……比如 'get('Person1')'

作为一个例子,想想Freebase。在 Freebase 中,它们具有某些类型(我称之为模型)的主题(模型实例),并且一个主题由一个类和几个可能引用其他类(中介)的属性完全描述......当您访问网页时一个freebase主题,你可以看到整个模型。

在本体中我无法定义模型,但我在其他文件中定义了它们并且可以以任何格式使用,从 RDF 到 JSON 和 Ruby/Python 对象。

实际上我不知道如何解决这个问题...我想使用带有 JSON 或 Ruby obj 模型的文件来自动为给定模型创建 SPARQL 查询,但是当您应该在同时..我认为它真的很慢......(我有200种不同的型号......)

是否有任何“纯”SPARQL 方法可以解决我的问题,或者我应该为每个模型制作一个特定的查询?

感谢您的任何帮助!

卢卡

4

2 回答 2

3

基本上你正在寻找的是一个SPARQL 构造查询。因此,如果您想获得与http://example.org/Person1您相关的 RDF,可以做一个简单的描述:

describe <http://example.org/Person1>

这将为您返回关于 的图表http://example.org/Person1。该图中的确切内容实际上取决于 RDF 数据库。规范没有强加任何特定的解释,例如简洁的有界描述。但通常,结果将为您的目的提供足够的信息。

但如果不是,您可以使用构造查询,例如:

construct { <http://example.org/Person1> ?p ?o . ?p rdfs:label ?l } 
where {
  <http://example.org/Person1> ?p ?o.
  ?p rdfs:label ?l.
}

这会让你得到所有三元组http://example.org/Person1的主题和它所拥有的属性的标签。在返回有关http://example.org/Person1.

如果您需要与 的任意级别的关系http://example.org/Person1,那么您需要考虑自行实施CBD或类似策略。这是一个非常简单的实现,如果你需要走那条路,可能只有 100 LOC。

于 2013-01-31T13:15:31.587 回答
0

如果你想做一些类似 Freebase Topic API 的事情,你真的应该考虑将数据放在键/值数据存储中。

查看Seevl的这篇博客文章,他们使用 Redis 对 RDF 数据进行逐个主题的查询。

否则,您需要根据您对架构的了解以及需要扩展哪些属性(例如人员地址)以提供该实体的正确快照,为每个主题构建自定义 SPARQL 查询。

于 2013-01-31T00:41:10.543 回答