従来、eXist-db(*)では、XQueryは.htmlファイルに埋め込まれていません。XQueryファイル自体が結果をアセンブルし、ブラウザーにシリアル化します。したがって、次のような.xqyファイルがある可能性があります(たとえば、http://yourserver.com:8080/exist/apps/myapp/get-names.xqyを介して呼び出されます)。
xquery version "1.0";
declare option exist:serialize "method=xhtml media-type=text/html";
let $count := count(//name)
return
<html>
<head/>
<body>
<div><p>There are {$count} names in the database</p></div>
</body>
</html>
ヘッダーなど、このファイルにプルしたいHTMLの静的スニペットがある場合は、XQueryに埋め込むか、doc()関数を使用して呼び出し、上記の$countで行ったように挿入します。
let $header := doc('/db/myapp/header.html')
このパターンを拡張し、独自のテンプレートモジュールを開発して、アプリのコンテンツをテンプレートにフィードすることもできます。つまり、template:assemble-page($ title、$ content)は、ヘッド/タイトルに$titleを含む完全なHTMLページを返します。およびbody/h1内、およびbody内のコンテンツ-関数で指定された静的ヘッダー、フッターなど。
(*)eXist-db 2.0(現在リリース候補として利用可能)の時点で、HTMLテンプレート内に関数呼び出しを埋め込むことができる新しいテンプレートフレームワークがあります。これは、XQueryとHTMLの混合/ネストが少なくなり、関心の分離がより明確になることを意味します。詳細については、この記事「eXist-dbでのWebアプリケーション開発入門」を参照してください。それは本当にとてもエレガントで、私が上で説明したアプローチよりもこれが好ましいと思うかもしれません。このフレームワークでは、.htmlファイルをそのまま保持し、次の方法でcount(// name)ルーチンを参照します。
<p>There are <span class="app:count-names"/> names in the database</p>
フレームワークは、span / @ classを、登録したモジュール(/db/apps/myapp/modules/app.xqlなど)の関数count-names()への参照として扱います。したがって、そのモジュールと関数app:count-names()を作成したとすると、get-names.htmlページを呼び出すと、データベースは上記の要素をapp:count-names()の結果に動的に変換します。例:42。
これがお役に立てば幸いです。