是否有用于从 RDF 查询生成 HTML/XML 的模板格式?
Is there a templating format for generating HTML/XML from RDF queries?
我需要一种格式
- 可以定义RDF数据的查询,
- 可以定义如何根据这些数据生成 XML 文档,
- 用户友好,即易于阅读和编写,并且可供熟悉 XML 和 Turtle 的非程序员使用。
存在类似的格式,但我所知道的所有格式都不能满足所有这些要求。
XSLT
XSLT 可以定义 XML 输出并且是用户友好的。但是,它不能原生查询 RDF,只能查询 XML.
不过,我可以use XSLT to process SPARQL output,但这对用户来说不友好(样板代码太多,而且查询在不同的文件中):
<xsl:template match="s:result">
<div class="cat">
<xsl:value-of select="s:binding[@name='name']/s:literal"/>
</div>
</xsl:template>
SPARQL 模板
这是一种用户友好的 RDF 查询语言,能够进行一些模板化,主要用于纯文本。但是,对于 XML 输出,它不是很有用,并且由于需要正确转义引号而对用户不友好。生成复杂的输出文档也很复杂。
template {
'''<div class="cat">''' ?name '''</div>'''
}
where {
?c a :cat .
?c :name ?name
}
XUL 模板
这种语言正是为我的目的而设计的。但是,它缺乏像 SPARQL 这样的声明式和用户友好的查询语言,并且具有相当冗长的基于 xml 的查询语言。
<div class="cat" datasources="./cats.rdf" ref="http://xmlns.com/cats/cat">
<template>
<query>
<content uri="?start" />
<triple subject="?cat" predicate="http://www.w3.org/1999/02/22-rdf-syntax-ns#type" object="?start" />
<triple subject="?cat" predicate="http://xmlns.com/cats/name" object="?name" />
</query>
<action>
<span value="?name" />
</action>
</template>
</div>
它也比这个多了much more concise syntax,但是还是缺少了Turtle和SPARQL所拥有的语法糖,没有SPARQL那么强大。
-
这种语言可能是最接近我需要的。但是,它仍然感觉像一种编程语言。
<div class="cat">{
for $cat $name from <cats.rdf>
where {$cat a :cat . $cat :name $name}
return $name
}</div>
for
和 return
关键字的使用暗示了一种算法思维,但我需要一些概念上的声明。 {}
块和 xml 标签的混合也会让非程序员感到困惑,特别是在 return
子句中返回 XML 标签的复杂查询中。
我想要一些简单而强大的东西,它在语法上是一个 XML 文档。喜欢
<div class="cat" ql:select="?name" ql:where="?cat a :cat . ?cat :name ?name" />
或更多类似 XSL
<div class="cat">
<ql:value-of select="?cat" where="?cat a :cat . ?cat :name ?name" />
</div>
(实际上,如果你不能提出现有的东西,我可能会实现像最后一个这样的语言。)
我需要一种格式
- 可以定义RDF数据的查询,
- 可以定义如何根据这些数据生成 XML 文档,
- 用户友好,即易于阅读和编写,并且可供熟悉 XML 和 Turtle 的非程序员使用。
存在类似的格式,但我所知道的所有格式都不能满足所有这些要求。
XSLT
XSLT 可以定义 XML 输出并且是用户友好的。但是,它不能原生查询 RDF,只能查询 XML.
不过,我可以use XSLT to process SPARQL output,但这对用户来说不友好(样板代码太多,而且查询在不同的文件中):
<xsl:template match="s:result"> <div class="cat"> <xsl:value-of select="s:binding[@name='name']/s:literal"/> </div> </xsl:template>
SPARQL 模板
这是一种用户友好的 RDF 查询语言,能够进行一些模板化,主要用于纯文本。但是,对于 XML 输出,它不是很有用,并且由于需要正确转义引号而对用户不友好。生成复杂的输出文档也很复杂。
template { '''<div class="cat">''' ?name '''</div>''' } where { ?c a :cat . ?c :name ?name }
XUL 模板
这种语言正是为我的目的而设计的。但是,它缺乏像 SPARQL 这样的声明式和用户友好的查询语言,并且具有相当冗长的基于 xml 的查询语言。
<div class="cat" datasources="./cats.rdf" ref="http://xmlns.com/cats/cat"> <template> <query> <content uri="?start" /> <triple subject="?cat" predicate="http://www.w3.org/1999/02/22-rdf-syntax-ns#type" object="?start" /> <triple subject="?cat" predicate="http://xmlns.com/cats/name" object="?name" /> </query> <action> <span value="?name" /> </action> </template> </div>
它也比这个多了much more concise syntax,但是还是缺少了Turtle和SPARQL所拥有的语法糖,没有SPARQL那么强大。
-
这种语言可能是最接近我需要的。但是,它仍然感觉像一种编程语言。
<div class="cat">{ for $cat $name from <cats.rdf> where {$cat a :cat . $cat :name $name} return $name }</div>
for
和return
关键字的使用暗示了一种算法思维,但我需要一些概念上的声明。{}
块和 xml 标签的混合也会让非程序员感到困惑,特别是在return
子句中返回 XML 标签的复杂查询中。
我想要一些简单而强大的东西,它在语法上是一个 XML 文档。喜欢
<div class="cat" ql:select="?name" ql:where="?cat a :cat . ?cat :name ?name" />
或更多类似 XSL
<div class="cat">
<ql:value-of select="?cat" where="?cat a :cat . ?cat :name ?name" />
</div>
(实际上,如果你不能提出现有的东西,我可能会实现像最后一个这样的语言。)