How to specify the xsd schema used to validate with saxon:validate in XSLT
Added by Alex Muir over 10 years ago
Hi,
I'm reading the documentation here
http://www.saxonica.com/documentation/functions/saxon/validate.html but I'm not clear on how to specify which schema file is being used to validate.
Would be helpful to see an xslt example of how to saxon:validate.
Thanks Alex
Replies (8)
Please register to reply
RE: How to specify the xsd schema used to validate with saxon:validate in XSLT - Added by Michael Kay over 10 years ago
The validation will be done using the schema components present in the configuration, plus any additional schema components loaded using an xsi:schemaLocation attribute in the instance document.
The schema comonents present in the configuration include:
-
any that were loaded using xsl:import-schema in the stylesheet
-
any that were loaded to validate other input documents
-
any that were loaded frome the command line using the -xsd option
It would be useful to know more about your use case, that would make it easier to help you, and easier to improve the documentation.
RE: How to specify the xsd schema used to validate with saxon:validate in XSLT - Added by Alex Muir over 10 years ago
Thanks very much,
The use case is when a user uploads a xml and a xsd file to a website and I need to validate them prior to continuing processing within xproc.
Those instructions though are what I needed.
On Mon, Mar 17, 2014 at 1:12 PM, Saxonica Developer Community < dropbox+saxonica+f38e@plan.io> wrote:
RE: How to specify the xsd schema used to validate with saxon:validate in XSLT - Added by Alex Muir over 10 years ago
Hi, I've just found some time to look at this validation aspect again. The problem I'm having is the 'valid' result in the map is always true regardless of the xml file being invalid
I'm running the following cmd with an xml file that simply changes the name of one element. The file is detected as invalid and so to run I added the outval parameter
#!/bin/bash
xml_file="/var/www/ elt.kode1100.com/public_html/wiki/automation/TestData/validate/elt.test.datatypes.xml " xsd_file="/var/www/ elt.kode1100.com/public_html/wiki/automation/TestData/validate/elt.test.datatypes.xsd " validationReportHREF="/var/www/ elt.kode1100.com/public_html/wiki/automation/TestData/validate/validationResult.xml "
java -jar ../../../../lib/saxon9ee.jar -outval:recover -val:strict -s:${xml_file} -xsd:${xsd_file} -xsl:../../scripts/xsl/validate.xsl -o:${validationReportHREF}
with the following template in a xslt 3.0 file
Any thoughts on what I'm doing wrong Thanks
On Tue, Mar 18, 2014 at 9:29 AM, Saxonica Developer Community < dropbox+saxonica+f38e@plan.io> wrote:
RE: How to specify the xsd schema used to validate with saxon:validate in XSLT - Added by Michael Kay over 10 years ago
Is there some code missing after "the following template"?
I think it would be useful to submit a repro: a complete working example that we can run here to reproduce what is going on. I don't currently have enough information to respond.
RE: How to specify the xsd schema used to validate with saxon:validate in XSLT - Added by Alex Muir over 10 years ago
Thanks,, here are the files..
On Fri, Apr 4, 2014 at 5:39 AM, Saxonica Developer Community < dropbox+saxonica+f38e@plan.io> wrote:
elt.test.datatypes.xsd (5.53 KB) elt.test.datatypes.xsd | |||
elt.test.datatypes.xml (4.38 KB) elt.test.datatypes.xml | |||
validate.xsl (520 Bytes) validate.xsl |
RE: How to specify the xsd schema used to validate with saxon:validate in XSLT - Added by Michael Kay over 10 years ago
OK, when I run:
java com.saxonica.Validate -t -xsd:elt.test.datatypes.xsd -s:elt.test.datatypes.xml
I get
Validation error on line 15 column 22 of elt.test.datatypes.xml: XSD99999: In content of element <test.datatypes>: The content model does not allow element <Period.of.xxx.year> to appear immediately after element <Recurring.period.of.time.yearl...>. Expected <Period.of.one.year>. Validating /test.datatypes[1]/Period.of.xxx.year[1] Validation error on line 100 column 18 of elt.test.datatypes.xml: XSD99999: One or more validation errors were reported
which is presumably what's expected.
When I run
java net.sf.saxon.Transform -t -xsl:validate.xsl -s:elt.test.datatypes.xml -xsd:elt.test.datatypes.xsd
I get
falsewhich is presumably also what's expected.
If I add -val:strict I get
Validation error on line 15 column 22 of elt.test.datatypes.xml: XTTE1510: In content of element <test.datatypes>: The content model does not allow element <Period.of.xxx.year> to appear immediately after element <Recurring.period.of.time.yearl...>. Expected <Period.of.one.year>. Validating /test.datatypes[1]/Period.of.xxx.year[1] Validation error on line 100 column 18 of elt.test.datatypes.xml: XTTE1510: One or more validation errors were reported Transformation failed: Run-time errors were reported
because the validation is now happening during the initial reading of the source document, not under the control of saxon:validate().
Adding -outval:recover now outputs validation errors to the console, and then gives
truewhich is the first result that surprises me, given that -outval is specified as only affecting the validation of result documents, and you aren't validating the result document. I suspect that what is happening is that -outval is affecting both the validation done using -val:strict and the validation done using saxon:valdidate, so that all validation errors are treated as non-fatal and the validation is treated as if it succeeded. So there are really two issues here: should -outval affect validation of anything other than the result document? And if it should affect saxon:validate(), it should not cause the document to be reported as valid just because validation is considered to have succeeded.
RE: How to specify the xsd schema used to validate with saxon:validate in XSLT - Added by Alex Muir over 10 years ago
Is there a way to get false from the validation when running the -jar style of invocation?
java -jar ../../../../lib/saxon9ee.jar -outval:recover -val:strict -s:${xml_file} -xsd:${xsd_file} -xsl:../../scripts/xsl/validate.xsl -o:${validationReportHREF}
or is
java net.sf.saxon.Transform -t -xsl:validate.xsl -s:elt.test.datatypes.xml -xsd:elt.test.datatypes.xsd
the only way to achieve it?
"-outval:(recover|fatal)
Normally, if validation of result documents is requested, a validation error is fatal. Setting the option -outval:recover causes such validation failures to be treated as warnings. The validation message is written both to the standard error stream, and (where possible) as a comment in the result document itself." Some part of me feels it makes sense as written so either it should be rewritten or perhaps it requires a third parameter for this case like bypass or uservalidate
along with some logic adjustment.
Thanks
On Fri, Apr 4, 2014 at 4:25 PM, Saxonica Developer Community < dropbox+saxonica+f38e@plan.io> wrote:
RE: How to specify the xsd schema used to validate with saxon:validate in XSLT - Added by Michael Kay over 10 years ago
I tend not to use the -jar invocation because you can't specify additional things to go on the classpath (such as the license file), but it invokes exactly the same code as specifying net.sf.saxon.Transform as the entry point.
Please register to reply