对于GROUP_CONCAT,“\ n”被解释为空格

时间:2016-03-09 16:54:10

标签: sparql virtuoso

我希望将每个连接结果放在一个新行中(结果格式为HTML)。我使用类似的东西:

(Group_Concat(DISTINCT ?result; separator = '\n ') as ?results)

但是,\n\r都被解释为空格,而使用任何普通字符都可以正常工作。

我记得在dbpedia中使用\n得到了我的预期,我还要补充一点,我目前正在使用07.20.3214版本的VOS(如果是配置问题)。

(稍后补充) 这是对<br>的建议用法的回应。以下是对dbpedia的查询,该查询适用于\n,但<br>不适用:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX o: <http://dbpedia.org/ontology/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT DISTINCT  ?name  
                 ?wikipedia_page 
                 ?description 
                 (Group_Concat(DISTINCT ?influencer; separator = '\n') as ?influenced_by) 
                 (Group_Concat(DISTINCT ?_influenced; separator = '\n') as ?influenced) 

WHERE {

 {?person rdf:type o:Philosopher ;
         rdfs:label ?label;
     o:influencedBy/rdfs:label ?influencer.}

OPTIONAL {?person o:influenced/rdfs:label ?_influenced.}

 ?person ^foaf:primaryTopic ?wikipedia_page .
FILTER (lang(?label) = "en") .
FILTER (lang(?influencer) = "en").
FILTER (lang(?_influenced) = "en").


OPTIONAL {?person o:abstract ?abstract .
FILTER (lang(?abstract) = "en") .}

BIND (str(?label)  AS ?name)
BIND (str(?abstract)  AS ?description)

}

GROUP BY ?name  ?wikipedia_page ?description
LIMIT 10

1 个答案:

答案 0 :(得分:2)

正如@LuisSiquot和@JoshuaTaylor在评论中所说,这里的问题既不是SPARQL也不是Virtuoso,而是HTML结果格式。

不保证在HTML呈现中保留空格(包括\n\r\t等)。实际上,它们被指定为由任何兼容的渲染器折叠到单个空间 - 您显然正在使用它。

<br>是HTML标准换行符,是我期望用作分隔符的东西。当将最终结果呈现为HTML表格时,Virtuoso似乎正在转义此字符串的尖括号;这可能是一个错误,或者您的目标可能需要采用不同的方法。

ETA:您的7.20.3214不是最新的VOS。截至2015-11-06,VOS已经在7.20.3215,这是托管DBpedia的版本。 Running your query there,我在the results page的HTML源代码中看到换行符,但我的浏览器中的渲染会按预期将这些换行符放入空格。