【发布时间】:2017-10-11 02:04:37
【问题描述】:
我正在尝试创建一个 SPARQL 查询来构建或插入图表,遵循 BIBFRAME 2.0 模型,使用包含大量数据的个人数据库。我想得到这样的结果:
Subject a bf:Topic, madsrdf:ComplexSubject ;
rdfs:label "Subject" ;
madsrdf:componentList [ a madsrdf:Topic ;
madsrdf:authoritativeLabel "FirstSubject" ] ;
但我不知道如何在 SPARQL 中做到这一点。我尝试了这个查询,但我总是得到很多空白节点(就像我的数据库中有空“?主题”字段的寄存器一样多):
PREFIX bf: <http://id.loc.gov/ontologies/bibframe/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix madsrdf: <http://www.loc.gov/mads/rdf/v1#>
CONSTRUCT{
?subject a bf:Topic, madsrdf:ComplexSubject ;
rdfs:label ?subject;
madsrdf:componentList [ a madsrdf:Topic ;
madsrdf:authoritativeLabel ?firstsubject ];
} where{ service <http://localhost:.......> {
?registerRow a <urn:Row> ;
OPTIONAL{?registerRow <urn:col:Subject> ?subject ;}
OPTIONAL{?registerRow <urn:col:FirstSubject> ?firstsubject ;}
}
}
【问题讨论】:
-
CONSTRUCT 查询的第一部分针对与 WHERE 部分中的模式匹配的每个 RDF 子图完成。可以肯定的是,它将为每一行完成。
-
而在
OPTIONAL部分中,您使用不同的变量?registroRow而不是?registerRow,因此它没有连接,因此,交叉产品有很多条目。 -
对不起,他们都是
?registerRow。问题一直存在。 -
问题是什么意思?你能展示一些样本数据+相应的结果吗?这将使对问题的理解更容易 - 至少对我来说:D
-
我在localhost:.. 有一个数据库,有很多列(其中两个是主题和第一主题)和 1200 行,但是在主题和第一主题中只有4 行有值和 1196 个空行(因此它们出现在
OPTIONAL中)。当我在 SPARQL 中执行查询时,我得到了我想要的图表,相对于 4 行的值,但也有很多带有空行中的空白节点的图表。
标签: mysql sparql rdf graphdb blank-nodes