繁体   English   中英

SPARQL CONSTRUCT尝试从条件子查询中绑定是/否值

[英]SPARQL CONSTRUCT trying to BIND yes/no values from conditional sub query

继续从另一个问题在这里 ...

我下面有一个(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

对此变量,我想绑定一个条件子查询的输出,该条件子查询在特定?publication所有可能的?publicationLink值内寻找值(在本示例中为“ internal.url”)。

因此,带有所需加法的RDF输出可能返回如下内容:

<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>

我尝试在上面添加所需的子查询,并将其输出成功绑定到fb:linkInternalExists尝试均未成功。 所以我的问题是,修改后的查询会是什么样子。

问候

您实际上不需要此子查询。 您所需要的只是一个结合了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 -clause:

BIND (IF(BOUND(?internalLink), "Yes", "No") as ?internalLinkExists)

当然,最后,将以下内容添加到您的CONSTRUCT -clause中:

?publication fb:linkInternalExists ?internalLinkExists .

在尝试使用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变量。 任务完成!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM