Как сгенерировать 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. Микро-шаблоны Джона Резига

Шаблоны 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

Чтобы добавить немного продолжения, я реализовал 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 =>"/>' +
'<# } #>';
...

Я также отказался от кода микрошаблонов для простой замены переменных, используя @var вместо ‹# var #>.

Удобочитаемость подобных шаблонов очень важна, поэтому я сделал все, что мог придумать. В частности, хранение javascript вне шаблона позволяет работать подсветке синтаксиса, что для меня ценно.

В этом сообщении Джона Резига также предлагалось похоронить шаблон в вашем HTML, но я предпочел сохранить его в своем javascript, который является отдельным .js.

person Steve Bennett    schedule 25.02.2011