Как создать документ HTML5 + SVG с использованием PHP XSLTProcessor - PullRequest
0 голосов
/ 10 июня 2010

Для небольшого проекта по XML я пытаюсь использовать HTML5, так как он поддерживает SVG и WAI-ARIA. Я также хочу использовать таблицу стилей XSL для моего документа. Но я не могу получить действительный документ HTML5 с вложенным SVG. Вот версия, которую я тестировал до сих пор:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml"/>
    <xsl:template match="/">        
        <html xmlns="http://www.w3.org/1999/xhtml">
        // content with the svg tag in the body
        </html>
    </xsl:template>
</xsl:stylesheet>

В сочетании с header('Content-Type: application/xml'); он работает и производит такой вывод HTML:

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
    // content with the svg tag in the body
</html>

Но это не HTML5, и без DOCTYPE я получаю много ошибок на валидаторе W3. Поэтому, пытаясь получить документ HTML5, я использовал следующий XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="html"/>
    <xsl:template match="/">
        <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE HTML></xsl:text>        
        <html>
        // content with the svg tag in the body
        </html>
    </xsl:template>
</xsl:stylesheet>

Но, к сожалению, это приведет к следующему выводу HTML:

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        ....
    </head>
    // content with the svg tag in the body
</html>

Как вы можете видеть, это обычный HTML5, но при использовании его в сочетании с header('Content-Type: application/xml'); происходит сбой из-за отсутствия косой черты в конце метатега (который был создан автоматически). При использовании header('Content-Type: image/xhtml+svg'); или header('Content-Type: text/html'); ошибка синтаксического анализа XML отсутствует, но на странице SVG будет отображаться не в виде графика, а в виде текста (без тегов).

Может кто-нибудь сказать мне, как избежать вставки мета-тэга или как установить корректный Content-Type, который заставит браузер обновлять SVG. Или даже любой другой намек, чтобы заставить это работать. Мне бы очень хотелось, чтобы HTML5 мог поддерживать роли ориентиров WAI-ARIA и теги HTML5, такие как NAV и FOOTER.

РЕШЕНИЕ

Это приведет к созданию корректного HTML5 с визуализацией SVG с использованием header('Content-Type: application: xhtml+xml');</p> <pre><?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml" omit-xml-declaration="yes" /> <xsl:template match="/"> <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE HTML></xsl:text> <html xmlns="http://www.w3.org/1999/xhtml"> // content with the svg tag in the body </html> </xsl:template> </xsl:stylesheet>

Демонстрацию в режиме реального времени вы можете увидеть здесь: http://kau -boys.de / HTML5-SVG.php

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Вы писали:

Но это не HTML5 и без DOCTYPE

Не верно.С http://dev.w3.org/html5/html-author/

Можно использовать два синтаксиса: традиционный синтаксис HTML и синтаксис XHTML

И

Для XHTML рекомендуется опустить DOCTYPE, поскольку он не нужен

На сегодняшний день в IE нет поддержки HTML5.То же самое относится и к SVG (за исключением использования плагинов).Понятно, что IE не является вашим целевым браузером.

Сегодня я бы не стал уделять много внимания валидатору, поскольку HTML5 - это рабочий проект.

Ответ : Оставайтесь сСериализация XML, это даст вам полную поддержку SVG.

0 голосов
/ 10 июня 2010

Есть странный способ встраивания svg, я использовал один раз.Для атрибута src должны быть установлены данные: uri 64-битный кодированный объект svg.Каким-то образом вы должны указать ширину и высоту, а также добавить пространство имен и мета.Таким образом, вы создаете отдельный svg-документ и вставляете его на страницу с помощью тега вставки.Другое решение - подождать, пока IE, opera, chrome, safari и firefox не поддержат svg внутри файла text / html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...