Есть ли способ установить базовый URI в XSLT, чтобы он применялся ко всему документу, как в XQuery?
* 1003 Т.е. *
declare base-uri = "someuri";
Невозможно изменить базовый URI документа . Из XML Base W3C Spec .:
"Базовый URI объекта документа или внешняя сущность определяется RFC 3986 правил, а именно, что база URI - это URI, используемый для получения сущность документа или внешняя сущность. "
Базовый URI любого узла в документе (за исключением document-node()) можно установить с помощью xml:base (снова там )
document-node()
xml:base
"Атрибут xml: base может быть вставлены в документы XML, чтобы указать базовый URI, отличный от базового URI документ или внешнее юридическое лицо "
С http://www.w3.org/TR/xslt#document
Ссылка на URI может быть относительной.Базовый URI (см. [3.2 Базовый URI]) узла во втором наборе узлов аргумента, который является первым в порядке документа, используется в качестве базового URI для преобразования относительного URI в абсолютный URI.Если второй аргумент пропущен, то по умолчанию используется узел в таблице стилей, содержащий выражение, которое включает вызов функции документа.
И из http://www.w3.org/TR/xslt#base-uri
У каждого узла также есть связанный URI, называемый его базовым URI, который используется для разрешения значений атрибутов, которые представляют относительные URI в абсолютные URI.Если элемент или инструкция обработки встречаются во внешнем объекте, базовый URI этого элемента или инструкции обработки является URI внешнего объекта;в противном случае базовый URI является базовым URI документа.Базовый URI узла документа - это URI объекта документа.Базовый URI для текстового узла, узла комментария, узла атрибута или узла пространства имен является базовым URI родителя узла.
Итак, это:
<xsl:copy-of select="document('external.xml')" xml:base="http://example.org">
Должен быть решен как
<xsl:copy-of select="document('http://example.org/external.xml')">
Я думаю, вам нужен атрибут xml:base в корневом узле документа.
См. http://www.w3.org/TR/xmlbase/, чтобы подтвердить, что это будет делать то, что вы хотите.