Простейшая таблица стилей XSLT, результатом которой является таблица стилей XSLT ... Для целей обучения - PullRequest
3 голосов
/ 21 апреля 2011

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

Я начал это (и не очень далеко ...). self.xml - это имя таблицы стилей (и входного документа):

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="self.xml"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
...

И вывод должен быть, ну такой же ....

РЕДАКТИРОВАТЬ (после прочтения о Quines с плаката ...)

Позвольте мне сделать этот запрос сложнее ...

Существует ли таблица стилей XSLT, которая будет просто выводить любой входной документ. (Я имею в виду вывод, а не только внутреннее представление): «любой входной документ», конечно, включал бы себя ...

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011

Такого рода программа называется «quine», и быстрый вывод Google «XSLT quine» привел к следующей ссылке: http://www2.informatik.hu -berlin.de / ~ obecker / XSLT / # quine

1 голос
/ 22 апреля 2011

Если вы ищете вместо этого преобразование идентичности, в Википедии есть несколько примеров.

http://en.wikipedia.org/wiki/Identity_transform

1 голос
/ 22 апреля 2011

Я не нажимал на ссылку на Оливера Беккера, но первое, что приходит на ум, это :

XSLT 1.0 :

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:copy-of select="document('')"/>
 </xsl:template>
</xsl:stylesheet>

при применении к любому документу XML (не используется), результат в точности совпадает с кодом выше :

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:copy-of select="document('')" />
 </xsl:template>
</xsl:stylesheet>

XSLT 2.0:

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:template match="/">
  <xsl:copy-of select="unparsed-text(static-base-uri())"/>
 </xsl:template>
</xsl:stylesheet>
...