Как да генерирам RDF/XML с помощта на шаблон в javascript?

Имам някакъв работещ Javascript код, който генерира RDF/XML документ, използвайки променливи, взети от HTML полета:

...
  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 библиотека. Ако вместо това искате да отговорите на този въпрос, това е добре за мен.)

Кодът е тук.

Освен това това е джаджа, работеща на сървър на Jetty. Не мисля, че сървърният код е опция.


person Steve Bennett    schedule 24.02.2011    source източник


Отговори (2)


Препоръчвам да използвате:

  1. jQuery шаблони
  2. Мустаци
  3. Микрошаблон на John Resig

jQuery шаблоните са много мощни и добре интегрирани с jQuery. Това означава, че можете да правите неща като това:

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

за най-простите неща или дефинирайте шаблони във вашия HTML в специални скриптови тагове с персонализирани MIME типове, компилирайте ги, попълнете ги с JSON данни от AJAX извиквания и т.н.

person rsp    schedule 24.02.2011
comment
Благодаря. Потърсих малко в гугъл и изглежда, че това е много добре утъпкана почва. Тук има много хубава статия: west-wind.com/Weblog/posts /509108.aspx - person Steve Bennett; 24.02.2011

За да добавя малко последващи действия, внедрих микрошаблоните на John Resig (всъщност усъвършенстваната версия, която публикувах по-рано). След това обаче се отдръпнах малко. Открих, че внедряването на контролни структури в шаблона е по-малко четливо, отколкото навън:

...
 '<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 =>"/>' +
'<# } #>';
...

Също така се отказах от кода за микрошаблониране за просто заместване на променливи, използвайки @var вместо ‹# var #>.

Четимостта на шаблони като този е наистина критична, така че направих всичко, което можах да измисля. По-специално, запазването на javascript извън шаблона позволява осветяването на синтаксиса да работи, което е ценно за мен.

Тази публикация на John Resig също предложи да заровите шаблона във вашия HTML, в a, но аз предпочетох да го запазя в моя javascript, който е отделен .js.

person Steve Bennett    schedule 25.02.2011