2011-02-24 84 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。

相關問題