SPARQL路径遍历

时间:2018-12-10 14:36:30

标签: sparql

我正在尝试在一个ttl文件上使用SPARQL创建查询,在该文件中,我的部分图表表示链接,如下所示:links of a parent

是否可以搜索借方类型并获取与其父级关联的所有文字,即:R494Vol1D2,Salvo,Vassallo?

我需要使用路径吗?

1 个答案:

答案 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>的边的路径将是多长,那么我认为是,您将必须使用*或+属性路径。

相关问题