Ищу (псевдо) препроцессор/Templater (псевдо), чтобы сделать его менее многословным [закрыто

StackOverflow https://stackoverflow.com/questions/6816770

Вопрос

Кто -нибудь знает о препроцессоре для XSLT, чтобы сделать его менее словесным? Что -то вроде что Нахем для CSS, небольшой прогног, который займет световой синтаксис:

"/":
{
 <html>
  <head>
  <title>My book collection</title>
  </head>
  <body>
  {@ "//media"}
  {@ quantity = calc_abs_value("//total_quantity")}
  Price : {@ multiply(price:"//item[@selected='true'][@price]",qty  :$quantity) }
  </body>  
 </html>
}

"media[@type='book']":
{
 <div id="{@id}">
 {title} by {author} published in {published_date}
 </div>
}

function calc_abs_value(value)
{
 if ($value < 0) {- $value} else {$value}
}

function multiply(price,qty:"1")
{
 switch 
 {
  "$qty = 1" : $price * $qty 
  "$qty < 5" : $price * $qty * 0.95 
  "$price * $qty < 0" : 0
  default : 0
 }
}

и превратить это в далеки читаемого XSLT:

    <xsl:template match="/">
     <html>
      <head>
      <title>My book collection</title>
      </head>
      <body>
      <xsl:apply-templates select="//media" />
      <xsl:variable name="quantity"><xsl:call-template name="calc_abs_value">
      <xsl:with-param name="value"><xsl:value-of select="//total_quantity" /></xsl:with-param>
      </xsl:call-template></xsl:variable>
      Price : <xsl:call-template name="multiply">
      <xsl:with-param name="price"><xsl:value-of select="//item[@selected='true'][@price]" /></xsl:with-param>
      <xsl:with-param name="qty"><xsl:value-of select="$quantity" /></xsl:with-param>
      </xsl:call-template>
      </body>  
     </html>
    </xsl:template>


    <xsl:template match="media[@type='book']">
    {
     <div id="{@id}">
     <xsl:value-of select="title" /> by <xsl:value-of select="author" /> published in <xsl:value-of select="published_date" />
     </div>
    }
    </xsl:template>


    <xsl:template name="calc_abs_value">
    <xsl:param name="value" />
    <xsl:choose>
      <xsl:when test="$value < 0">
       - <xsl:value-of select="$value" />
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$value" />
      </xsl:otherwise>
    </xsl:choose>
    </xsl:template>

Мне лень писать форму xslt, но я уверен, что вы уже поняли, что я имею в виду.

Или есть IDE, которая больше осведомлена о XSLT, чем другие, например, он отображает {author} но расширяется до:

<xsl:value-of select="author" />

Когда вы нажимаете на него?

Это было полезно?

Решение

Вам лучше спросить: как DSL XSLT?

Вас может быть заинтересован в каком -то практическом примере, таким как Yslt на основе Yml концепция.

ПРИМЕЧАНИЕ Должно быть лучше не преобразовать/предварительно обрабатывать код, чтобы вообще получить преобразование XSLT; Вместо этого просто подражайте тому, как процессор анализирует входной документ и используйте свой собственный DSL.


Вы также можете написать свой собственный DSL. Вы должны использовать какой -то язык сценариев, который действительно облегчает концепцию DSL, как, например,, например, Рубин. Анкет В Рубин, вы можете достичь чего -то очень красивого и чистого, как:

match "/" do
 value-of :foo
end

который может работать как:

<xsl:template match="/">
 <xsl:value-of select="foo"/>
</xsl:template>

Еще одна вещь, о которой стоит упомянуть шаблон языков как эрб. Анкет Это я думаю, что единственная возможная альтернатива XSLT в целом (даже если альтернатива здесь - большой компромисс, и вы очень скоро потерялись с процедурными манипуляциями с узлами).


Примечание

Я люблю условности xslt И из -за этой условности я думаю, что код XSLT гораздо более читаемо тогда любой другой язык (как только вы поймете, как работают шаблоны).

я не Рекомендую искать что -нибудь для преобразования другой разметки в код XSLT. Ваш последний код XSLT будет свободный отклонность и его код не будет оптимальным вообще.

Другие советы

Я видел несколько попыток сделать это за эти годы, но ни один из них, кажется, не использовался кем -либо, кроме его создателя. Я думаю, что, честно говоря, условности XSLT - это то, к чему вы быстро привыкаете. XSLT 2.0, конечно, гораздо менее словес, чем 1,0.

В Balisage на прошлой неделе Эван Ленц представил еще одну попытку, называемую Морковью: на этот раз не просто компактный синтаксис для XSLT, но и язык, который пытается обеспечить союз XSLT и Xquery. Выглядит интересно, но я не думаю, что есть реализация (и я был бы удивлен, если она займет ...)

Обработка-инструктики могут использоваться для реализации макросов, таких как в этом несвязанный вопрос на докбуке.

Template:
<?echo gal?>

Code:
<xsl:variable name="gal" select="'howdy'"/>

<xsl:template match="processing-instruction('echo')">
  <xsl:value-of select="//xsl:variable/@select[../@name=current()]"/>
</xsl:template>

Есть также Подобный вопрос который охватывает упрощенное прохождение параметров.

Xmlpreprocess или же oxml Также может быть интересен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top