在 SPARQL 查询中用作主题的 Concat 值 (MarkLogic)
Concat values to use as subject in SPARQL Queries (MarkLogic)
我试图通过连接我的主题、谓词和对象以用作新的 "subject" 节点来在 MarkLogic 中执行 SPARQL 查询。我试图通过下面的查询来做到这一点
SELECT *
WHERE {
?subject </in/relationship/with> ?object .
BIND(concat(?subject, "/in/relationship/with", ?object) AS ?relationship
?relationship </current/status> ?status
}
但是,此查询不起作用,因为 ?relationship
现在每行都包含一个字符串,导致查询的输出完全为空。因此,我想知道这是否可以完成,是否可以将字符串转换为 SPARQL 可以查询的对象。
Stanislav 是正确的,您需要将字符串包装在 IRI() 中。这是直接在 QC 中运行的代码片段。 运行 它针对空数据库,不会污染您的其他数据:
xdmp:document-insert('/triples.xml', <triples>{
sem:triple(sem:iri("http://my/subject1"), sem:iri("/in/relationship/with"), sem:iri("http://my/subject2")),
sem:triple(sem:iri("http://my/subject1/in/relationship/with/http://my/subject2"), sem:iri("/current/status"), "My status")
}</triples>)
;
sem:sparql('
SELECT *
WHERE {
?subject </in/relationship/with> ?object.
BIND(IRI(CONCAT(?subject, "/in/relationship/with/", ?object)) AS ?relationship)
?relationship </current/status> ?status.
}
')
这是否是一个明智的方法可能取决于。请记住,MarkLogic 在将关联数据保存在文档中方面特别强大,您可以嵌入三元组,或使用 TDE 从中投影三元组,从而允许您结合文档搜索的优势,并将相关数据保存在一起,同时仍然允许使用 SPARQL 推理事实。
HTH!
我试图通过连接我的主题、谓词和对象以用作新的 "subject" 节点来在 MarkLogic 中执行 SPARQL 查询。我试图通过下面的查询来做到这一点
SELECT *
WHERE {
?subject </in/relationship/with> ?object .
BIND(concat(?subject, "/in/relationship/with", ?object) AS ?relationship
?relationship </current/status> ?status
}
但是,此查询不起作用,因为 ?relationship
现在每行都包含一个字符串,导致查询的输出完全为空。因此,我想知道这是否可以完成,是否可以将字符串转换为 SPARQL 可以查询的对象。
Stanislav 是正确的,您需要将字符串包装在 IRI() 中。这是直接在 QC 中运行的代码片段。 运行 它针对空数据库,不会污染您的其他数据:
xdmp:document-insert('/triples.xml', <triples>{
sem:triple(sem:iri("http://my/subject1"), sem:iri("/in/relationship/with"), sem:iri("http://my/subject2")),
sem:triple(sem:iri("http://my/subject1/in/relationship/with/http://my/subject2"), sem:iri("/current/status"), "My status")
}</triples>)
;
sem:sparql('
SELECT *
WHERE {
?subject </in/relationship/with> ?object.
BIND(IRI(CONCAT(?subject, "/in/relationship/with/", ?object)) AS ?relationship)
?relationship </current/status> ?status.
}
')
这是否是一个明智的方法可能取决于。请记住,MarkLogic 在将关联数据保存在文档中方面特别强大,您可以嵌入三元组,或使用 TDE 从中投影三元组,从而允许您结合文档搜索的优势,并将相关数据保存在一起,同时仍然允许使用 SPARQL 推理事实。
HTH!