跳转至内容

XRX/检测重复

来自维基教科书,开放的书籍,为开放的世界
< XRX

您希望在表单字段中用户输入时检测到重复项。

我们将创建一个表单,每次在字段中输入字母时都会向服务器发送请求。表单将调用 ReST 网络服务,并将当前术语作为参数传递。

示例 XQuery

[编辑 | 编辑源代码]

以下查询可用于服务器上检测重复项。

xquery version "1.0";
declare namespace request="http://exist-db.org/xquery/request";
declare option exist:serialize "method=xml media-type=text/xml indent=yes";
let $term-name := request:get-parameter('term-name', '')
let $collection := '/db/terms'
return
if (not($term-name)) then
   <error>
      <message>Error: term-name argument required</message>
   </error>
else
<result>{
  if (collection($collection)/Term[TermName/text()=$term-name or Abbreviation/text()=$term-name])
    then <true/>
    else <false/>
}</result>

此查询接受一个参数,并返回一个 true 或 false 元素。

$BASENAME/xqueries/term-exists.xq?term-name=Product

如果该术语存在于数据库中,它将返回以下内容

<result>
   <true/>
</result>

XForms 应用程序

[编辑 | 编辑源代码]
<html
   xmlns="http://www.w3.org/1999/xhtml"
   xmlns:xf="http://www.w3.org/2002/xforms"
   xmlns:ev="http://www.w3.org/2001/xml-events" >
   <head>
       <title>Duplicate Detection Example</title>
       <xf:model>
           <xf:instance xmlns="" id="term">
               <data>
                   <term-name>Product</term-name>
                </data>
            </xf:instance>
            <xf:submission id="check-for-duplicate" method="get" 
                    action="term-exists.xq" 
                    instance="term" replace="all"/>
        </xf:model>
     </head>
     <body>
          <h1>Check Term</h1>
          <xf:input ref="term-name">
               <xf:label>Term: </xf:label>
          </xf:input>
          <xf:submit submission="check-for-duplicate">
               <xf:label>Check for Dups</xf:label>
          </xf:submit>
     </body>
</html>

现在我们有一个简单的 XForms,它调用网络服务并返回一个 true/false 记录。我们的下一步是使此测试在用户键入时在后台发生,并在检测到重复时显示警告消息。

添加逐字符测试

[编辑 | 编辑源代码]

现在我们有两个任务。我们需要在用户输入时向服务器发送事件,并且我们需要在不中断用户的情况下将信息带回来。

首先,我们想在输入字段中添加一个事件,该事件在每次在输入字段中键入字符时发送消息

<xf:input ref="term-name" incremental="true">
   <xf:label >Term: </xf:label>
   <xf:action ev:event="xforms-value-changed">
      <xf:send submission="check-for-duplicate"/>
   </xf:action>
</xf:input>

上一步:FAQ 管理器 下一步:数据元素编辑器

华夏公益教科书