Rdf 返回带前缀的名称而不是IRIs的SPARQL查询

Rdf 返回带前缀的名称而不是IRIs的SPARQL查询,rdf,sparql,jena,Rdf,Sparql,Jena,假设我有以下三个: @prefix : <http://example.org/>. #rdf types :john a :Person. :liz a :Person. :robert a :Person. :dan a :Person. 在前缀名称连接到IRI之前,如何查询前缀名称? 我已经在字符串级别上进行了尝试,但我认为有一种更严肃的方法来实现它: PREFIX : <http://example.org/> SELECT ?str FROM <htt

假设我有以下三个:

@prefix : <http://example.org/>.
#rdf types
:john a :Person.
:liz a :Person.
:robert a :Person.
:dan a :Person.
在前缀名称连接到IRI之前,如何查询前缀名称?

我已经在字符串级别上进行了尝试,但我认为有一种更严肃的方法来实现它:

PREFIX : <http://example.org/>

SELECT ?str
FROM <http://localhost:3030/Exercice3/data/>
WHERE {
    ?x ?y ?z
    BIND(REPLACE(STR(?x),STR(:),STR(':')) AS ?str)
}

有人能帮我吗?

单用SPARQL是不可能的

SPARQL SELECT查询结果包含三种类型的值:IRIs、文字和空白节点。您问题中的查询是最接近返回字符串的查询结果,这些字符串看起来像前缀名称。在SPARQL术语中,返回的值实际上是文本,并且在文本周围必须使用双引号。因此,如果每个值周围没有双引号,就无法实现这一点

带前缀的名称与IRI不是一回事:它只是写IRI的另一种方式。这意味着它不能由SPARQL查询控制,SPARQL查询只以抽象形式返回结果,而是由用于格式化/转换/写入结果的处理器/格式化程序控制


我不知道这在Jena中具体是如何工作的(我自己也是芝麻人),但通常情况下,SPARQL引擎会以某种内部表示形式返回查询结果,例如Java对象。然后,数据的呈现方式取决于您对结果所做的操作。例如,您可以使用SPARQL XML结果格式将其写入XML文件,也可以在其上循环并将输出作为文本打印到标准输出。关键是:结果中的任何IRI是否以前缀名称呈现/显示取决于处理结果的方式,而不是查询本身

仅使用SPARQL无法实现您想要的功能

SPARQL SELECT查询结果包含三种类型的值:IRIs、文字和空白节点。您问题中的查询是最接近返回字符串的查询结果,这些字符串看起来像前缀名称。在SPARQL术语中,返回的值实际上是文本,并且在文本周围必须使用双引号。因此,如果每个值周围没有双引号,就无法实现这一点

带前缀的名称与IRI不是一回事:它只是写IRI的另一种方式。这意味着它不能由SPARQL查询控制,SPARQL查询只以抽象形式返回结果,而是由用于格式化/转换/写入结果的处理器/格式化程序控制


我不知道这在Jena中具体是如何工作的(我自己也是芝麻人),但通常情况下,SPARQL引擎会以某种内部表示形式返回查询结果,例如Java对象。然后,数据的呈现方式取决于您对结果所做的操作。例如,您可以使用SPARQL XML结果格式将其写入XML文件,也可以在其上循环并将输出作为文本打印到标准输出。关键是:结果中的任何IRI是否以前缀名称呈现/显示取决于处理结果的方式,而不是查询本身

帮你做什么?你得到了你需要的,不是吗?不,我应该返回的解决方案中没有引号。因为我猜他们不希望结果是字符串。这与查询结果的序列化有关。如果您使用,那么Jena仅在包含逗号时才将文字置于引号中。有什么帮助吗?你得到了你需要的,不是吗?不,我应该返回的解决方案中没有引号。因为我猜他们不希望结果是字符串。这与查询结果的序列化有关。如果使用,则Jena仅当文字包含逗号时才将其置于引号中。
<http://example.org/john>
<http://example.org/liz>
<http://example.org/robert>
<http://example.org/dan>
:john
:liz
:robert
:dan
PREFIX : <http://example.org/>

SELECT ?str
FROM <http://localhost:3030/Exercice3/data/>
WHERE {
    ?x ?y ?z
    BIND(REPLACE(STR(?x),STR(:),STR(':')) AS ?str)
}
":john"
":liz"
":robert"
":dan"