XML-литералы - синтаксис
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.06.10 21:04
Оценка:
Я тут потихоничку (вот уже второй день ) работаю над созданием макроса xml-литерал.

Общая идея такая... в коде можно будет описывать ХМЛ-литералы на подобие того как это сделано в ВБ. На выходе будет линковских XElement. Они будут подерживать классические немерловые квази-цитаты.

Кроме того я планирую сделать их "активными". Это значит, что вних можно будет описывать логику генерации ХМЛ-я. Причем прямо в виде ХМЛ-атрибутов. Идея повзаимствована из рендереров ХТМЛ-я наподобии Спарка.

Так вот хочется обсудить синтаксис для встроенных в ХМЛ конструкций управляющих логикой генерации.

Я набросал пример того что я хочу видеть в данном движке. Прошу поглядеть его и высказать свои мысли (что добавить, что плохо и т.п.)
def x = 1;
def y = 0;
def zs = [...];
def var = xml <#
    <root>
      <table when="x > 0">
        <tr if="y == 0">
          <td foreach="z in zs">$z</td>
        </tr>
        <tr else-if="y < 0"></tr>
        <tr else="y > 0"></tr>
        <if cond="y == 0">
          <tag1></tag1>
          <tag2></tag2>
          <tag3></tag3>
        </if>
        <else-if cond="y > 0">
          <tag2></tag2>
          <tag3></tag3>
        </else-if>
        <else>
          <tag3></tag3>
        </else>
        $(if (y == 0)
            xml <#
              <tag2></tag2>
              <tag3></tag3>
            #>
          else if (y > 0)
            xml <#
              <tag2></tag2>
              <tag3></tag3>
            #>
          else if (y > 0)
            xml <# <tag3></tag3> #>
          )
      </table>
    </root>
  #>;

Особые проблемы возникли с дизайном множественного if-а (позволяющего включить несколько тегов на основании некоторого логического условия). В конце этого примера я привел вариант основанный на теге <if> (который сам не включается в результирующих ХМЛ) и на базе обычного сплайса (здесь код приведен по месту, но конечно же он может быть вынесен во вне ХМЛ-цитаты, так что она будет выглядеть приличнее).

Насколько такой подход (с использованием управляющих тегов аля XSLT) приемлем?

Ну, и вообще, какие есть мысли по этому поводу?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.