Marklogic学习

Marklogic初识

1.概述

  • Marklogic是一家美国软件公司,开发和提供企业级的NoSQL数据库。其产品是一个集存储、管理、搜索JSON和XML文档和图形数据的multi-model NoSWL数据库。可以将海量数据通过灵活的组织结构去构建庞大的web应用。
  • Marklogic在国外拥有广泛的市场,包括BBC、播音公司、道琼斯、NBC等。公司成立于2001年,总部位于美国硅谷。从2014年的收益看,Marklogic已经成为了NoSQL数据库的leader.

在windows上安装Marklogic Server

摘要:要想学习Marklogic,首先需要有相应的环境,本文介绍了如何在windows平台上安装Marklogic.实际生产中,一般会将其安装在linux平台上。

  1. 准备
    类似于oracle,Marklogic在非商用的情况下,对开发者来说是免费下载和使用的。
    首先,需要在Marklogic开发者网站上注册,成为注册用户后才可以下载Marklogic.
    接下来可以在产品中心,找到对应平台的下载链接。我下载的是win版的MarkLogic-8.0-4-amd64.msi。只有160M左右,比起当初下载的oracle可是小巧不少啊。
  2. 配置
    整个安装过程非常简单,和普通的win软件一样,一键安装默认会安装在c盘,我选择自定义安装,将其安装在D:/Marklogic目录下。
    开始菜单启动Admin marklogic server,和普通的win软件没什么异同。弹出的启动窗口启动完成后,自动关闭,说明安装已经完毕了。
    在浏览器中输入localhost:8001,回车,就到了初始化配置界面。
    • join a Cluster
      由于学习阶段我们还不会用到集群,配置cluster,可以直接忽略,点击skip。
      Jion Cluster
    • Security Setup
      接下来,配置server的用户名和密码。之后,在每次登陆server的时候,网页都将提示我们输入次用户名和密码,请牢记
      sercurity setup
    • Admin page
      这个就是marklogic的后台管理页面了,之后会经常和它打招呼
      Admin page
    • Query Console
      在浏览器输入http://localhost:8000/qconsole/,键入之前设置的用户名和密码,就来到了console界面。之后我们需要测试代码,写demo,就可以在这里完成
      qconsole
  3. 激活
    细心的你有没有发现,在Admin page 页面上,上图中浅绿色部分,有一行标示No license key has been entered.说明我们当前用的server,还是没有license的,我们需要去申请一个license.
    申请许可证书页面,点击Get Deverloper License, 输入些许个人信息,同意Marklogic条约,即可免费申请到一个license key,当然它只能要求你在本机上使用,而且不能做商用。
    许可证书
    到这里,已经成功申请到了许可。点击ok,server会自动重启。刷新Admin Page页面,发现未许可的提示已经没有了。现在你应该可以尽情地享用Marklogic了,当然按照官网的介绍,这个license只有6个月时间,之后需要再次申请。


Marklogic预备知识——XML、XPath、XQuery

前言: Marklogic在设计之初就注重于XML文档标准,并将XQuery作为其查询语言。因此在学习marklogic之前,有必要对XML相关知识做下了解。

XML

定义

XML(Extensible Markup Language)可扩展标记语言,设计之初就是为了存储和传输数据,标签本身没有被预定义,符合w3c标准。
同时为了让XML便于解析,XML语法有如下规定:
1. 任何起始标签都应有结束标签。<div>Marklogic</div>
2. 可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。<div/>
3. 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签。<div><p></p></div>
4. 所有的属性都必须有值。<input name="text">
5. 所有的属性都必须在值的周围加上双引号。

文档声明

XML文档声明向我们声明了这是个XML文件,最简单的声明:<?xml version="1.0" ?>,目前只有1.0版本,还可以规定文档编码<?xml version="1.0" encoding="utf-8" ?>.值得注意的是文档声明不符合XML语法,不属于XML内容,位置始终处于文件第一行。

注释

  1. 注释语法<!--这里写注释-->
  2. 声明之前不能有注释
  3. 注释不能嵌套

举例

<code class="language-xml hljs  has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="utf-8" ?></span>
<span class="hljs-tag"><<span class="hljs-title">books</span> <span class="hljs-attribute">xmlns</span>=<span class="hljs-value">'http://www.csdn.net/example/book'</span>></span>
<span class="hljs-comment"><!--这是一本书的信息--></span>
    <span class="hljs-tag"><<span class="hljs-title">book</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"1010596200"</span> <span class="hljs-attribute">category</span>=<span class="hljs-value">"编程"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">title</span>></span>Java编程思想<span class="hljs-tag"></<span class="hljs-title">title</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">author</span>></span>埃克尔<span class="hljs-tag"></<span class="hljs-title">author</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">pubDate</span>></span>2007-6-1<span class="hljs-tag"></<span class="hljs-title">pubDate</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">pages</span>></span>880<span class="hljs-tag"></<span class="hljs-title">pages</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">price</span>></span>30.0<span class="hljs-tag"></<span class="hljs-title">price</span>></span>
    <span class="hljs-tag"></<span class="hljs-title">book</span>></span>
<span class="hljs-comment"><!--这是另一本书的信息--></span>
    <span class="hljs-tag"><<span class="hljs-title">book</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"1010696100"</span> <span class="hljs-attribute">category</span>=<span class="hljs-value">"文学"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">title</span>></span>红楼梦<span class="hljs-tag"></<span class="hljs-title">title</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">author</span>></span>
            <span class="hljs-tag"><<span class="hljs-title">firstAuthor</span>></span>曹雪芹<span class="hljs-tag"></<span class="hljs-title">firstAuthor</span>></span>
            <span class="hljs-tag"><<span class="hljs-title">secondAuthor</span>></span>高鹗<span class="hljs-tag"></<span class="hljs-title">secondAuthor</span>></span>
        <span class="hljs-tag"></<span class="hljs-title">author</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">pubDate</span>></span>2012-9-1<span class="hljs-tag"></<span class="hljs-title">pubDate</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">pages</span>></span>1606<span class="hljs-tag"></<span class="hljs-title">pages</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">price</span>></span>41.5<span class="hljs-tag"></<span class="hljs-title">price</span>></span>
    <span class="hljs-tag"></<span class="hljs-title">book</span>></span>
<span class="hljs-tag"></<span class="hljs-title">books</span>></span></code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li></ul>

XPath

XPath即XML路径语言,可在 XML 文档中对元素和属性进行遍历。它包含一个标准的函数库,符合w3c标准。

节点

在XPath 中,有如下七种类型的节点:
元素element : <title>
属性attribute : id='1010596200'
文本text : 红楼梦
命名空间namespace : xmlns='http://www.csdn.net/example/book'
处理指令processing instruction:强大的函数库
注释comment : <!--这是另一本书的信息-->
文档节点root : 即根节点 <books>

语法

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

举例

表达式描述
books选取 books 元素的所有子节点。
/books选取根元素 bookstore。
books//title选取属于 books 的子元素的所有 title 元素。
//price选取所有 price 元素。
books/book[1]选取属于 books 子元素的第一个 book 元素。
/bookstore/book[price>35.0]选取所有单价大于35的 book 元素。
//@category选取所有名为 category 的属性。
//*选取文档中的所有元素。
/books/book/title/text()选取文档所有 title 值。
fn:count(/books/book)计算书的数量,为2本。

XQuery

XQuery = XML Query,是W3C所制定的一套标准,用来从XML文档中提取信息。XQuery 相对于 XML,等同于 SQL 相对于数据库。

基础语法

  • XQuery 对大小写敏感
  • XQuery 的元素、属性以及变量必须是合法的 XML 名称。
  • XQuery 字符串值可使用单引号或双引号。
  • XQuery 变量由 “$”并跟随一个名称来进行定义,如,$str
  • XQuery 注释被 (: 和 :) 分割,例如,(: 这是XQuery 注释 :)

FLWOR 表达式

这里的FLWOR是由XQuery的五个常用关键词for、let、where、order by、return首字母合并而来,音同单词‘flower’(鲜花),但是写法不同。且FLWOR字母顺序由XQuery语法而定,不可变更。

- for : 将某一节点的下所有元素依次赋值到一变量中。
- let : 语句定义变量。
- where : 语句给出了选取条件。
- order by : 语句定义了排序次序。
- return : 语句规定返回什么内容。
首先,我们需要准备一个“book.xml”文件,数据就是第一节的例子内容。基于第二节的内容,我们已经可以看懂/books/book[price>30]/title就是选取书的单价高于30元的书名,现在你需要知道doc("books.xml")/books/book[price>30]/title表达的是同样的意思。
接下来,我们看一段代码

<code class="language-xquery hljs bash has-numbering"><span class="hljs-keyword">for</span> <span class="hljs-variable">$x</span> <span class="hljs-keyword">in</span> doc(<span class="hljs-string">"books.xml"</span>)/books/book
where <span class="hljs-variable">$x</span>/price><span class="hljs-number">30</span>
<span class="hljs-keyword">return</span> <span class="hljs-variable">$x</span>/title</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li></ul>

第一行是在做遍历,把 books 元素下的所有 book 元素提取到名为 $x 的变量中;第二行给出判断条件,需要book元素下的price值大于30;第三行返回数据,满足判断条件的title元素。此 FLWOR 表达式所选取的数据和上面的路径表达式是相同的。得到的数据为<title>红楼梦</title>.

条件表达

“if-then-else” 在 XQuery 中做条件选择使用。
请看下面的例子:

<code class="language-xquery hljs bash has-numbering">    <span class="hljs-keyword">for</span> <span class="hljs-variable">$x</span> <span class="hljs-keyword">in</span> doc(<span class="hljs-string">"books.xml"</span>)/books/book
    <span class="hljs-keyword">return</span>  <span class="hljs-keyword">if</span> (<span class="hljs-variable">$x</span>/@category=<span class="hljs-string">"文学"</span>)
            <span class="hljs-keyword">then</span> <Literature>{data(<span class="hljs-variable">$x</span>/title)}</Literature>
            <span class="hljs-keyword">else</span> <Programming>{data(<span class="hljs-variable">$x</span>/title)}</Programming></code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li></ul>

结果为

<code class="language-xml hljs  has-numbering"><span class="hljs-tag"><<span class="hljs-title">Literature</span>></span>红楼梦<span class="hljs-tag"></<span class="hljs-title">Literature</span>></span>
<span class="hljs-tag"><<span class="hljs-title">Programming</span>></span>Java编程思想<span class="hljs-tag"></<span class="hljs-title">Programming</span>></span></code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li></ul>

请注意 “if-then-else” 的语法:if 表达式后的圆括号是必需的,else 也是必需的,如果else没有语句,仅仅写 “else ()” 也是可以的。

比较

在 XQuery 中,有两种方法来比较值。
通用比较:=, !=, <, <=, >, >=
值的比较:eq、ne、lt、le、gt、ge

这两种比较方法的差异如下:
请看下面的 XQuery 表达式:
books//book/price > 10
如果 price 的值大于 10,上面的表达式的返回值为 true。
books//book/price gt 10
如果仅返回一个price ,且它的值大于 10,那么表达式返回 true。如果不止一个 price 被返回,则会发生错误。
当然这一差异属于XQuery语法,在Marklogic下,没有这一约束。

自定义函数

<code class="language-xquery hljs r has-numbering">declare <span class="hljs-keyword">function</span> 前缀:函数名($参数 AS 数据类型) AS 返回的数据类型
{

(: <span class="hljs-keyword">...</span>函数代码<span class="hljs-keyword">...</span> :)

};</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul>

应注意:
- 请使用 declare function 关键词
- 函数名须使用前缀
- 参数的数据类型通常与在 XML Schema 中定义的数据类型一致
- 函数主体须被花括号包围
举个例子:

<code class="language-xquery hljs php has-numbering"><span class="hljs-keyword">declare</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">local</span>:<span class="hljs-title">TotalPrice</span><span class="hljs-params">(
  <span class="hljs-variable">$price</span> as xs:decimal?,
  <span class="hljs-variable">$count</span> as xs:int?)</span>
  <span class="hljs-title">as</span> <span class="hljs-title">xs</span>:<span class="hljs-title">decimal</span>?
{</span>
let <span class="hljs-variable">$tp</span> := <span class="hljs-variable">$price</span> * <span class="hljs-variable">$count</span>
<span class="hljs-keyword">return</span> <span class="hljs-variable">$tp</span>
};</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li></ul>

上例中,调用函数时,传入书的单价和要购买的本数,即可得出总价。
local:TotalPrice(/books/book[price>30]/price, 2) 返回83.
另:(常见的 XML Schema 数据类型)

Simple TypeComments
string字符串
int整数
decimal-1.23, 0, 123.4, 1000.00
booleantrue/false
dateTime2015-12-07T23:20:00.000
QName带命名空间的XML签名



Marklogic qconsole简介

前言: query console是Marklogic为了便于开发者快速测试代码,调试问题,资料查询,运行XQuery脚本而设计的查询控制台。本节主要介绍它的基本结构和使用要点。

qConsole启动

在win7上,直接在浏览器输入http://localhost:8000/qconsole/。输入用户名好密码,可以看到下图展示界面
qConsole

如果Marklogic安装在其他服务器上,访问方式应为http://host_name:8000/qconsole
如果没有看到上面界面,可能是权限不够,要想使用qConsole,还必须成为qconsole-user成员,admin用户可以管理成员。
有时你的权限可能是只读,你可以正常打开上述页面,并执行相关的查询操作,但当你运行诸如文档插入或删除命令时,会被Marklogic拒绝。
对于某一特定用户,Marklogic只会保持一个session在server端。如果某一用户同时开启多个qConsole, 它们的状态会不一致,因此最好不要多个浏览器或标签页下使用同一用户名登陆。


在windows下,如果Marklogic是以默认方式安装的,会开机自启动,可能会拖慢开机速度。以下方式可以将其变为手动启动:
计算机 –> (右键) –> 管理 –> 服务和应用程序 –> 服务 – > MarkLogic
右键
管理
常规 –> 启动类型 –> 手动 –>确定
Marklogic
下次开机后,就不能直接在浏览器中输入qConsole地址打开,而是需要先手动启动服务
启动

qConsole组件

query 可以执行的XQuery, SQL, SPARQL,JavaScript脚本。当你在Query Console中运行语句时,可以在结果区看到result.
workspace 工作区就是一系列的语句集合,可以用workspace来组织你的Query. 你可以创建很多workspace, 但是只有一个是处于激活状态。
history 可以记录你之前运行过的query语句。每在Query Console中执行一次,它变可以历史记录存档。点击任意存档,可以恢复当时的query。
content source 概念同数据库,query console 可以自动为Marklogic构建可用的content sources

qConsole使用

创建query

  1. 创建workspace
    点击右上角的workspace下拉按钮,新建一个workspace.
    workspace
  2. 添加query
    点击左上角“+”,打开一个新的query编辑界面
    query
  3. 重命名
    双击query或者workspace的名字,可以重命名
    rename
  4. 选择查询语言
    Query Type的下拉列表可以选择查询的方式,Marklogic 8 支持以下几种查询语言:
    • JavaScript
    • XQuery
    • SQL
    • SPARQL Query
    • SPARQL Update
      query Type

运行Query

  1. 选择content source
    每一次运行query,都应选择正确的content soure. 本例中,你可以选择任意的content source.
    content
  2. 点击 “Run”
    Run
  3. 选择结果格式
    Format

看历史query

每次修改与运行query,qConsole都会将运行脚本与执行时间存档。只有运行过的脚本才会被保存,只有修改过的代码才会生成新的历史记录。qConsole最多保存50条历史记录。
history

分析Query

qConsole可以分析当前运行query的性能。
profile

浏览数据库

  1. 从content source中选择一个数据库
  2. 点击右边的 Explore ,在结果区将展示这个数据库中的文件
    这里写图片描述
  3. 点击蓝色的文件URI链接,会直接打开此文档
  4. 来回切换窗口
    back



Marklogic基本概念

摘要:如果之前有学习过SQL,应该了解一些数据库的基本概念。本节将帮助您更容易理解Marklogic中的一些概念。

术语

SQL术语Marklogic术语说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/XML文档
columnfield数据字段/域
indexindex索引
table joins 表连接,Marklogic不支持

  1. 数据库 : 一个Marklogic中可以建立多个数据库。每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
  2. 文档 : 文档是Marklogic中的最核心的概念,是其核心单元,我们可以将文档类比成关系型数据库中的每一行数据。多个键及其关联的值有序的放置在一起就是文档。
  3. 集合 : 集合就是一组文档的组合。如果将文档类比成数据库中的行,那么集合就可以类比成数据库的表。在Marklogic中的集合是无模式的,也就是说集合中存储的文档的结构可以是不同的。
  4. 元数据 : 描述数据库存储数据信息的数据。

举例

idcategorytitleauthorpubDatepagesprice
1010596200编程Java编程思想埃克尔2007-6-188030.0
1010696100文学红楼梦曹雪芹,高鹗2012-9-1160641.5

tables表的数据可用如下两个XML文档存储:

<code class="language-xml hljs  has-numbering">    <span class="hljs-tag"><<span class="hljs-title">book</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"1010596200"</span> <span class="hljs-attribute">category</span>=<span class="hljs-value">"编程"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">title</span>></span>Java编程思想<span class="hljs-tag"></<span class="hljs-title">title</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">author</span>></span>埃克尔<span class="hljs-tag"></<span class="hljs-title">author</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">pubDate</span>></span>2007-6-1<span class="hljs-tag"></<span class="hljs-title">pubDate</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">pages</span>></span>880<span class="hljs-tag"></<span class="hljs-title">pages</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">price</span>></span>30.0<span class="hljs-tag"></<span class="hljs-title">price</span>></span>
    <span class="hljs-tag"></<span class="hljs-title">book</span>></span></code>
<code class="language-xml hljs  has-numbering">    <span class="hljs-tag"><<span class="hljs-title">book</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"1010696100"</span> <span class="hljs-attribute">category</span>=<span class="hljs-value">"文学"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">title</span>></span>红楼梦<span class="hljs-tag"></<span class="hljs-title">title</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">author</span>></span>
            <span class="hljs-tag"><<span class="hljs-title">firstAuthor</span>></span>曹雪芹<span class="hljs-tag"></<span class="hljs-title">firstAuthor</span>></span>
            <span class="hljs-tag"><<span class="hljs-title">secondAuthor</span>></span>高鹗<span class="hljs-tag"></<span class="hljs-title">secondAuthor</span>></span>
        <span class="hljs-tag"></<span class="hljs-title">author</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">pubDate</span>></span>2012-9-1<span class="hljs-tag"></<span class="hljs-title">pubDate</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">pages</span>></span>1606<span class="hljs-tag"></<span class="hljs-title">pages</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">price</span>></span>41.5<span class="hljs-tag"></<span class="hljs-title">price</span>></span>
    <span class="hljs-tag"></<span class="hljs-title">book</span>>



</span></code><h1 id="marklogic基本概念">Marklogic初学</h1><p>MarkLogic -> Groups ->Default -> App Servers -> App Server分为三类:</p><ol><li>Http</li><li>WebDAV</li><li>XDBC</li></ol><p>其中:</p><p>Root 就是数据库根目录</p><p>Module是放的xquery,而xquery其实就是view</p><p>Database才是放的数据,即xml文件</p><p>
</p><p>//insert a xml into db</p><p>load.xqy</p><div style="overflow: visible ! important;" class="dp-highlighter bg_html"><div class="bar"><div class="tools"><strong>[html]</strong> <a target=_blank href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="ViewSource" title="view plain">view plain</a><span class="tracking-ad" data-mod="popu_168"> <a target=_blank target="_blank" href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="CopyToClipboard" title="copy">copy</a></span><div id="FRO1805242100" style="position: relative ! important; left: 514px; top: 870px; width: 22px ! important; height: 12px; z-index: 1805242098 ! important;"><div style="cursor: w-resize ! important; width: 2px ! important; height: 12px ! important; overflow: hidden ! important; background-color: rgb(0, 153, 0) ! important; float: right ! important; z-index: 1805242099 ! important;">⃕</div></div><span class="tracking-ad" data-mod="popu_169"> <a target=_blank target="_blank" href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="PrintSource" title="print">print</a></span><a target=_blank href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="About" title="?">?</a></div></div><ol class="dp-xml" start="1"><li class="alt"><span><span>xquery version "1.0-ml";  </span></span></li><li><span>(: load.xqy :)  </span></li><li class="alt"><span>xdmp:document-insert("books.xml",  </span></li><li><span><span class="tag"><</span><span class="tag-name">books</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.marklogic.com/ns/gs-books"</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">book</span><span> </span><span class="attribute">bookid</span><span>=</span><span class="attribute-value">"1"</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">title</span><span class="tag">></span><span>A Quick Path to an Application</span><span class="tag"></</span><span class="tag-name">title</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">author</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">last</span><span class="tag">></span><span>Smith</span><span class="tag"></</span><span class="tag-name">last</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">first</span><span class="tag">></span><span>Jim</span><span class="tag"></</span><span class="tag-name">first</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">author</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">publisher</span><span class="tag">></span><span>Scribblers Press</span><span class="tag"></</span><span class="tag-name">publisher</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">isbn</span><span class="tag">></span><span>1494-3930392-3</span><span class="tag"></</span><span class="tag-name">isbn</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">abstract</span><span class="tag">></span><span>This book describes in detail the power of how to use   </span></span></li><li><span>XQuery to build powerful web applications that are built on the   </span></li><li class="alt"><span>MarkLogic Server platform.<span class="tag"></</span><span class="tag-name">abstract</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">book</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">books</span><span class="tag">></span><span>  </span></span></li><li><span>),  </span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">html</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.w3.org/1999/xhtml"</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">head</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">title</span><span class="tag">></span><span>Database loaded</span><span class="tag"></</span><span class="tag-name">title</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">head</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">body</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">b</span><span class="tag">></span><span>Source XML Loaded</span><span class="tag"></</span><span class="tag-name">b</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">p</span><span class="tag">></span><span>The source XML has been successfully loaded into the database</span><span class="tag"></</span><span class="tag-name">p</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">body</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">html</span><span class="tag">></span><span>  </span></span></li></ol></div><p>
</p>// get xml from db
dump.xqy<div style="overflow: visible ! important;" class="dp-highlighter bg_html"><div class="bar"><div class="tools"><strong>[html]</strong> <a target=_blank href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="ViewSource" title="view plain">view plain</a><span class="tracking-ad" data-mod="popu_168"> <a target=_blank target="_blank" href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="CopyToClipboard" title="copy">copy</a></span><div id="FRO180258344" style="position: relative ! important; left: 514px; top: 1519px; width: 22px ! important; height: 12px; z-index: 180258342 ! important;"><div style="cursor: w-resize ! important; width: 2px ! important; height: 12px ! important; overflow: hidden ! important; background-color: rgb(0, 153, 0) ! important; float: right ! important; z-index: 180258343 ! important;">⃕</div></div><span class="tracking-ad" data-mod="popu_169"> <a target=_blank target="_blank" href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="PrintSource" title="print">print</a></span><a target=_blank href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="About" title="?">?</a></div></div><ol class="dp-xml" start="1"><li class="alt"><span><span>xquery version "1.0-ml";  </span></span></li><li><span>(: dump.xqy :)  </span></li><li class="alt"><span>declare namespace <span class="attribute">bk</span><span> = </span><span class="attribute-value">"http://www.marklogic.com/ns/gs-books"</span><span>;  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">html</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.w3.org/1999/xhtml"</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">head</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">title</span><span class="tag">></span><span>Database dump</span><span class="tag"></</span><span class="tag-name">title</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">head</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">body</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">b</span><span class="tag">></span><span>XML Content</span><span class="tag"></</span><span class="tag-name">b</span><span class="tag">></span><span>  </span></span></li><li><span>{  </span></li><li class="alt"><span>for $book in doc("books.xml")/bk:books/bk:book  </span></li><li><span>return  </span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">pre</span><span class="tag">></span><span>  </span></span></li><li><span>Title: { $book/bk:title/text() }  </span></li><li class="alt"><span>Author: { ($book/bk:author/bk:first/text(), " ",  </span></li><li><span>$book/bk:author/bk:last/text()) }  </span></li><li class="alt"><span>Publisher: { $book/bk:publisher/text() }  </span></li><li><span><span class="tag"></</span><span class="tag-name">pre</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span>}  </span></li><li><span><span class="tag"><</span><span class="tag-name">a</span><span> </span><span class="attribute">href</span><span>=</span><span class="attribute-value">"update-form.xqy"</span><span class="tag">></span><span>Update Publisher</span><span class="tag"></</span><span class="tag-name">a</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">body</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">html</span><span class="tag">></span><span>  </span></span></li></ol></div>
update-form.xqy<div style="overflow: visible ! important;" class="dp-highlighter bg_html"><div class="bar"><div class="tools"><strong>[html]</strong> <a target=_blank href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="ViewSource" title="view plain">view plain</a><span class="tracking-ad" data-mod="popu_168"> <a target=_blank target="_blank" href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="CopyToClipboard" title="copy">copy</a></span><div id="FRO633685906" style="position: relative ! important; left: 514px; top: 2052px; width: 22px ! important; height: 12px; z-index: 633685904 ! important;"><div style="cursor: w-resize ! important; width: 2px ! important; height: 12px ! important; overflow: hidden ! important; background-color: rgb(0, 153, 0) ! important; float: right ! important; z-index: 633685905 ! important;">⃕</div></div><span class="tracking-ad" data-mod="popu_169"> <a target=_blank target="_blank" href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="PrintSource" title="print">print</a></span><a target=_blank href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="About" title="?">?</a></div></div><ol class="dp-xml" start="1"><li class="alt"><span><span>xquery version "1.0-ml";  </span></span></li><li><span>(: update-form.xqy :)  </span></li><li class="alt"><span>declare namespace <span class="attribute">bk</span><span>=</span><span class="attribute-value">"http://www.marklogic.com/ns/gs-books"</span><span>;  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">html</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.w3.org/1999/xhtml"</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">head</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">title</span><span class="tag">></span><span>Change Publisher</span><span class="tag"></</span><span class="tag-name">title</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">head</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">body</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span>{  </span></li><li><span>let $book <span class="attribute">:</span><span>= </span><span class="attribute-value">doc</span><span>("books.xml")/bk:books/bk:book[1]  </span></span></li><li class="alt"><span>return  </span></li><li><span><span class="tag"><</span><span class="tag-name">form</span><span> </span><span class="attribute">action</span><span>=</span><span class="attribute-value">"update-write.xqy"</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"hidden"</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"bookid"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{ $book/@bookid }"</span><span class="tag">/></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">p</span><span class="tag">></span><span class="tag"><</span><span class="tag-name">b</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span>Change publisher for book <span class="tag"><</span><span class="tag-name">i</span><span class="tag">></span><span>{ $book/bk:title/text() }</span><span class="tag"></</span><span class="tag-name">i</span><span class="tag">></span><span>:  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">b</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">p</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"text"</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"publisher"</span><span>  </span></span></li><li><span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{ $book/bk:publisher/text() }"</span><span class="tag">/></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"submit"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"Update publisher"</span><span class="tag">/></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">form</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span>}  </span></li><li><span><span class="tag"></</span><span class="tag-name">body</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">html</span><span class="tag">></span><span>  </span></span></li></ol></div>
update-write.xqy<div style="overflow: visible ! important;" class="dp-highlighter bg_html"><div class="bar"><div class="tools"><strong>[html]</strong> <a target=_blank href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="ViewSource" title="view plain">view plain</a><span class="tracking-ad" data-mod="popu_168"> <a target=_blank target="_blank" href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="CopyToClipboard" title="copy">copy</a></span><div id="FRO833859133" style="position: relative ! important; left: 514px; top: 2603px; width: 22px ! important; height: 12px; z-index: 833859131 ! important;"><div style="cursor: w-resize ! important; width: 2px ! important; height: 12px ! important; overflow: hidden ! important; background-color: rgb(0, 153, 0) ! important; float: right ! important; z-index: 833859132 ! important;">⃕</div></div><span class="tracking-ad" data-mod="popu_169"> <a target=_blank target="_blank" href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="PrintSource" title="print">print</a></span><a target=_blank href="http://blog.csdn.net/lein_wang/article/details/7755084#" class="About" title="?">?</a></div></div><ol class="dp-xml" start="1"><li class="alt"><span><span>xquery version "1.0-ml";  </span></span></li><li><span>(: update-write.xqy :)  </span></li><li class="alt"><span>declare namespace <span class="attribute">bk</span><span>=</span><span class="attribute-value">"http://www.marklogic.com/ns/gs-books"</span><span>;  </span></span></li><li><span>declare function local:updatePublisher()  </span></li><li class="alt"><span>{  </span></li><li><span>if (doc("books.xml")) then  </span></li><li class="alt"><span>let $bookid <span class="attribute">:</span><span>= </span><span class="attribute-value">xdmp</span><span>:get-request-field("bookid")  </span></span></li><li><span>let $publisher <span class="attribute">:</span><span>= </span><span class="attribute-value">xdmp</span><span>:get-request-field("publisher")  </span></span></li><li class="alt"><span>let $b <span class="attribute">:</span><span>= </span><span class="attribute-value">doc</span><span>("books.xml")/bk:books/bk:book[@</span><span class="attribute">bookid</span><span> = $bookid]  </span></span></li><li><span>return  </span></li><li class="alt"><span>if ($b) then  </span></li><li><span>(  </span></li><li class="alt"><span>xdmp:node-replace($b/bk:publisher,  </span></li><li><span><span class="tag"><</span><span class="tag-name">bk:publisher</span><span class="tag">></span><span>{ $publisher }</span><span class="tag"></</span><span class="tag-name">bk:publisher</span><span class="tag">></span><span>)  </span></span></li><li class="alt"><span>,  </span></li><li><span>xdmp:redirect-response("dump.xqy")  </span></li><li class="alt"><span>)  </span></li><li><span>else  </span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">span</span><span class="tag">></span><span>Could not locate book with bookid { $bookid }.</span><span class="tag"></</span><span class="tag-name">span</span><span class="tag">></span><span>  </span></span></li><li><span>else  </span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">span</span><span class="tag">></span><span>Unable to access parent XML document.</span><span class="tag"></</span><span class="tag-name">span</span><span class="tag">></span><span>  </span></span></li><li><span>};  </span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">html</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.w3.org/1999/xhtml"</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"><</span><span class="tag-name">head</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">title</span><span class="tag">></span><span>Update In Process</span><span class="tag"></</span><span class="tag-name">title</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">head</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">body</span><span class="tag">></span><span>  </span></span></li><li><span>Attempting to complete update and redirect browser to detail page.  </span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">p</span><span class="tag">></span><span>  </span></span></li><li><span>If you are seeing this page, either the redirect has failed  </span></li><li class="alt"><span>or the update has failed. The update has failed if there is  </span></li><li><span>a reason provided below:  </span></li><li class="alt"><span><span class="tag"><</span><span class="tag-name">br</span><span class="tag">/></span><span>  </span></span></li><li><span>{ local:updatePublisher() }  </span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">p</span><span class="tag">></span><span>  </span></span></li><li><span><span class="tag"></</span><span class="tag-name">body</span><span class="tag">></span><span>  </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">html</span><span class="tag">></span><span>  
</span></span></li></ol></div> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值