Replace Tester

XForms · Wikibooks

0%

Contents

    Text

    Size
    100%
    Theme
    Typeface
    Line length
    Spacing

    From Wikibooks, under CC BY-SA 4.0, as the source states it. This page at Wikibooks.

    Replace Tester

    Motivation

    You want to build a form that will allow you quickly test replacement regular expressions using XQuery's replace function.

    Screen Image

    Illustration
    Replace Test Tool Before Submit
    Illustration
    Replace Test Tool After Submit

    Replace Test

    Sample Program

    <html 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:xf="http://www.w3.org/2002/xforms"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:ev="http://www.w3.org/2001/xml-events" >
        <head>
            <style type="text/css">
            @namespace xf url("http://www.w3.org/2002/xforms");
            body {font-family: Ariel, Helvetica, san-serif}
    
    /* Input controls appear on their own lines. */
    xf|input, xf|select, xf|select1, xf|textarea 
    {display:block; margin:5px 0;}
    
    /* Makes the labels right aligned in a 150px wide column that floats to the left of the input controls. */
    xf|input > xf|label, xf|select > xf|label, xf|select1 > xf|label, xf|textarea > xf|label, xf|output > xf|label 
    {font-weight: bold;text-align:right; padding-right:10px; width:150px; float:left; text-align:right;}
    
    /* make the input boxes a little wider */
    .xf-value {width: 200px}
    
           </style>
            <xf:model>
                <xf:instance id="request" xmlns="">
                    <data>
                         <input>abcdefghi</input>
                         <pattern>def</pattern>
                         <replacement>123</replacement>
                    </data>
                </xf:instance>
                 <xf:instance id="response" xmlns="">
                    <data/>
                </xf:instance>
                <xf:submission id="submit" method="get" action="http://localhost:8080/exist/rest/db/test/replace/replace.xq" replace="instance" instance="response"
                separator="&amp;">
                   <xf:toggle case="case-busy" ev:event="xforms-submit" />
                   <xf:toggle case="case-submit-error" ev:event="xforms-submit-error" />
                   <xf:toggle case="case-done" ev:event="xforms-submit-done" />
                </xf:submission>
            </xf:model>
        </head>
        <body>
        <h1>XForms Replace Tester</h1>
            <xf:input ref="input">
                <xf:label>Input:</xf:label>
            </xf:input>
            <xf:input ref="pattern">
                <xf:label>Pattern:</xf:label>
            </xf:input>
            <xf:input ref="replacement">
                <xf:label>Replacement:</xf:label>
            </xf:input>
            <xf:switch>
               <xf:case id="ready">
               <xf:submit submission="submit">
                  <xf:label>Submit</xf:label>
               </xf:submit>
                <xf:submit submission="echo-test">
                  <xf:label>Echo Test</xf:label>
               </xf:submit>
               </xf:case>
               <xf:case id="case-busy">
                  <p>Waiting for response...</p>
               </xf:case>
               <xf:case id="case-submit-error">
                  <p>The server has returned a submit error event.</p>
               </xf:case>
                <xf:case id="case-done">
                  <xf:output ref="instance('response')/replace-result/text()">
                     <xf:label>Result:</xf:label>
                  </xf:output>
               </xf:case>
            </xf:switch>
        </body>
    </html>
    

    XQuery Replace Tester

    If you are using eXist, just place this file on the server in the same folder as your XForms test driver.

    In the example above I used a test folder on the localhost:

    http://localhost:8080/exist/rest/db/test/replace/replace.xq

    xquery version "1.0";
    declare namespace exist = "http://exist.sourceforge.net/NS/exist"; 
    declare namespace system="http://exist-db.org/xquery/system";
    declare namespace request="http://exist-db.org/xquery/request";
    declare option exist:serialize "method=xml media-type=text/xml indent=yes";
    (: replace demo :)
    let $input := request:get-parameter('input', '')
    let $pattern  := request:get-parameter('pattern', '')
    let $replacement := request:get-parameter('replacement', '')
    
    return
    <results>
       <input>{$input }</input>
       <pattern>{$pattern}</pattern>
       <replacement>{$replacement}</replacement>
       <replace-result>{replace($input , $pattern, $replacement)}</replace-result>
    </results>
    

    Discussion

    This shows that you can quickly built tools to teach yourself complex functions like regular expression handling. You can also use the XQuery match function with returns a true/false if the regular expression matches an input string.

    There are two variations of this example that are interesting. The first is where you replace the input form with a large text area for doing global replacements of large blocks of text. The second is where you replace the patten input box with a selection list with common replacement patterns.

    References

    Examples of replacement functions can be found here:

    w3c replace examples


    Next Page: Process Step Editor | Previous Page: Event Logger
    Home: XForms