Sparql-条件输出

Sparql-条件输出,sparql,rdf,semantic-web,triples,skos,Sparql,Rdf,Semantic Web,Triples,Skos,我对语义网和sparql非常陌生。我有一个内部本体,它使用SmartLogic来管理数据 我正在写一些简单的查询来开始 前缀skos:#简单知识组织系统-https://www.w3.org/2004/02/skos/ 前缀skosxl: 前缀rdf: 前缀rdfs: 前缀owl: 前缀ap: 选择不同的 ?受试者预标签?p?o?oL 在哪里{ { ?主题skosxl:prefLabel?主题标签。 ?subjectLabel skosxl:literalForm?subjectPrefLab

我对语义网和sparql非常陌生。我有一个内部本体,它使用SmartLogic来管理数据

我正在写一些简单的查询来开始


前缀skos:#简单知识组织系统-https://www.w3.org/2004/02/skos/
前缀skosxl:
前缀rdf:
前缀rdfs:
前缀owl:
前缀ap:
选择不同的
?受试者预标签?p?o?oL
在哪里{
{
?主题skosxl:prefLabel?主题标签。
?subjectLabel skosxl:literalForm?subjectPrefLabel。
?受试者?p?o。
可选的{o skos:prefLabel?oL}
}
过滤正则表达式(?subjectPrefLabel,“Trump”,“i”)
}订单依据?主题预标签
此查询返回的结果如下所示:

我正在尝试合并
?o和?oL
字段,以便在且仅当存在有效的
?oL
字段时,它将替换
?o
字段


我还没完全弄明白。如果有任何建议,请让我知道

没有数据测试查询有点困难,但在SPARQL 1.1中,您可以使用
BIND(IF(condition,then,else)as?result)

前缀skosxl:
前缀rdf:
前缀owl:
前缀skos:
前缀rdfs:
前缀ap:
选择不同的?主题预标签?p?o
哪里
{?主题skosxl:prefLabel?主题标签。
?主题标签
skosxl:literalForm?subjectPrefLabel。
?受试者?p?o_tmp
可选的
{?o_tmp skos:prefLabel?oL}
绑定(如果(绑定(?oL),?oL,?o_tmp)为?o)
过滤正则表达式(?subjectPrefLabel,“Trump”,“i”)
}
订单依据?主题预标签

谢谢,这很有效,并教会了我一种新的批评机制:)
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> # Simple Knowledge Organization System - https://www.w3.org/2004/02/skos/
PREFIX skosxl: <http://www.w3.org/2008/05/skos-xl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <https://www.w3.org/TR/rdf-schema/>
prefix owl: <http://www.w3.org/2002/07/owl#> 
prefix ap: <http://cv.ap.org/ns>

SELECT DISTINCT
           ?subjectPrefLabel  ?p ?o ?oL

         WHERE {

           {
             ?subject skosxl:prefLabel ?subjectLabel .
             ?subjectLabel skosxl:literalForm ?subjectPrefLabel .
             ?subject ?p ?o .
             OPTIONAL {?o skos:prefLabel ?oL} 

           }

           FILTER regex(?subjectPrefLabel, "Trump", 'i')


         } order by ?subjectPrefLabel