2011-02-24 87 views
2

我有一个生成使用变量的RDF/XML文档从HTML场捡了些工作的Javascript代码:如何使用JavaScript中的模板生成RDF/XML?

... 
    peopleDoap += " <foaf:name>" + person_name + "</foaf:name>\n"; 
    if (person_url != "") { 
    peopleDoap += " <foaf:homepage rdf:resource=\"" + person_url + "/\"/>\n"; 
    } 
    if (person_pic != "") { 
    peopleDoap += " <foaf:depiction rdf:resource=\"" + person_pic + "/\"/>\n"; 
    } 
... 

很难,看着这段代码,得到的输出将是什么样子任何意义(特别是因为这些代码分散在子功能等中)。

我想知道如果有一个简单的方法,这将使我有这样的事情:

... 
<foaf:name>%person_name%</foaf_name> 
    <foaf:homepage rdf:resource="%person_url%"/> 
    <foaf:depiction rdf:resource="%person_pic%"/> 
... 

然后一些替代代码。一个微小的复杂情况是如果字段留空,我不想生成整个元素。即,如果person_url =“”,上面应当产生:

... 
<foaf:name>%person_name%</foaf_name> 
    <foaf:depiction rdf:resource="%person_pic%"/> 
... 

我想我可以通过定义模板作为一个巨大的字符串,然后进行了一堆关于它取代的做到这一点很天真,但有什么更优雅?对原生Javascript而不是库的轻度偏好,但很高兴被说服...

(顺便说一句,是的,因为这是RDF/XML,也许有更聪明的方式使用某种RDF库。地址的问题,而不是问题,这与我确定。)

Code is here

此外,这是一个在Jetty服务器上运行的小部件。我不认为服务器端代码是一个选项。

回答

4

我建议使用:

  1. jQuery Templates
  2. Mustache
  3. 约翰Resig的Micro-Templating

jQuery的模板是非常强大的,很好地集成与jQuery。这意味着,你可以做这样的事情:

$.tmpl("Hello ${n}", {n: "World"}).appendTo('h1'); 

为最简单的东西,或者定义你的HTML模板内具有自定义MIME类型特殊的脚本代码,编译它们,从AJAX调用JSON数据填充它们,等等。

+0

谢谢。有一点google搜索,看起来这是非常好的践踏地。这里有一篇很好的文章: http://www.west-wind.com/Weblog/posts/509108.aspx – 2011-02-24 05:35:22

0

为了增加一些后续工作,我确实实现了John Resig的Micro-Templating(实际上是我之前发布的精化版本)。然而,我后来有点反感。我发现实现在模板的控制结构是以下可读比外面:

... 
'<description xml:lang="en">@description</description>'; 
if (homepage) t += 
    '<homepage rdf:resource="@homepage"/>'; 
... 

而非:

... 
'<description xml:lang="en"><#= description #></description>' + 
'<# if (homepage) { #>' + 
    '<homepage rdf:resource="<#= homepage =>"/>' + 
'<# } #>'; 
... 

我也抛弃为变量的简单的替代的microtemplating代码,用@var而非< #var#>。

这样的模板的可读性非常关键,所以我尽我所能地想到了。特别是,在模板之外保持javascript可以让语法高亮工作,这对我很有价值。

John Resig的帖子还建议将模板嵌入到HTML中,但我更愿意将它保存在我的javascript中,这是一个单独的.js。

相关问题