【发布时间】:2020-12-16 01:41:40
【问题描述】:
我有一个 RDF 图,其中包含使用不同本体描述的数据(想想 VCARD 和 FOAF)。
现在,为了让我的查询更简单,我想构建一个新图,在其中我将一个本体映射到另一个本体上,以便在一个本体中描述数据。
我已经弄清楚了映射部分,但我正在寻找一种选择“剩余三元组”的方法,即那些已经在正确本体中的 (因为这些在映射后应该保持不变)。
我认为应该有一种方法可以通过否定来做到这一点,但我似乎无法弄清楚。
例如,假设我有以下 RDF 图:
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
@base <http://example.org/>
<somePerson>
a foaf:Person .
<someOtherPerson>
a vcard:Individual .
# [Some more triples]
我想把它映射到:
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@base <http://example.org/>
<somePerson>
a foaf:Person .
<someOtherPerson>
a foaf:Person.
# [Some more triples]
在不使用 VCARD 的情况下描述数据。
从第一个到第二个的映射很简单,但我正在寻找一种简单的方法来保持其他三元组不变。 (基本上将它们复制到输出中)。
【问题讨论】:
-
我不完全理解,但
FILTER NOT EXISTS(或使用MINUS)与您用于映射的模式相同,这放入 CONSTRUCT 查询(或 INSERT 可以工作。显然,它使用最小示例 + 映射查询 + 预期结果会更容易。 -
感谢您的回复,为了清楚起见,我添加了一个示例。与此同时,我找到了一种方法来实现这一点,但这很麻烦: 1. 我查询要翻译的三元组。 2. 我对一般
?x ?y ?z .进行第二次查询,并为我在第一次查询中使用的每个语句使用FILTER NOT EXISTS。 3.我采取两者的结合。 -
是的,这正是我的评论的意思。重复映射部分,但将其放入
FILTER NOT EXISTS- 这是常见的方式 -
好的,我希望可能有一个更优雅的解决方案,但如果它有效的话。我将添加一个答案以供将来参考。