- From: Philip Fennell <Philip.Fennell@marklogic.com>
- Date: Tue, 10 May 2011 22:07:07 -0700
- To: "www-forms@w3.org" <www-forms@w3.org>
Resending - I think the previous version of this e-mail has got stuck in the pipes because I put the xform as an attachment.
I have been experimenting with demonstrating Schematron validation within XForms by the use of the proposed transform function. I have been using XSLTForms beta3 and have a rather limited example which uses the textual result from the XSLT 1.0 skeleton implementation. Seeing as XSLTForms' transform function returns a string serialization of the result of the transform I cannot use the SVRL representation of a Schematron report which would, if available as an XML tree, provide more options for presentation and logic/behavior than the basic text report. However, it does prove that it can work all be it that the 'complied' schema can only be accessed via a URI.
I am still looking for an implementation that'll firstly let me store the compiled schema in an XForms instance and ultimately allow me to daisy-chain the compilation transforms, across an number of instances, so that I can create a Schematron rules editor in XForms and have the schema compiled and applied to a test source document upon DOMSubtreeModified events dispatched from the schema instance. The nearest option I can currently see working is to use Orbeon's xxforms:call-xpl() function and implement the Schematron compilation pipeline externally to XForms but that's not what I'm after.
I have included below the fledgling form so that you can see the string of instances I'll in order to compile the schema. It's all rather a hack at the moment but I'm planning on making it look a bit more presentable.
Regards
Philip Fennell
Consultant
MarkLogic Corporation
One Kingdom Street
Paddington Central
London W2 6BD
United Kingdom
Mobile: +44 (0) 7824 830 866
Tel: +44 (0) 203 402 3619
email Philip.Fennell@marklogic.com
web www.marklogic.com
<?oxygen NVDLSchema="../../schemas/nvdl/xhtml-xforms11.nvdl"?>
<?xml-stylesheet href="/resources/xsltforms/xsltforms.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:iso="http://purl.oclc.org/dsdl/schematron"
xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xml:lang="en"
lang="en">
<head>
<title>XForms + Schematron</title>
<meta http-equiv="content-language" content="en" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--<link href="/resources/css/xforms.css" media="all" rel="stylesheet"/>-->
<xf:model id="content">
<xf:instance id="source">
<atom:feed xmlns:atom="http://www.w3.org/2005/Atom">
<atom:title>Test Feed</atom:title>
<atom:id>urn:test:atom-feed</atom:id>
<atom:updated>2011-05-06T19:10:00</atom:updated>
</atom:feed>
</xf:instance>
<xf:bind id="feedTitle" nodeset="atom:title"/>
<xf:bind id="feedId" nodeset="atom:id"></xf:bind>
<xf:bind id="feedUpdated" nodeset="atom:updated"/>
</xf:model>
<xf:model id="rules">
<xf:instance id="schema">
<iso:schema xmlns:iso="http://purl.oclc.org/dsdl/schematron">
<iso:ns prefix="atom" uri="http://www.w3.org/2005/Atom"/>
<iso:title>Simple Atom Feed Rules</iso:title>
<iso:pattern>
<iso:title>Atom Feed Root</iso:title>
<iso:rule context="/">
<iso:assert test="atom:feed">The document root must be an atom:feed element.</iso:assert>
</iso:rule>
</iso:pattern>
<iso:pattern>
<iso:title>Required elements of an Atom Feed</iso:title>
<iso:rule context="/atom:feed">
<iso:assert test="atom:title">atom:title is missing, this is a required element.</iso:assert>
<iso:assert test="atom:id">atom:id is missing, this is a required element.</iso:assert>
<iso:assert test="atom:updated">atom:updated is missing, this is a required element.</iso:assert>
</iso:rule>
</iso:pattern>
</iso:schema>
</xf:instance>
<xf:instance id="dsdlInclude">
<iso:schema xmlns:iso="http://purl.oclc.org/dsdl/schematron"/>
</xf:instance>
<xf:instance id="abstractExpand">
<iso:schema xmlns:iso="http://purl.oclc.org/dsdl/schematron"/>
</xf:instance>
<xf:instance id="compiledSchema">
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>
</xf:instance>
<xf:instance id="svrlReport">
<svrl:schematron-output xmlns:svrl="http://purl.oclc.org/dsdl/svrl"> </svrl:schematron-output>
</xf:instance>
</xf:model>
</head>
<body>
<div id="view">
<h1>Source</h1>
<h2>
<xf:output value="name(instance('source'))">
<xf:label>Document Root</xf:label>
</xf:output>
</h2>
<div>
<xf:output bind="feedTitle">
<xf:label>Title</xf:label>
</xf:output>
</div>
<div>
<xf:output bind="feedId">
<xf:label>Id</xf:label>
</xf:output>
</div>
<div>
<xf:output bind="feedUpdated">
<xf:label>Updated</xf:label>
</xf:output>
</div>
</div>
<div id="results">
<div>
<pre>
<xf:output ref="instance('svrlReport')"/>
</pre>
</div>
<div>
<xf:trigger>
<xf:label>Validate Rules</xf:label>
<xf:action ev:event="DOMActivate">
<!--<xf:insert origin="transform(instance('source'), '/resources/schemas/schematron/atom-feed.xsl')" position="after" nodeset="." context="instance('svrlReport')"/>-->
<xf:setvalue ref="instance('svrlReport')"
value="substring-after(substring-before(
transform(instance('source'), '/resources/schemas/schematron/vanilla-atom-feed.xsl'),
'</'), '>')"/>
</xf:action>
</xf:trigger>
</div>
</div>
</body>
</html>
Received on Wednesday, 11 May 2011 05:07:33 UTC