что делать, когда страница пространства имен XSL-преобразования находится в автономном режиме? - PullRequest
0 голосов
/ 14 ноября 2011

XSL требует это в верхней части каждой таблицы стилей:

xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"

и выдает ошибку, если URL-адрес в пространстве имен не совсем правильный.

Сегодня "http://www.w3.org/1999/XSL/Transform" находится в автономном режиме. Я не могу выполнить никаких преобразований. Преобразование зависает, а затем возвращает" неожиданный конец файла ", когда истекает сетевой запрос. Если я изменю URL-адрес в объявлении пространства имен на случайный URL-адрес преобразование завершается ошибкой, сообщая мне, что "http://www.w3.org/1999/XSL/Transform" является обязательным пространством имен xsl.

Итак, как мне работать, когда сайт W3 не работает?

Ответы [ 2 ]

3 голосов
/ 14 ноября 2011

Использование xmlns:something="..." объявляет пространство имен XML . Такое пространство имен - это просто строка, которая поможет придать уникальное значение именам элементов, таким как template или href, обеспечивая возможность использования нескольких языков на основе XML в одном документе, не создавая путаницы в отношении его значения. .

Некоторые из этих пространств имен зарезервированы для использования W3C. Пространство имен XSLT является одним из них. Правильный процессор XSLT проверит, объявляет ли таблица стилей правильное пространство имен, чтобы убедиться, что не может быть неправильной интерпретации. Корневой элемент таблицы стилей должен находиться в этом пространстве имен XSLT.

Для фактического значения пространства имен у вас обычно будет URI (и чаще всего URL), поскольку обычно это хороший уникальный идентификатор. Однако этот никогда не следует использовать для фактического разрешения каких-либо онлайн-ресурсов во время обработки XML . В то время как HTTP-URL-адреса обычно обрабатываются без учета регистра и могут использовать кодирование URL-адреса для символов (например, пробел становится %20), такое разрешение или равенство URL-адресов не проверяется при обработке пространства имен XML. Пространство имен в XML - это не что иное, как строка, которая всегда проверяется в ее точном виде, регистр и все.

Так что, если процессор XSLT жалуется, что какой-то ресурс по URL-адресу не может быть найден, то он либо делает то, что не должен делать, либо проблема не имеет ничего общего с обработкой пространства имен.

Вы используете Saxon, который определенно не является процессором, который не понимает концепцию пространства имен. Его отцом является Майкл Кей, который также отвечает за спецификацию XSLT 2.0. Но Saxon поддерживает обработку XSLT с учетом схемы. Если в документе указано местоположение схемы, то процессор, использующий это для проверки, фактически использует это местоположение для получения схемы. В этом разница с пространством имен. Расположение DTD и XML-схемы может определенно привести к сетевой активности.

Поэтому я советую вам проверить, если ...

  • XML использует DTD с внешними определениями и их наличием;
  • XML указывает местоположение схемы и может ли быть достигнуто это местоположение;
  • таблица стилей использует схему или какой-либо другой внешний ресурс, и доступен ли он.

Как только вы найдете причину, изучите использование каталогов XML вместе с процессором. Каталог XML позволит вам использовать локальные ресурсы, если они не могут быть разрешены из их URI.

1 голос
/ 15 ноября 2011

Простой ответ: http://www.w3.org/1999/XSL/Transform - это не URL, а просто строка.Если W3C решил, нет причины, по которой это не могло бы быть «ThisIsAnXsltStylesheet».По соглашению они обычно напоминают URL-адреса, но это не обязательно.

Таким образом, тот факт, что по этому URL-адресу нет ничего, не имеет отношения к тому, почему ваша таблица стилей дает сбой, и, конечно, не будет причиной,Логически говоря, если бы это было так, то никто без подключения к Интернету никогда бы не смог использовать XSLT, а серверы w3c были бы серьезно перегружены.

Я бы рекомендовал добавить первые несколько строк вашего XSLT вваш вопрос;это может пролить свет на то, где на самом деле находится ваша проблема.

...