跳转到内容

XQuery/eXist 速查表

来自维基教科书,开放世界中的开放书籍

导入和声明

[编辑 | 编辑源代码]

XQuery 声明

[编辑 | 编辑源代码]
xquery version "1.0";

导入模块

[编辑 | 编辑源代码]
import module namespace geo="http://www.cems.uwe.ac.uk/exist/coord" at "coord.xqm";

eXist 基础命名空间

[编辑 | 编辑源代码]
  declare namespace exist = "http://exist.sourceforge.net/NS/exist"; 

标准 eXist 模块

[编辑 | 编辑源代码]

在 XQuery 脚本中是可选的,但在 1.2 版本中的模块中是必需的,但在 1.3 版本中不是必需的。

 import module namespace xmldb = "http://exist-db.org/xquery/xmldb";
 import module namespace util = "http://exist-db.org/xquery/util";
 import module namespace request = "http://exist-db.org/xquery/request";
 import module namespace response = "http://exist-db.org/xquery/response";
 import module namespace session = "http://exist-db.org/xquery/session";
 import module namespace transform = "http://exist-db.org/xquery/transform";
 import module namespace text = "http://exist-db.org/xquery/text";
 import module namespace system = "http://exist-db.org/xquery/system";

声明命名空间

[编辑 | 编辑源代码]
 declare namespace tx="http://www.transxchange.org.uk/";

声明默认元素命名空间

[编辑 | 编辑源代码]
declare default element namespace "http://www.w3.org/1999/xhtml";

如果你使用默认命名空间,请务必小心。这意味着没有命名空间前缀的所有内容都会自动序列化到此命名空间中。它还阻止你使用空命名空间,除非你明确地将其声明为 xmlns=""。请注意,你没有将前缀与默认命名空间相关联。

声明默认函数命名空间

[编辑 | 编辑源代码]
declare default function namespace "http://www.transxchange.org.uk/";

声明 Java 绑定命名空间

[编辑 | 编辑源代码]
declare namespace math="java:java.lang.Math";

请注意,由于安全问题,Java 绑定默认情况下是禁用的。现在可以通过数学扩展模块调用数学函数。

序列化选项

[编辑 | 编辑源代码]

输出 XML 文档

[编辑 | 编辑源代码]

这是默认值,但可以明确声明。

declare option exist:serialize "method=xml media-type=text/xml omit-xml-declaration=no indent=yes";

输出 SVG 文档

[编辑 | 编辑源代码]
declare option exist:serialize "method=svg media-type=application/svg+xml omit-xml-declaration=no indent=yes";


输出 XHTML 文档

[编辑 | 编辑源代码]
declare option exist:serialize "method=xhtml media-type=text/html omit-xml-declaration=no indent=yes 
        doctype-public=-//W3C//DTD XHTML 1.0 Transitional//EN
        doctype-system=http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";

如果你的代码包含许多位于空命名空间 (xmlns="") 中的 XML 片段,则有一种方法可以自动将空命名空间中的所有内容转换为自动放入 XHTML 命名空间。

declare option exist:serialize "method=xhtml enforce-xhtml=yes";

输出 HTML4 文档

[编辑 | 编辑源代码]
declare option exist:serialize "method=xhtml media-type=text/html omit-xml-declaration=no indent=yes 
        doctype-public=-//W3C//DTD HTML 4.01 Transitional//EN
        doctype-system=http://www.w3.org/TR/loose.dtd";

输出 HTML5 文档

[编辑 | 编辑源代码]
declare option exist:serialize "method=html5 media-type=text/html omit-xml-declaration=yes indent=yes";

输出没有 doctype 的 HTML 文档

[编辑 | 编辑源代码]
declare option exist:serialize "method=html media-type=text/html omit-xml-declaration=yes indent=yes";

输出没有 doctype 的 XHTML 文档

[编辑 | 编辑源代码]
declare option exist:serialize "method=xhtml media-type=text/html omit-xml-declaration=yes indent=yes";

输出没有 doctype 的纯文本文档

[编辑 | 编辑源代码]
declare option exist:serialize "method=text media-type=text/plain omit-xml-declaration=yes";

输出 KML 文档

[编辑 | 编辑源代码]
declare option exist:serialize  "method=xhtml media-type=application/vnd.google-earth.kml+xml highlight-matches=none";

输出 XForms 文档

[编辑 | 编辑源代码]
declare option exist:serialize "method=xhtml media-type=text/xml indent=yes";

模块和函数

[编辑 | 编辑源代码]

模块头

[编辑 | 编辑源代码]
module namespace c="http://www.cems.uwe.ac.uk/exist/coord";

函数声明

[编辑 | 编辑源代码]
  • 在 XQuery 脚本中的默认命名空间中
declare function local:times($tt, $dt) {
  if (exists($dt))
  then local:times(($tt, $tt[last()]+ $dt[1]), remove($dt,1))
  else $tt
};
  • 在模块的命名空间中
module namespace time = 'http://www.cems.uwe.ac.uk/fold/time';
declare function time:times($tt, $dt) {
  if (exists($dt))
  then time:times(($tt, $tt[last()]+ $dt[1]), remove($dt,1))
  else $tt
};

声明变量

[编辑 | 编辑源代码]
declare variable $pi as xs:double := 3.14159265;

在具有命名空间前缀 fxx 的模块中

declare variable $fxx:file := doc('/db/me/file.xml');

嵌入 CSS 样式表

[编辑 | 编辑源代码]
  <style language="text/css">
  <![CDATA[
    .good {background-color: green;}
    .bad {background-color:red;}
  ]]>
  </style>

获取 HTTP POST URL 参数

[编辑 | 编辑源代码]

从 HTTP POST 中获取两个 URL 参数

   https://127.0.0.1:8080/exist/rest/db/my-collection/my-xquery.xq?color=blue&shape=circle

添加以下内容

  let $my-color := request:get-parameter('color', 'red')
  let $my-shape := request:get-parameter('shape', '')

如果没有提供颜色参数,将使用默认颜色“红色”。

获取 HTTP POST 数据

[编辑 | 编辑源代码]

要获取 HTTP POST 中的所有 XML 数据

  let $my-data := request:get-data()

扩展输出大小限制

[编辑 | 编辑源代码]

默认情况下,输出大小为 10,000 字节。您可以通过添加以下内容来扩展它

declare option exist:output-size-limit "new-size";

例如,要将输出的大小限制提高三倍,请使用以下行

declare option exist:output-size-limit "30000";

华夏公益教科书