Re: Schematron transform in a Cocoon pipeline

2003-01-22 Thread jcallahan
Oskar,

Excellent suggestion.  The XPATH of the error would be very useful for
debugging.  What applications of Schematron have you done within Cocoon?
So far, I'm using it to validate uploaded documents.

-- jack

 
 Hi Jack,
 
 I have done the same to validate an XML document with an schematron. I think
 that it would be also useful to get the XPATH path of the errors in the XML
 output. The template which does this is done in skeleton1-5 (axsl:template
 match=*|@* mode=schematron-get-full-path); so you have to call it from
 the assert template:
 
 xsl:template match=sch:assert | assert
 xsl:if test=not(@test)
 xsl:messageMarkup Error: no test attribute in
 lt;assert/xsl:message
 /xsl:if
 axsl:choose
 axsl:when test={@test}/
 axsl:otherwise
 error !--my xml output--
 message !--my xml output--
 xsl:call-template name=process-assert
 xsl:with-param name=role select=@role/
 xsl:with-param name=id select=@id/
 xsl:with-param name=test
 select=normalize-space(@test) /
 xsl:with-param name=icon select=@icon/
 xsl:with-param name=subject select=@subject/
 xsl:with-param name=diagnostics
 select=@diagnostics/
 /xsl:call-template
 /message
 location !--my xml output--
 axsl:apply-templates mode=schematron-get-full-path
 select=self::*/ !--XPATH path of the error--
 /location
 /error
  /axsl:otherwise
 /axsl:choose
 /xsl:template
 
 Oskar
 
 - Original Message -
 From: John R. Callahan [EMAIL PROTECTED]
 To: [EMAIL PROTECTED]
 Sent: Tuesday, January 21, 2003 9:58 PM
 Subject: Schematron transform in a Cocoon pipeline
 
 
  This seems too simple, but I wanted to see if I could
  use Schematron generated XSLT to validate some
  XML in a Cocoon pipeline.  This might be used for
  validating uploaded  XML files for example.
 
  I downloaded the latest Schematron skeleton (1.5),
  then generated some XSLT from a set of assertions,
  and then put it into a transform in a pipeline with some
  data:
 
  map:match pattern=*.xml
map:generate src={1}.xml/
map:transform src=asserts1.xsl/
map:serialize type=xml/
  /map:match
 
  !-- build the Schematron generated XSLT --
  map:match pattern=asserts1.xsl
map:generate src=asserts1.sch/
map:transform src=skeleton1-5.xsl/
map:transform src=store.xsl
map:parameter name=file value=asserts1.xsl/
map:parameter name=dir value=./
/map:transform
map:transform type=write-source/
map:serialize type=xml/
  /map:match
 
  (see below for the source code for store.xsl)
 
  Unfortunately, the Schematron skeleton puts out plain
  text messages so the output from data1.xml isn't well-formed
  XML.  What I wanted was a series of applicable
  Schematron messages as XML output.  So, I altered
  the skeleton somewhat and now I works!
 
  My alterations to the skeleton were pretty simple:
 
  (1)  Add the following template:
 
  xsl:template match=sch:error | error mode=text
   xsl:copy-of select=./
  /xsl:template
 
  (2) Wrap a sch:results around the / template:
 
axsl:template match=/
sch:results
xsl:call-template name=process-root
  ...
/xsl:call-template
/sch:results
/axsl:template
 
  Finally, you must wrap all messages in the .sch file with
  sch:error.../sch:error as follows:
 
  sch:schema xmlns:sch=http://www.ascc.net/xml/schematron;
  ...
  sch:assert test=(@Title = 'Mr' and Sex = 'Male') or @Title != 'Mr'
sch:errorIf the Title is Mr then the sex of the person must be
 Male./sch:error
  /sch:assert
  ...
  /sch:schema
 
  Enjoy!
 
  -- jack
 
 
  (The XSLT file store.xsl is my own brew to wrap an
  element around the input source for use by the subsequent
  SourceWriterTransformer:
 
  ?xml version=1.0 encoding=UTF-8?
  !-- CVS: $Id: store.xsl,v 1.1 2002/12/16 11:04:11 callahan Exp $ --
 
  xsl:stylesheet version=1.0
 xmlns:xsl=http://www.w3.org/1999/XSL/Transform;
 
  xsl:param name=file select='foo'/
  xsl:param name=dir select='foo'/
 
  xsl:template match=/
  source:write xmlns:source=http://apache.org/cocoon/source/1.0;
   source:sourcexsl:value-of select=$dir//xsl:value-of
 select=$file//source:source
   source:fragment
   xsl:copy-of select=./
   /source:fragment
  /source:write
  /xsl:template
 
  /xsl:stylesheet
  )
 
 
 
  -
  Please check that your question  has not already been answered in the
  FAQ before posting. http://xml.apache.org/cocoon/faq/index.html
 
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail:   [EMAIL PROTECTED]
 
 
 
 -
 Please check

Re: Schematron transform in a Cocoon pipeline

2003-01-22 Thread Oskar Casquero
Jack,

I also use it to validate uploaded documents. When cocoon receives the
document, first, I check with the parser (inside the generator), that the
document is well formed and valid according to a certain W3C Schema. But
there are some verifications that the W3C Schema can't check, so, for them,
there is a second validation step, in which I use the Schematron which is
embedded in the W3C Schema.

map:match pattern=validationRequest
map:generate src=forms/sendDocument.xml/
map:transform src=stylesheets/wizard2html.xsl/
map:transform src=stylesheets/xmlform2html.xsl/
map:serialize/

/map:match
map:match pattern=validationResponse
map:generate type=myStream
map:parameter name=file-name value=document/
map:parameter name=validation value=true/
/map:generate
map:transform src=cocoon:/schematron2compiledSchematron/
map:transform src=stylesheets/schematronError2error.xsl/
map:transform src=stylesheets/error2html.xsl/
/map:match

map:match pattern=schematron2compiledSchematron
map:generate src=schemas/berta.xsd/
map:transform type=xalan src=stylesheets/getSchematron.xsl/
map:transform type=xalan src=stylesheets/skeleton1-5.xsl/
map:serialize type=xml/
/map:match

Now, as Jeff Turner suggested
(http://marc.theaimsgroup.com/?l=xml-cocoon-usersm=104306512017996w=2),
I'm thinking on moving the W3C Schema validation from the generator to a
transformer (ValidationTransformer), because I had an example where the
validation must be after procesing the document.

Oskar

- Original Message -
From: [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Wednesday, January 22, 2003 1:24 PM
Subject: Re: Schematron transform in a Cocoon pipeline


 Oskar,

 Excellent suggestion.  The XPATH of the error would be very useful for
 debugging.  What applications of Schematron have you done within Cocoon?
 So far, I'm using it to validate uploaded documents.

 -- jack

 
  Hi Jack,
 
  I have done the same to validate an XML document with an schematron. I
think
  that it would be also useful to get the XPATH path of the errors in the
XML
  output. The template which does this is done in skeleton1-5
(axsl:template
  match=*|@* mode=schematron-get-full-path); so you have to call it
from
  the assert template:
 
  xsl:template match=sch:assert | assert
  xsl:if test=not(@test)
  xsl:messageMarkup Error: no test attribute in
  lt;assert/xsl:message
  /xsl:if
  axsl:choose
  axsl:when test={@test}/
  axsl:otherwise
  error !--my xml output--
  message !--my xml output--
  xsl:call-template name=process-assert
  xsl:with-param name=role select=@role/
  xsl:with-param name=id select=@id/
  xsl:with-param name=test
  select=normalize-space(@test) /
  xsl:with-param name=icon select=@icon/
  xsl:with-param name=subject select=@subject/
  xsl:with-param name=diagnostics
  select=@diagnostics/
  /xsl:call-template
  /message
  location !--my xml output--
  axsl:apply-templates
mode=schematron-get-full-path
  select=self::*/ !--XPATH path of the error--
  /location
  /error
   /axsl:otherwise
  /axsl:choose
  /xsl:template
 
  Oskar
 
  - Original Message -
  From: John R. Callahan [EMAIL PROTECTED]
  To: [EMAIL PROTECTED]
  Sent: Tuesday, January 21, 2003 9:58 PM
  Subject: Schematron transform in a Cocoon pipeline
 
 
   This seems too simple, but I wanted to see if I could
   use Schematron generated XSLT to validate some
   XML in a Cocoon pipeline.  This might be used for
   validating uploaded  XML files for example.
  
   I downloaded the latest Schematron skeleton (1.5),
   then generated some XSLT from a set of assertions,
   and then put it into a transform in a pipeline with some
   data:
  
   map:match pattern=*.xml
 map:generate src={1}.xml/
 map:transform src=asserts1.xsl/
 map:serialize type=xml/
   /map:match
  
   !-- build the Schematron generated XSLT --
   map:match pattern=asserts1.xsl
 map:generate src=asserts1.sch/
 map:transform src=skeleton1-5.xsl/
 map:transform src=store.xsl
 map:parameter name=file value=asserts1.xsl/
 map:parameter name=dir value=./
 /map:transform
 map:transform type=write-source/
 map:serialize type=xml/
   /map:match
  
   (see below for the source code for store.xsl)
  
   Unfortunately, the Schematron skeleton puts out plain
   text messages so the output from data1.xml isn't well-formed
   XML.  What I wanted was a series of applicable
   Schematron messages as XML output.  So, I altered
   the skeleton somewhat and now I works!
  
   My alterations to the skeleton were pretty simple:
  
   (1)  Add the following template:
  
   xsl:template match

Re: Schematron transform in a Cocoon pipeline

2003-01-22 Thread Jeremy Quinn

On Tuesday, Jan 21, 2003, at 20:58 Europe/London, John R. Callahan 
wrote:

This seems too simple, but I wanted to see if I could
use Schematron generated XSLT to validate some
XML in a Cocoon pipeline.  This might be used for
validating uploaded  XML files for example.



You might find the 'slash-edit' sample in Cocoon 2.1 scratchpad a 
useful example, it is based on the skeleton 1.5 if I remember 
correctly. The validating XSLT is generated from an internal pipeline.

regards Jeremy


-
Please check that your question  has not already been answered in the
FAQ before posting. http://xml.apache.org/cocoon/faq/index.html

To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail:   [EMAIL PROTECTED]



Re: Schematron transform in a Cocoon pipeline

2003-01-22 Thread jtacaoio

Jack,

I also use it to validate uploaded documents. First, when cocoon 
receives the document, I applied to it the first validation step with 
the parser (inside the generator): the parser will check that the 
document is well formed and valid according to a certain W3C XML 
Schema. But there are some verifications which can't be done with the 
schema, so for them I use the Schematron which is embedded in the W3C 
Schema.

map:match pattern=validationRequest
map:generate src=forms/sendDocument.xml/
map:transform src=stylesheets/wizard2html.xsl/
map:transform src=stylesheets/xmlform2html.xsl/
map:serialize/
/map:match

map:match pattern=validationResponse
map:generate type=myStream
map:parameter name=file-name value=document/
map:parameter name=validation value=true/
/map:generate
map:transform src=cocoon:/schematron2compiledSchematron/
map:transform src=stylesheets/schematronError2error.xsl/
map:transform src=stylesheets/error2html.xsl/
map:serialize/
/map:match

map:match pattern=schematron2compiledSchematron
map:generate src=schemas/berta.xsd/
map:transform type=xalan src=stylesheets/getSchematron.xsl/
map:transform type=xalan src=stylesheets/skeleton1-5.xsl/
map:serialize type=xml/
/map:match

Now, as Jeff Turner suggested in http://marc.theaimsgroup.com/?l=xml-
cocoon-usersm=104308827116656w=2 , I'm thinking on moving the W3C 
schemaValidation from the generator to a transformer 
(ValidationTransformer), using JARV.

Oskar

 Oskar,
 
 Excellent suggestion.  The XPATH of the error would be very useful for
 debugging.  What applications of Schematron have you done within 
Cocoon?
 So far, I'm using it to validate uploaded documents.
 
 -- jack
 
  
  Hi Jack,
  
  I have done the same to validate an XML document with an 
schematron. I think
  that it would be also useful to get the XPATH path of the errors in 
the XML
  output. The template which does this is done in skeleton1-5 
(axsl:template
  match=*|@* mode=schematron-get-full-path); so you have to call 
it from
  the assert template:
  
  xsl:template match=sch:assert | assert
  xsl:if test=not(@test)
  xsl:messageMarkup Error: no test attribute in
  assert/xsl:message
  /xsl:if
  axsl:choose
  axsl:when test={@test}/
  axsl:otherwise
  error !--my xml output--
  message !--my xml output--
  xsl:call-template name=process-assert
  xsl:with-param name=role select=@role/
  xsl:with-param name=id select=@id/
  xsl:with-param name=test
  select=normalize-space(@test) /
  xsl:with-param name=icon select=@icon/
  xsl:with-param name=subject 
select=@subject/
  xsl:with-param name=diagnostics
  select=@diagnostics/
  /xsl:call-template
  /message
  location !--my xml output--
  axsl:apply-templates mode=schematron-get-full-
path
  select=self::*/ !--XPATH path of the error--
  /location
  /error
   /axsl:otherwise
  /axsl:choose
  /xsl:template
  
  Oskar
  
  - Original Message -
  From: John R. Callahan [EMAIL PROTECTED]
  To: [EMAIL PROTECTED]
  Sent: Tuesday, January 21, 2003 9:58 PM
  Subject: Schematron transform in a Cocoon pipeline
  
  
   This seems too simple, but I wanted to see if I could
   use Schematron generated XSLT to validate some
   XML in a Cocoon pipeline.  This might be used for
   validating uploaded  XML files for example.
  
   I downloaded the latest Schematron skeleton (1.5),
   then generated some XSLT from a set of assertions,
   and then put it into a transform in a pipeline with some
   data:
  
   map:match pattern=*.xml
 map:generate src={1}.xml/
 map:transform src=asserts1.xsl/
 map:serialize type=xml/
   /map:match
  
   !-- build the Schematron generated XSLT --
   map:match pattern=asserts1.xsl
 map:generate src=asserts1.sch/
 map:transform src=skeleton1-5.xsl/
 map:transform src=store.xsl
 map:parameter name=file value=asserts1.xsl/
 map:parameter name=dir value=./
 /map:transform
 map:transform type=write-source/
 map:serialize type=xml/
   /map:match
  
   (see below for the source code for store.xsl)
  
   Unfortunately, the Schematron skeleton puts out plain
   text messages so the output from data1.xml isn't well-formed
   XML.  What I wanted was a series of applicable
   Schematron messages as XML output.  So, I altered
   the skeleton somewhat and now I works!
  
   My alterations to the skeleton were pretty simple:
  
   (1)  Add the following template:
  
   xsl:template match=sch:error | error mode=text
xsl:copy-of select=./
   /xsl:template
  
   (2) Wrap a sch:results around the / template:
  
 axsl:template match=/
 sch:results

Schematron transform in a Cocoon pipeline

2003-01-21 Thread John R. Callahan
This seems too simple, but I wanted to see if I could
use Schematron generated XSLT to validate some
XML in a Cocoon pipeline.  This might be used for
validating uploaded  XML files for example.

I downloaded the latest Schematron skeleton (1.5),
then generated some XSLT from a set of assertions,
and then put it into a transform in a pipeline with some
data:

map:match pattern=*.xml
  map:generate src={1}.xml/
  map:transform src=asserts1.xsl/
  map:serialize type=xml/
/map:match

!-- build the Schematron generated XSLT --
map:match pattern=asserts1.xsl
  map:generate src=asserts1.sch/
  map:transform src=skeleton1-5.xsl/
  map:transform src=store.xsl
  map:parameter name=file value=asserts1.xsl/
  map:parameter name=dir value=./
  /map:transform
  map:transform type=write-source/
  map:serialize type=xml/
/map:match

(see below for the source code for store.xsl)

Unfortunately, the Schematron skeleton puts out plain
text messages so the output from data1.xml isn't well-formed
XML.  What I wanted was a series of applicable 
Schematron messages as XML output.  So, I altered
the skeleton somewhat and now I works!

My alterations to the skeleton were pretty simple:

(1)  Add the following template:

xsl:template match=sch:error | error mode=text
 xsl:copy-of select=./
/xsl:template

(2) Wrap a sch:results around the / template:

  axsl:template match=/
  sch:results
  xsl:call-template name=process-root
...
  /xsl:call-template
  /sch:results
  /axsl:template

Finally, you must wrap all messages in the .sch file with
sch:error.../sch:error as follows:

sch:schema xmlns:sch=http://www.ascc.net/xml/schematron;
...
sch:assert test=(@Title = 'Mr' and Sex = 'Male') or @Title != 'Mr'
  sch:errorIf the Title is Mr then the sex of the person must be 
Male./sch:error
/sch:assert
...
/sch:schema

Enjoy!

-- jack


(The XSLT file store.xsl is my own brew to wrap an
element around the input source for use by the subsequent
SourceWriterTransformer:

?xml version=1.0 encoding=UTF-8?
!-- CVS: $Id: store.xsl,v 1.1 2002/12/16 11:04:11 callahan Exp $ --

xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform;

xsl:param name=file select='foo'/
xsl:param name=dir select='foo'/

xsl:template match=/
source:write xmlns:source=http://apache.org/cocoon/source/1.0;
 source:sourcexsl:value-of select=$dir//xsl:value-of 
select=$file//source:source
 source:fragment
 xsl:copy-of select=./
 /source:fragment
/source:write
/xsl:template

/xsl:stylesheet
)



-
Please check that your question  has not already been answered in the
FAQ before posting. http://xml.apache.org/cocoon/faq/index.html

To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail:   [EMAIL PROTECTED]




Re: Schematron transform in a Cocoon pipeline

2003-01-21 Thread Oskar Casquero
Hi Jack,

I have done the same to validate an XML document with an schematron. I think
that it would be also useful to get the XPATH path of the errors in the XML
output. The template which does this is done in skeleton1-5 (axsl:template
match=*|@* mode=schematron-get-full-path); so you have to call it from
the assert template:

xsl:template match=sch:assert | assert
xsl:if test=not(@test)
xsl:messageMarkup Error: no test attribute in
lt;assert/xsl:message
/xsl:if
axsl:choose
axsl:when test={@test}/
axsl:otherwise
error !--my xml output--
message !--my xml output--
xsl:call-template name=process-assert
xsl:with-param name=role select=@role/
xsl:with-param name=id select=@id/
xsl:with-param name=test
select=normalize-space(@test) /
xsl:with-param name=icon select=@icon/
xsl:with-param name=subject select=@subject/
xsl:with-param name=diagnostics
select=@diagnostics/
/xsl:call-template
/message
location !--my xml output--
axsl:apply-templates mode=schematron-get-full-path
select=self::*/ !--XPATH path of the error--
/location
/error
 /axsl:otherwise
/axsl:choose
/xsl:template

Oskar

- Original Message -
From: John R. Callahan [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Tuesday, January 21, 2003 9:58 PM
Subject: Schematron transform in a Cocoon pipeline


 This seems too simple, but I wanted to see if I could
 use Schematron generated XSLT to validate some
 XML in a Cocoon pipeline.  This might be used for
 validating uploaded  XML files for example.

 I downloaded the latest Schematron skeleton (1.5),
 then generated some XSLT from a set of assertions,
 and then put it into a transform in a pipeline with some
 data:

 map:match pattern=*.xml
   map:generate src={1}.xml/
   map:transform src=asserts1.xsl/
   map:serialize type=xml/
 /map:match

 !-- build the Schematron generated XSLT --
 map:match pattern=asserts1.xsl
   map:generate src=asserts1.sch/
   map:transform src=skeleton1-5.xsl/
   map:transform src=store.xsl
   map:parameter name=file value=asserts1.xsl/
   map:parameter name=dir value=./
   /map:transform
   map:transform type=write-source/
   map:serialize type=xml/
 /map:match

 (see below for the source code for store.xsl)

 Unfortunately, the Schematron skeleton puts out plain
 text messages so the output from data1.xml isn't well-formed
 XML.  What I wanted was a series of applicable
 Schematron messages as XML output.  So, I altered
 the skeleton somewhat and now I works!

 My alterations to the skeleton were pretty simple:

 (1)  Add the following template:

 xsl:template match=sch:error | error mode=text
  xsl:copy-of select=./
 /xsl:template

 (2) Wrap a sch:results around the / template:

   axsl:template match=/
   sch:results
   xsl:call-template name=process-root
 ...
   /xsl:call-template
   /sch:results
   /axsl:template

 Finally, you must wrap all messages in the .sch file with
 sch:error.../sch:error as follows:

 sch:schema xmlns:sch=http://www.ascc.net/xml/schematron;
 ...
 sch:assert test=(@Title = 'Mr' and Sex = 'Male') or @Title != 'Mr'
   sch:errorIf the Title is Mr then the sex of the person must be
Male./sch:error
 /sch:assert
 ...
 /sch:schema

 Enjoy!

 -- jack


 (The XSLT file store.xsl is my own brew to wrap an
 element around the input source for use by the subsequent
 SourceWriterTransformer:

 ?xml version=1.0 encoding=UTF-8?
 !-- CVS: $Id: store.xsl,v 1.1 2002/12/16 11:04:11 callahan Exp $ --

 xsl:stylesheet version=1.0
xmlns:xsl=http://www.w3.org/1999/XSL/Transform;

 xsl:param name=file select='foo'/
 xsl:param name=dir select='foo'/

 xsl:template match=/
 source:write xmlns:source=http://apache.org/cocoon/source/1.0;
  source:sourcexsl:value-of select=$dir//xsl:value-of
select=$file//source:source
  source:fragment
  xsl:copy-of select=./
  /source:fragment
 /source:write
 /xsl:template

 /xsl:stylesheet
 )



 -
 Please check that your question  has not already been answered in the
 FAQ before posting. http://xml.apache.org/cocoon/faq/index.html

 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail:   [EMAIL PROTECTED]



-
Please check that your question  has not already been answered in the
FAQ before posting. http://xml.apache.org/cocoon/faq/index.html

To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail:   [EMAIL PROTECTED]