是否有用于从 RDF 查询生成 HTML/XML 的模板格式?

Is there a templating format for generating HTML/XML from RDF queries?

我需要一种格式

存在类似的格式,但我所知道的所有格式都不能满足所有这些要求。

  1. 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>
    
  2. SPARQL 模板

    这是一种用户友好的 RDF 查询语言,能够进行一些模板化,主要用于纯文本。但是,对于 XML 输出,它不是很有用,并且由于需要正确转义引号而对用户不友好。生成复杂的输出文档也很复杂。

    template {
      '''<div class="cat">''' ?name '''</div>'''
    }
    where {
      ?c a :cat .
      ?c :name ?name
    }
    
  3. 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那么强大。

  4. XSPARQL

    这种语言可能是最接近我需要的。但是,它仍然感觉像一种编程语言。

    <div class="cat">{
       for $cat $name from <cats.rdf>
       where {$cat a :cat . $cat :name $name}
       return $name
    }</div>
    

    forreturn 关键字的使用暗示了一种算法思维,但我需要一些概念上的声明。 {} 块和 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>

(实际上,如果你不能提出现有的东西,我可能会实现像最后一个这样的语言。)

我找到了UISPIN,这是一种与我梦寐以求的语言非常相似的语言:

<ui:forEach ui:resultSet="{#SELECT ?name WHERE {?c a :cat . ?c :name ?name} }">
  <div class="cat">
    {=?name}      
  </div>
</ui:forEach>

我还找到了 Gloze,一种在 RDF 和自定义 XML 格式之间来回映射的工具,使用 XML 模式作为转换过程的描述符。这可能不是最容易从 RDF 映射到 XML,但是,在另一个方向上它非常简单。