【问题标题】:For GROUP_CONCAT, "\n" is interpreted as space对于 GROUP_CONCAT,“\n”被解释为空格
【发布时间】:2016-03-09 16:54:09
【问题描述】:

我希望将每个连接的结果都放在一个新行中(结果格式为 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

【问题讨论】:

  • separator = '
    ' 可能有效,但可能需要一些额外的工作,具体取决于您输出此结果的方式。
  • 这不是 sparql 问题。 html 中的换行符并不意味着呈现文档中的换行符。如果你想要一个换行符,就像 Luis 说的那样,使用“
    ”作为分隔符。
  • 请参阅我在问题本身中添加的回复,因为我想提供一个示例。
  • "最新版本的 VOS" 不是有用的描述。请提供明确的版本详细信息,以便清楚。
  • @TallTed 谢谢。完成。

标签: sparql virtuoso


【解决方案1】:

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

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

&lt;br&gt; 是 HTML 标准换行符,也是我期望的分隔符。似乎 Virtuoso 在将最终结果显示为 HTML 表格时正在转义该字符串的尖括号;这可能是一个错误,或者您的目标可能需要不同的方法。

ETA:您的7.20.3214 不是最新的 VOS。截至 2015 年 11 月 6 日,VOS 一直在7.20.3215,这是托管 DBpedia 的版本。 Running your query there,我在the results page 的 HTML 源代码中看到了换行符,但我的浏览器中的渲染按预期将它们变成了空格。

【讨论】:

  • 确实这似乎合乎逻辑,但是当放入“
    ”时,我得到字面上的“
    ”作为分隔符,而不是行。当我在另一个端点上尝试时也会发生同样的情况,例如数据库百科。但有趣的是,在 dbpedia "\n" 中,而 "
    " 没有,给出了与我在内部端点中得到的相同的结果。
  • 这条评论显着改变了您的问题……可能,您发现了一个错误;可能,还有其他事情发生。与任何 Virtuoso 特定问题一样,我(受雇于 OpenLink Software)建议您在 Virtuoso 特定领域提出问题——Virtuoso Users mailing list、公众OpenLink Support Forums、机密OpenLink Support Case。请务必包含您的 Virtuoso 的完整版本!
  • @velitchkov 您是指实际结果,还是 DBpedia 的端点如何将它们格式化为一个漂亮的 HTML 表格?如果实际结果不正确,我会感到惊讶,但如果 HTML 呈现转义可能会破坏呈现的表格的 HTML,我一点也不感到惊讶。
  • 我的意思是 HTML 渲染。
猜你喜欢
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多