SPARQL:如何将两个主题结合起来用于构造?

SPARQL:如何将两个主题结合起来用于构造?,sparql,rdf,virtuoso,rdfstore,sparqlwrapper,Sparql,Rdf,Virtuoso,Rdfstore,Sparqlwrapper,我正在编写一个SPARQL查询,其中我正在创建一个RDF图。我正在使用SPARQL构造。作为我工作的一个要求,我必须连接两个主题值,并将其与构造语句一起使用。我已经尝试过做以下工作(我的RDF图是以Virtuoso的形式出现的): 请告诉我如何解决此问题。错误基本上是说您连接了两个URI: http://www.ndssl.bi.vt.edu/fuse#PROTOPOP http://www.ndssl.bi.vt.edu/fuse#MIAMI_HOUSEHOLD_2009_1 变成文字。我不

我正在编写一个SPARQL查询,其中我正在创建一个RDF图。我正在使用SPARQL构造。作为我工作的一个要求,我必须连接两个主题值,并将其与构造语句一起使用。我已经尝试过做以下工作(我的RDF图是以Virtuoso的形式出现的):


请告诉我如何解决此问题。

错误基本上是说您连接了两个URI:

http://www.ndssl.bi.vt.edu/fuse#PROTOPOP
http://www.ndssl.bi.vt.edu/fuse#MIAMI_HOUSEHOLD_2009_1
变成文字。我不知道您到底想做什么,但您真的想查看整个URI还是只查看
#
之后的最后一部分?如果要在
#
后面加上concat,则需要省略名称空间

bind (concat(strafter(str(?s),str(fuse:)), strafter(str(?o),str(fuse:))) as ?p)
即使在这个阶段,绑定的结果也是需要转换为URI的
文本

bind (uri(concat(strafter(str(?s),str(fuse:)), strafter(str(?o),str(fuse:)))) as ?p)
通常,我会大量简化您的查询:

prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
prefix fuse: <http://www.ndssl.bi.vt.edu/fuse#>
prefix owl:<http://www.w3.org/2002/07/owl#>

CONSTRUCT {
    ?p1 a d2rq:ClassMap
}

FROM <http://www.ndssl.bi.vt.edu/fuse>
WHERE 
{ 
    fuse:DataSource a owl:Class.
    fuse:OracleDataSource  rdfs:subClassOf fuse:DataSource.
    ?DB a   fuse:DataSource.
    fuse:HouseholdsWithinAdminRegion a owl:Class.
    ?Table a  fuse:HouseholdsWithinAdminRegion.

    bind (uri(concat(strafter(str(?DB),str(fuse:)), 
        strafter(str(?Table),str(fuse:)))) as ?p)
}
前缀rdf:
前缀rdfs:
前缀保险丝:
前缀owl:
构造{
?p1 a d2rq:类映射
}
从…起
哪里
{ 
fuse:DataSource:owl:Class。
fuse:OracleDataSource rdfs:fuse:DataSource的子类。
?DB a保险丝:数据源。
导火索:住宅区a猫头鹰:职业。
?表a保险丝:该地区的住户。
绑定(uri(concat(strafter)(str(?DB),str(fuse:)),
strafter(str(?Table),str(fuse:))as?p)
}

CONCAT返回一个文本(字符串)值,但在构造中用作主题。在RDF中,只有三元组的对象部分可能包含文字值(如错误消息中所述)。如果三元组在某种程度上是非法的,文字主语、bnode谓词,则处理器应该在结果中跳过该三元组。感谢您的回复。但是它不起作用。它给了我以下错误:“Virtuoso 37000错误SP031:SPARQL编译器:内部错误:未实现内置函数。”请告诉我如何修复它。查询不起作用:1)之间有空格?和表2)变量?TD未赋值。@user2151087:可能是您使用的Virtuoso版本中没有实现函数STRAFTER。
bind (uri(concat(strafter(str(?s),str(fuse:)), strafter(str(?o),str(fuse:)))) as ?p)
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
prefix fuse: <http://www.ndssl.bi.vt.edu/fuse#>
prefix owl:<http://www.w3.org/2002/07/owl#>

CONSTRUCT {
    ?p1 a d2rq:ClassMap
}

FROM <http://www.ndssl.bi.vt.edu/fuse>
WHERE 
{ 
    fuse:DataSource a owl:Class.
    fuse:OracleDataSource  rdfs:subClassOf fuse:DataSource.
    ?DB a   fuse:DataSource.
    fuse:HouseholdsWithinAdminRegion a owl:Class.
    ?Table a  fuse:HouseholdsWithinAdminRegion.

    bind (uri(concat(strafter(str(?DB),str(fuse:)), 
        strafter(str(?Table),str(fuse:)))) as ?p)
}