我需要一种格式
存在类似的格式,但我所知道的所有格式都不能满足所有这些要求。
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>
(实际上,如果你不能建议现有的东西,我可能会实现最后一种语言。)