我正在尝试在一个ttl文件上使用SPARQL创建查询,在该文件中,我的部分图表表示链接,如下所示:
是否可以搜索借方类型并获取与其父级关联的所有文字,即:R494Vol1D2,Salvo,Vassallo?
我需要使用路径吗?
答案 0 :(得分:0)
正如AKSW正确说的那样,RDF与有向图有关。因此,我根据您的图形图像创建了一个小的三元组文件。我认为数据集看起来像这样:
<http://natarchives.com.mt/deed/R494Vol1-D2> <http://purl.org/dc/terms/type> "Debit".
<http://natarchives.com.mt/deed/R494Vol1-D2> <http://purl.org/dc/terms/identifier> "R494Vol1D2".
<http://natarchives.com.mt/deed/R494Vol1-D2> <http://data.archiveshub.ac.uk/def/associatedWith> <http://natarchives.com.mt/person/person796>.
<http://natarchives.com.mt/person/person796> <http://xmlns.com/foaf/0.1/firstName> "Salvo".
<http://natarchives.com.mt/person/person796> <http://xmlns.com/foaf/0.1/family_name> "Vassallo".
我也不知道前缀locah
,但是根据http://prefix.cc,它代表http://data.archiveshub.ac.uk/def/
因此,如果此数据集正确,则可以使用以下查询:
1 SELECT ?literal WHERE{
2 ?start <http://purl.org/dc/terms/type> "Debit".
3 ?start <http://data.archiveshub.ac.uk/def/associatedWith>* ?parent.
4 ?parent ?hasLiteral ?literal.
5 FILTER(isLiteral(?literal) && ?literal != "Debit" )
6 }
在第2行中,我们定义路径的起点,即每个具有“借方”类型的顶点。然后,我们寻找所有连接到?的顶点均以标记为<http://data.archiveshub.ac.uk/def/associatedWith>
的边开始。然后将这些顶点绑定到?parent
。之后,我们寻找所有以?parent
为主题的三元组并将对象存储在?literal
中。在第6行中,我们从?literal
过滤掉所有不是文字的或不是“借方”的东西,从而得到期望的结果。
如果我对<http://data.archiveshub.ac.uk/def/associatedWith>
的方向建模错误,则可以将查询的第3行更改为:
?start ^<http://data.archiveshub.ac.uk/def/associatedWith>* ?parent
这将改变边缘的方向。
并回答是否需要使用路径的问题:如果您不知道标有<http://data.archiveshub.ac.uk/def/associatedWith>
的边的路径将是多长,那么我认为是,您将必须使用*或+属性路径。