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

时间:2016-06-10 20:43:37

标签: xml xslt rdf

我需要一种格式

  • 可以定义RDF数据的查询,
  • 可以定义如何从这些数据生成XML文档,
  • 是用户友好的,即易于阅读和编写,并且可供熟悉XML和Turtle的非程序员使用。

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

  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标记的复杂查询中。

  5. 我想要一些简单而强大的东西,它在语法上是一个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>
    

    (实际上,如果你不能建议现有的东西,我可能会实现最后一种语言。)

1 个答案:

答案 0 :(得分:0)

我找到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 Schema作为转换过程的描述符。这可能不是最容易从RDF映射到XML的,但是,在另一个方向上它非常简单。