Ошибка реализации XSLT процессора или особенность версии?

alekciy

Новичок
Ошибка реализации XSLT процессора или особенность версии?

Начал изучение XSLT шаблонов и, как мне кажется, столкнулся с ошибкой реализации. Или может я что-то не так понял? Подскажите.

Суть ситуации:
Пусть имеется XML файл:
Код:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="1_xslt.xsl"?>
<!DOCTYPE SchemaBd [
<!ATTLIST ObjectType id ID #REQUIRED>
]>
<SchemaBd>
    <ActionTypes>
        <Action>действие 1</Action>
        <Action>действие 2</Action>
        <Action>действие 3</Action>
        <Action>действие 4</Action>
    </ActionTypes>
    <ObjectTypes value="Список категорий">
        <ObjectType>
            <Attributes>
                <Attribute name="god_vypuska">год выпуска</Attribute>
                <Attribute name="moshhnost_dvigatelja">мощность двигателя</Attribute>
            </Attributes>
            <ObjectType>
                <ActionList>
                    <Action type="1">
                        <Attributes>
                            <Attribute name="god_vypuska">тип кузова</Attribute>
                            <Attribute name="moshhnost_dvigatelja">цвет</Attribute>
                            <Attribute name="cena">цена</Attribute>
                        </Attributes>
                    </Action>
                </ActionList>
            </ObjectType>
            <ObjectType>
                <Attributes>
                    <Attribute name="gruzopodemnost">грузоподъемность</Attribute>
                </Attributes>
            </ObjectType>
        </ObjectType>
    </ObjectTypes>
</SchemaBd>
С которым ассоциирован шаблон преобразования:
Код:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
            doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
            doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />

<xsl:template match="/SchemaBd/ObjectTypes">
    <html>
        <head>
            <title>Трансформация</title>
        </head>
        <body>
            <b><xsl:value-of select="@value"/></b>
        </body>
    </html>
</xsl:template>

</xsl:stylesheet>
Если открыть в Опере (9.22) или IE (6 какая версия процессора не знаю, в системе есть как msxml.dll версий 2 так и 3), то будет видна строка:
Код:
Список категорийдействие 1действие 2действие 3действие 4
Если в FifeFox (1.5), то как я и ожидаю вижу:
Код:
Список категорий
Жирным шрифтом.

Я конечно не эксперт по XSLT, но XPath выражения знаю достаточно хорошо и собсвенно я ожида увидеть то, что мне выдает FF.

Проблема:
В PHP при использовании расширения XSL имеем такую же ситуацию как и с Opera и IE.
PHP версии 5.1 (тоже самое имеем и на 5.2) c XSL либой версии (какая точно не знаю):
Код:
xslXSL 	enabled 
libxslt Version 	1.1.15 
libxslt compiled against libxml Version 	2.6.23 
EXSLT 	enabled 
libexslt Version 	1.1.15
Скрипт:
PHP:
<?php
// Load the XML source
$xml = new DOMDocument; 
$xml->load('1_xml.xml');
$xsl = new DOMDocument;
$xsl->load('1_xslt.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules
echo $proc->transformToXML($xml);
?>
http://alekciy.ru/test/1_php.php
Возможно все дело в версии спецификации? Я ожидаю один результат исходя из понимания спецификации XSLT 1.0 от W3C, а тут процессор работает по другой версии более позней/ранней?

Вопрос:
Это ошибка реализации процессора, или я не так понимаю принцип написания XSLT шаблона? Проблема вообще решаема? Сейчас выход нашел в том, что открываю XML через DOM и самописный класс который добавляет динамически нотацию <?xml-stylesheet?> и соответсвенно преобразование ведется на стороне браузера, но тогда работать приходиться только через FF.
 

olpa

Новичок
XSLT-процессор совершенно прав, ибо действует в соответствии со спецификацией, главой "5.8 Built-in Template Rules".
 

dark-demon

d(^-^)b
alekciy, если нужна клиентская трансформация, то шаблон должен выглядеть примерно так: http://dark-demon.jino-net.ru/clr/clr.xsl (смотреть с помощью ие - он не поганит исходник)

обрати внимание на xmlns-ы и то как добавляются html элементы

ие не понимает префиксы у html элементов, а опера - у xsl элементов.
 

alekciy

Новичок
Автор оригинала: olpa
XSLT-процессор совершенно прав, ибо действует в соответствии со спецификацией, главой "5.8 Built-in Template Rules".
Аааа... встроенные правила шаблона. А их можно каким либо образом отключить? Может есть какие либо директивы для процессора?

-~{}~ 08.08.07 19:41:

Автор оригинала: dark-demon
обрати внимание на xmlns-ы и то как добавляются html элементы
Оригинально ) . Хотя всю прелесть я видимо оценю когда более плотно поработаю с XSLT.
 
Сверху