Два понятия из XSLT на других языках: apply-templates и xpath - PullRequest
2 голосов
/ 18 июля 2009

Предыстория: Отказавшись от практического ежедневного использования XSLT как части моего инструментария программирования, мне стало интересно, есть ли какие-либо реализации на других языках (только) двух вещей, о которых мне не хватает этот инструмент:

  • возможность обхода структур данных с использованием стилевых "стилей" через xpath
  • возможность обходить преобразования шаблонов с использованием apply-templates вместо итеративного или "зацикленного" подхода.

Согласно Google, есть пара попыток добавить поддержку "xpath-style" в Javascript, но они, по-видимому, не завоевали особого внимания. До сих пор я не нашел ничего , где кто-то использует подход "apply-templates" на другом языке

Вопрос: Кто-нибудь знает какой-нибудь язык программирования (надеюсь, тот, который является мейнстримом), который крадет эти две хорошие идеи из XSLT или применяет те же или похожие концепции, используя другой метод?

Ответы [ 5 ]

4 голосов
/ 18 июля 2009

возможность проходить через структуры данных с использованием стилевых «путей» через xpath

Я не знаю ни одного другого языка, который встраивает XPath, но LINQ to XML несколько похож, особенно в его VB синтаксическом сахарном воплощении. Однако вы можете реализовать его в макросах Common Lisp или D-шаблонах.

возможность обходить преобразования шаблонов с использованием apply-templates вместо итеративного или "зацикленного" подхода.

Нет основных языков, которые я знаю. Действительно, эта функция, вероятно, является основной причиной использования XSLT (а не, например, XQuery, если рассматривать тесно связанные языки).

Это эффективно расширяемая динамическая диспетчеризация на приемнике при произвольных условиях - поэтому я думаю, что вы, вероятно, могли бы сделать это в Common Lisp (CLOS, если быть точным) - если я правильно помню, его мультиметоды могут соответствовать произвольным условиям, так что если вы иметь оценщик шаблонов XPath, вы можете использовать его для эмуляции apply-templates, и даже больше - поскольку apply-templates отправляет только один аргумент, а мультиметоды CLOS - несколько аргументов.

2 голосов
/ 18 июля 2009

XPath, хотя и необходим для работы XSLT, не зависит от него; такие библиотеки, как libxml, предоставляют его бесплатно. Стиль шаблона приложения, который вы описываете, немного сложнее; это то, для чего вы обычно используете XSLT.

Любой язык программирования, который делает это, должен быть функциональным. Вы можете попробовать написать свой собственный, менее многословный, XSLT-диалект; Perl также может дать вам достаточно веревки, чтобы убедительно эмулировать эту функцию (хотя последствия для производительности неясны).

Однако сложный ответ заключается в том, что его на самом деле не существует, за исключением библиотек для уже существующих языков.

1 голос
/ 20 июля 2009

Комментарий к вашему первому требованию:

  • возможность обхода структур данных с использованием стилевых "стилей" через xpath

XPath делает много предположений относительно структуры данных. Если вы собираетесь использовать его, вы можете также преобразовать свою структуру в XML, потому что она все равно будет выглядеть так, как только вы сделаете ее доступной через некоторый XPath-подобный язык, если вы не ограничите строгое подмножество XPath.

Кроме того, имейте в виду, что «только две вещи», которые вам не хватает, XPath и обработка шаблонов, на самом деле являются огромной частью того, что составляет Xslt. Мне любопытно, почему ты решил снять его со своего пояса с инструментами.

Несмотря на тот факт, что вам нужна альтернатива Xslt, я все равно рекомендую Xslt и Xslt 2.0, в частности. С добавлением unparsed-text и analysis-string вы получаете мощный язык обработки текста. Например, взгляните на таблицу стилей от CSV до XML . Несмотря на то, что JSON не является регулярным, вы все равно сможете написать простой переводчик JSON в XML с использованием рекурсивных шаблонов и преобразовать результат по желанию.

1 голос
/ 18 июля 2009

Я не нашел ничего подобного. Но зачем кому-то использовать что-то еще для преобразования XML? XSLT отлично справляется с работой, если вы понимаете непроцедурный способ разработки решений. Наши приложения в значительной степени основаны на XSLT, и это действительно мощный инструмент.

1 голос
/ 18 июля 2009

Для XPath, безусловно. Для C есть Xalan-C ++ , для Java javax.xml.xpath (с несколькими реализациями), а C # имеет XPathNavigator и SelectNodes . Если вы хотите использовать XPath для иерархий объектов, посмотрите JXPath .

Для преобразования шаблонов вы должны посмотреть на C # LINQ , если вы еще этого не сделали. Это не совсем то же самое, но позволяет обрабатывать объекты без явного зацикливания.

...