三重商店如何使用链接数据?
How do triple stores use linked data?
假设我有以下场景:
我有一些不同的 ontology 文件托管在网络上不同域的某个地方,例如 _http://foo1.com/ontolgy1.owl#, _http://foo2.com/ontology2.owl# 等等
我还有一个三重存储,我想在其中插入基于 ontology 文件的实例,如下所示:
INSERT DATA
{
<http://foo1.com/instance1> a <http://foo1.com/ontolgy1.owl#class1>.
<http://foo2.com/instance2> a <http://foo2.com/ontolgy2.owl#class2>.
<http://foo2.com/instance2x> a <http://foo2.com/ontolgy2.owl#class2x>.
}
假设 _http://foo2.com/ontolgy2.owl#class2x 是 _http://foo2.com/ontolgy2.owl#class2 的子类在同一个 ontology.
中定义
在插入之后,如果我 运行 像这样的 SPARQL 查询:
select ?a
where
{
?a rdf:type ?type.
?type rdfs:subClassOf* <http://foo2.com/ontolgy2.owl#class2> .
}
结果将是:
<http://foo2.com/instance2>
而不是:
<http://foo2.com/instance2>
<http://foo2.com/instance2x>
理应如此。发生这种情况是因为 ontology 文件 _http://foo2.com/ontolgy2.owl# 未导入到三元组存储中。
我的问题是:
我们可以在这个例子中讨论 "linked" 数据吗?因为在我看来,它根本没有联系。必须在本地导入三元组存储,然后就可以开始查询了。
比方说,如果您想 运行 查询由 20 ontology 个文件描述的一些复杂数据,则需要导入所有 20 个 ontology 文件。
是不是有点失望?
我是否误解了三重存储和链接数据以及它们如何协同工作?
as it should be.
我不确定应该在这里是正确的术语。 SPARQL 查询的语义是查询存储在端点处特定图形中的数据。 IRI 或多或少是 不透明 标识符;仅仅因为它们也可能是可以从中检索额外数据的 URL,并不强制任何特定系统实际进行这种检索。这样做很容易使查询行为不可预测:"this query worked yesterday, why doesn't it work today? oh, a remote website is no longer available…".
Lets say that _http://foo2.com/ontolgy2.owl#class2x is a subclass of _http://foo2.com/ontolgy2.owl#class2 defined within the same ontology.
记住,由于 IRI 是不透明的,任何人 都可以在任何 ontology 中定义术语。总是有可能出现其他人对资源发表其他意见的情况。您无法跟踪所有这些信息。例如,如果我去写一个 ontology,我可以将 http://foo2.com/ontolgy2.owl#class2x 声明为 class 并且断言它等同于 http://dbpedia.org/ontology/Person。系统是否应该有某种方式知道我在其他地方做了什么,即使知道了,是否应该要求它去从中检索信息?如果我制作一个大小为 2GB 的 ontology 怎么办?当然不能期望您的端点去检索它只是为了回答快速查询?
Can we talk in this example about "linked" data? Because it seems to
me that it is not linked at all. It has to be imported locally into a
triple store, and after that you can start querying.
Lets say if wan to run a query on some complex data that is describe
by 20 ontology files, in this case I have to import all 20 ontology
files.
通常是这种情况,关于链接数据的要点是,如果您选择,您有一种获取更多信息的方法,而且您不必这样做在协商如何识别该数据中的资源方面做同样多的工作。但是,您 可以 使用 SPARQL 中的 service 关键字来引用其他端点,这可以提供一种链接。例如,知道 DBpedia 有一个 SPARQL 端点,我可以 运行 一个将 DBpedia 与类似这样的东西合并的本地查询:
select ?person ?localValue ?publicName {
?person :hasLocalValueOfInterest ?localValue
service <http://dbpedia.org/sparql> {
?person foaf:name ?publicName
}
}
您可以使用多个 service 块来聚合来自多个端点的数据;你不仅限于一个。这对我来说很漂亮 "linked"。
假设我有以下场景:
我有一些不同的 ontology 文件托管在网络上不同域的某个地方,例如 _http://foo1.com/ontolgy1.owl#, _http://foo2.com/ontology2.owl# 等等
我还有一个三重存储,我想在其中插入基于 ontology 文件的实例,如下所示:
INSERT DATA
{
<http://foo1.com/instance1> a <http://foo1.com/ontolgy1.owl#class1>.
<http://foo2.com/instance2> a <http://foo2.com/ontolgy2.owl#class2>.
<http://foo2.com/instance2x> a <http://foo2.com/ontolgy2.owl#class2x>.
}
假设 _http://foo2.com/ontolgy2.owl#class2x 是 _http://foo2.com/ontolgy2.owl#class2 的子类在同一个 ontology.
中定义在插入之后,如果我 运行 像这样的 SPARQL 查询:
select ?a
where
{
?a rdf:type ?type.
?type rdfs:subClassOf* <http://foo2.com/ontolgy2.owl#class2> .
}
结果将是:
<http://foo2.com/instance2>
而不是:
<http://foo2.com/instance2>
<http://foo2.com/instance2x>
理应如此。发生这种情况是因为 ontology 文件 _http://foo2.com/ontolgy2.owl# 未导入到三元组存储中。
我的问题是:
我们可以在这个例子中讨论 "linked" 数据吗?因为在我看来,它根本没有联系。必须在本地导入三元组存储,然后就可以开始查询了。
比方说,如果您想 运行 查询由 20 ontology 个文件描述的一些复杂数据,则需要导入所有 20 个 ontology 文件。
是不是有点失望?
我是否误解了三重存储和链接数据以及它们如何协同工作?
as it should be.
我不确定应该在这里是正确的术语。 SPARQL 查询的语义是查询存储在端点处特定图形中的数据。 IRI 或多或少是 不透明 标识符;仅仅因为它们也可能是可以从中检索额外数据的 URL,并不强制任何特定系统实际进行这种检索。这样做很容易使查询行为不可预测:"this query worked yesterday, why doesn't it work today? oh, a remote website is no longer available…".
Lets say that _http://foo2.com/ontolgy2.owl#class2x is a subclass of _http://foo2.com/ontolgy2.owl#class2 defined within the same ontology.
记住,由于 IRI 是不透明的,任何人 都可以在任何 ontology 中定义术语。总是有可能出现其他人对资源发表其他意见的情况。您无法跟踪所有这些信息。例如,如果我去写一个 ontology,我可以将 http://foo2.com/ontolgy2.owl#class2x 声明为 class 并且断言它等同于 http://dbpedia.org/ontology/Person。系统是否应该有某种方式知道我在其他地方做了什么,即使知道了,是否应该要求它去从中检索信息?如果我制作一个大小为 2GB 的 ontology 怎么办?当然不能期望您的端点去检索它只是为了回答快速查询?
Can we talk in this example about "linked" data? Because it seems to me that it is not linked at all. It has to be imported locally into a triple store, and after that you can start querying.
Lets say if wan to run a query on some complex data that is describe by 20 ontology files, in this case I have to import all 20 ontology files.
通常是这种情况,关于链接数据的要点是,如果您选择,您有一种获取更多信息的方法,而且您不必这样做在协商如何识别该数据中的资源方面做同样多的工作。但是,您 可以 使用 SPARQL 中的 service 关键字来引用其他端点,这可以提供一种链接。例如,知道 DBpedia 有一个 SPARQL 端点,我可以 运行 一个将 DBpedia 与类似这样的东西合并的本地查询:
select ?person ?localValue ?publicName {
?person :hasLocalValueOfInterest ?localValue
service <http://dbpedia.org/sparql> {
?person foaf:name ?publicName
}
}
您可以使用多个 service 块来聚合来自多个端点的数据;你不仅限于一个。这对我来说很漂亮 "linked"。