2015-05-12 4 views
0

Мне нужна помощь.От XQuery до XHTML

Я пытаюсь написать XQuery, выход которого будет XHTML-файлом. Проблема заключается в том, что «документ XHTML должен иметь объявление XHTML DOCTYPE», и я не могу поместить строку DOCTYPE в свой файл XQuery для создания действительного файла XHTML.

Возможно, я что-то неправильно понял, поэтому любая помощь приветствуется.

Более конкретно:

У меня есть небольшой XQuery скрипт:

for $book in doc("data.xml")//book 
     where $book/copycount = max(
      for $count in doc("data.xml")//book/copycount 
      return $count 
      ) 
     return (data($book/title)) 

И я хотел бы, чтобы сгенерировать правильный XHTML-файл вокруг этого сценария, который отображает возвращенную строку.

ответ

1

Если ваш процессор XQuery не сериализует результат сам по себе, вы должны рассказать нам больше о своей платформе и о том, как вы потребляете результат.

Если ваш процессор сериализует результат и равен 1.0, вы должны сообщить нам, какой из них вы используете, и загляните в его документацию для зависящего от реализации переключателя.

Последнее, но не менее важное: если вы используете XQuery 3.0, и ваш процессор позаботится о сериализации, вы можете использовать следующее, чтобы рассказать ему сериализовать дерево вывода как XHTML, используя соответствующий DOCTYPE (см. Соответствующее определение в спецификации на http://w3.org/TR/xquery-30/#id-serialization и http://w3.org/TR/xslt-xquery-serialization-30/#xhtml-output):

xquery version "3.0"; 

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; 
declare option output:method   "xhtml"; 
declare option output:doctype-public "-//W3C//DTD XHTML 1.0 Transitional//EN"; 
declare option output:doctype-system "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"; 

/some/query/here 
+0

спасибо.вы могли бы включить в него мой скрипт (что означает пример, как будет выглядеть весь файл)? Я попытался, но мой запрос ничего не возвращает (я думаю, что я испортил пространства имен). очень признателен. – Wanderer

+0

Я отредактировал приведенный выше пример, чтобы включить версию XQuery и где поставить исходный запрос. Обратите внимание, что это доступно только в XQuery 3.0. Какой процессор вы используете? –

+0

Я заработал. Я использовал заголовок, который вы включили, я объявил свой скрипт запроса как функцию, и в тегах я только положил функцию. Работает как шарм. Спасибо за помощь. – Wanderer

-1

Один универсальный способ сделать это, вставив его в качестве текстового узла дочернего узла документа:

document { 
    text { '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' }, 
    xdmp:quote(
    **** your XQY **** 
) 
    (: or in eXist, util:serialize(), etc. :) 
} 

Некоторых процессоров XQuery имеет опционные флаги для таких вещей, как это, так что вы можете быть в состоянии использовать, что вместо , и пусть процессор сериализует его для вас.

+0

, к сожалению, выход: "! < DOCTYPE HTML PUBLIC ....." и я не могу спасаться символ < – Wanderer

+0

@Wanderer, который XQuery процессор вы используете? – wst

+1

Попытка создания DOCTYPE вручную - плохая идея. «Специальные символы» (особенно '<') будут экранированы с помощью сериализатора (если вы не настроите его правильно, чтобы не делать этого, но затем правильно настроить его для вывода DOCTYPE для вас намного лучше). –

Смежные вопросы