继续另一个question here ...
我有一个(摘录自a)构造查询,可以根据需要成功提取记录。
CONSTRUCT {
?publication fb:type ?type;
fb:publicationLabel ?publicationLabel;
fb:publicationType ?publicationTypeLabel;
fb:publicationLink ?publicationLink;
}
WHERE {
?publication a bibo:Document .
?publication rdfs:Label ?publicationLabel .
?publication vitro:mostSpecificType ?publicationType .
?publicationType rdfs:Label ?publicationTypeLabel .
?publication obo:ARG_2000028 ?vcard .
?vcard vcard:hasURL ?urllink .
?urllink vcard:url ?publicationLink
}
以上查询(略微调整)目前工作正常。我现在正在尝试添加以下变量:fb:linkInternalExists
对于此变量,我想绑定条件子查询的输出,该子查询在特定{的所有可能?publicationLink
值中查找值(我们将在本示例中说“internal.url”) {1}}。
所以带有所需加法的RDF输出可以返回如下内容:
?publication
我尝试将所需的子查询添加到上面,并成功将其输出绑定到<rdf:Description rdf:about="https://abcd.fgh/individual/publication12345">
<fb:publicationLabel>example record 1</fb:publicationLabel>
<fb:publicationType>journal</fb:publicationType>
<fb:publicationLink>http://external.url/bcde</fb:publicationType>
<fb:publicationLink>http://external.url/abcd</fb:publicationType>
<fb:linkInternalExists>No</fb:linkInternalExists>
</rdf:Description>
<rdf:Description rdf:about="https://abcd.fgh/individual/publication23456">
<fb:publicationLabel>example record 2</fb:publicationLabel>
<fb:publicationType>conference paper</fb:publicationType>
<fb:publicationLink>http://external.url/2345</fb:publicationType>
<fb:publicationLink>http://external.url/1234</fb:publicationType>
<fb:publicationLink>http://internal.url/1234</fb:publicationType>
<fb:linkInternalExists>Yes</fb:linkInternalExists>
</rdf:Description>
,但都没有成功。所以我的问题是修改后的查询会是什么样的。
此致
答案 0 :(得分:1)
您实际上并不需要子查询。您只需要一个可选模式与BIND表达式相结合。
可选模式应特别寻找内部链接,如下所示:
OPTIONAL {
?vcard vcard:hasURL ?internal .
?internal vcard:url ?internalLink .
FILTER(CONTAINS(STR(?internalLlink), "internal.url")
}
或更简洁:
OPTIONAL {
?vcard vcard:hasURL/vcard:url ?internalLink .
FILTER(CONTAINS(STR(?internalLlink), "internal.url")
}
如果存在这样的链接,则此子句将值绑定到?internalLink
,否则保持未绑定。要将其转换为所需的输出格式,可以添加以下条件BIND
- 子句:
BIND (IF(BOUND(?internalLink), "Yes", "No") as ?internalLinkExists)
然后当然最后将以下内容添加到您的CONSTRUCT
- 子句中:
?publication fb:linkInternalExists ?internalLinkExists .
答案 1 :(得分:1)
在尝试Jeen Broekstra的方法时,查询超时,但它导致我尝试其他方法来隔离internalLink。
我尝试了以下方法,同时从不同的UNION中提取publicationLink和internalLink变量。
{
?publication a bibo:Document.
?publication obo:ARG_2000028 ?vcard.
?vcard vcard:hasURL ?urllink.
?urllink vcard:url ?publicationLink .
}
UNION {
?publication a bibo:Document .
?publication obo:ARG_2000028 ?vcard .
?vcard vcard:hasURL/vcard:url ?internalLink .
FILTER(CONTAINS(STR(?internalLink), "internal.url"))
}
BIND (IF(BOUND(?internalLink), "Yes", "No") as ?internalLinkExists)
这成功返回了?internalLink的值,然后BIND添加了Yes / No变量。完成工作!