From aa02b86ba77588fbebbad264d7770f57668e7041 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Fri, 31 Jan 2020 15:28:24 +0100 Subject: [PATCH 01/11] docs(readme): cleanup --- README.md | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 777b03c..d24b2ab 100644 --- a/README.md +++ b/README.md @@ -1,56 +1,67 @@ # Schematron for eXist -XQuery library module to use ISO Schematron in [eXist](http://exist-db.org/). This module uses the standard Schematron implementation from https://code.google.com/p/schematron/. This module is a port of [schematron-basex](https://github.com/Schematron/schematron-basex) to eXist. +XQuery library module to use ISO Schematron in [eXist](http://exist-db.org/). This module uses the standard Schematron implementation from [https://code.google.com/p/schematron/](https://code.google.com/p/schematron/). This module is a port of [schematron-basex](https://github.com/Schematron/schematron-basex) to eXist. ## Usage -Install the module in the way described in the eXist documentation. Go to the Dashboard and open the Package Manager. Click the add a package button, and then upload schematron-exist-1.1.xar. +Install the module in the way described in the eXist documentation. Go to the Dashboard and open the Package Manager. Click the add a package button, and then upload `schematron-exist-1.1.xar`. After the module is installed, in your XQuery code declare the module import: - +```xquery import module namespace schematron = "http://github.com/Schematron/schematron-exist"; +``` Your Schematron schema file first has to be compiled before it can be used to validate XML. The compiled Schematron can be re-used to validate multiple documents, or possibly stored in a collection for later use. - +```xquery let $sch := schematron:compile(doc('rules.sch')) +``` If your Schematron contains phases you can specify the phase to use by passing the name of the phase in the second argument. - +```xquery let $sch := schematron:compile(doc('rules.sch'), 'phase1') +``` If you need to pass additional parameters to compile the Schematron the second argument can be provided as a parameters element. The phase can be specified by including a parameter named `phase`. - +```xquery let $sch := schematron:compile(doc('rules.sch'), ) +``` Next, validate an XML using the compiled Schematron. - +```xquery let $svrl := schematron:validate(doc('document.xml'), $sch) +``` The validate method returns SVRL XML. This module provides several utility methods for inspecting SVRL. To simply check whether validation has passed or failed use the is-valid method, which returns a boolean value. - +```xquery let $boolean := schematron:is-valid($svrl) +``` Schematron validation may return warnings or informational messages in addition to error messages. The has-messages method returns a boolean value to indicate if any messages are present. - +```xquery let $boolean := schematron:has-messages($svrl) +```` To get all messages that were generated as a sequence: - +```xquery let $messages := schematron:messages($svrl) +``` -The message-level method returns 'error', 'warn' or 'info' (or custom values) based on the `role` attribute on Schematron `` and `` elements. This method normalizes the role attribute value from the Schematron schema: if the role attribute is absent or contains 'error' or 'fatal' this method returns 'error'; if role contains 'warn' or 'warning' this method returns 'warn'; if role contains 'info' or 'information' this method returns 'info'. Any other value of the role attribute is returned unchanged. - +The message-level method returns 'error', 'warn' or 'info' (or custom values) based on the `role` attribute on Schematron `` and `` elements. This method normalizes the role attribute value from the Schematron schema: if the role attribute is absent or contains 'error' or 'fatal' this method returns 'error'; if role contains 'warn' or 'warning' this method returns 'warn'; if role contains 'info' or 'information' this method returns 'info'. Any other value of the role attribute is returned unchanged. +```xquery let $level := schematron:message-level($message) +``` To get the human text description from a message: - +```xquery let $string := schematron:message-description($message) +``` To get the XPath location where a message was generated: - +```xquery let $string := schematron:message-location($message) +``` Putting this all together: @@ -80,5 +91,4 @@ This module was developed using eXist 3.0RC1, although it may work with earlier Unit tests are located in the `test` folder. To run the unit tests open `test-suite.xq` in eXide and then click the Eval button. -The included Ant build script build.xml will create a xar file for loading into eXist. - +The included Ant build script build.xml will create a `.xar` file for loading into eXist. From 2e719b81c277e078dc6d89ffeaba3b3a23bd07e1 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Fri, 31 Jan 2020 15:47:08 +0100 Subject: [PATCH 02/11] fix(expath): make it a proper xqlibrary feat(expath): add max supported version feat(expath): breaking change bump requirement just for testing, will likely need another 5.0.0 bump fix(expath): set semver max --- build.xml | 39 +++++++++--- content/test/0001-compile-validate/0001.sch | 5 -- content/test/0001-compile-validate/0001.xml | 2 - content/test/0001-compile-validate/0001.xqm | 25 ++++++-- .../0002-basic-pass-fail/0002-invalid.xml | 6 -- .../test/0002-basic-pass-fail/0002-valid.xml | 5 -- content/test/0002-basic-pass-fail/0002.sch | 18 ------ content/test/0002-basic-pass-fail/0002.xqm | 60 +++++++++++++++--- dist/schematron-exist-1.0.xar | Bin 100015 -> 0 bytes dist/schematron-exist-1.1.xar | Bin 99981 -> 0 bytes expath-pkg.xml | 16 +++-- repo.xml | 6 +- result/test.bats | 28 ++++++++ 13 files changed, 141 insertions(+), 69 deletions(-) delete mode 100644 content/test/0001-compile-validate/0001.sch delete mode 100644 content/test/0001-compile-validate/0001.xml delete mode 100644 content/test/0002-basic-pass-fail/0002-invalid.xml delete mode 100644 content/test/0002-basic-pass-fail/0002-valid.xml delete mode 100644 content/test/0002-basic-pass-fail/0002.sch delete mode 100644 dist/schematron-exist-1.0.xar delete mode 100644 dist/schematron-exist-1.1.xar create mode 100644 result/test.bats diff --git a/build.xml b/build.xml index 70f9cef..4997afd 100644 --- a/build.xml +++ b/build.xml @@ -1,12 +1,31 @@ - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/test/0001-compile-validate/0001.sch b/content/test/0001-compile-validate/0001.sch deleted file mode 100644 index 1cd8596..0000000 --- a/content/test/0001-compile-validate/0001.sch +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/content/test/0001-compile-validate/0001.xml b/content/test/0001-compile-validate/0001.xml deleted file mode 100644 index 6cc709c..0000000 --- a/content/test/0001-compile-validate/0001.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/content/test/0001-compile-validate/0001.xqm b/content/test/0001-compile-validate/0001.xqm index dc43001..e6a1945 100644 --- a/content/test/0001-compile-validate/0001.xqm +++ b/content/test/0001-compile-validate/0001.xqm @@ -6,15 +6,30 @@ declare namespace svrl="http://purl.oclc.org/dsdl/svrl"; declare namespace xsl="http://www.w3.org/1999/XSL/Transform"; declare namespace test="http://exist-db.org/xquery/xqsuite"; +declare variable $_:schema := document { + + +}; + +declare variable $_:xml := document { + +}; + -declare %test:assertExists function _:compile() { - let $c := s:compile(doc('0001.sch')) +declare +%test:assertExists +%test:name('compile') +function _:compile() { + let $c := s:compile($_:schema) return $c[self::xsl:stylesheet] }; -declare %test:assertExists function _:validationResult() { - let $c := s:compile(doc('0001.sch')) - let $r := s:validate(doc('0001.xml'), $c) +declare +%test:assertExists +%test:name('validate') +function _:validationResult() { + let $c := s:compile($_:schema) + let $r := s:validate($_:xml, $c) return $r[self::svrl:schematron-output] }; diff --git a/content/test/0002-basic-pass-fail/0002-invalid.xml b/content/test/0002-basic-pass-fail/0002-invalid.xml deleted file mode 100644 index 71a8947..0000000 --- a/content/test/0002-basic-pass-fail/0002-invalid.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - Schematron for eXist -

This is a test of running ISO Schematron in eXist

-

-
diff --git a/content/test/0002-basic-pass-fail/0002-valid.xml b/content/test/0002-basic-pass-fail/0002-valid.xml deleted file mode 100644 index a65aba0..0000000 --- a/content/test/0002-basic-pass-fail/0002-valid.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Schematron for eXist -

This is a test of running ISO Schematron in eXist

-
diff --git a/content/test/0002-basic-pass-fail/0002.sch b/content/test/0002-basic-pass-fail/0002.sch deleted file mode 100644 index e94e05e..0000000 --- a/content/test/0002-basic-pass-fail/0002.sch +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - title should be followed by a p (paragraph) element - - - - - p (paragraph) should not be empty - - - - - \ No newline at end of file diff --git a/content/test/0002-basic-pass-fail/0002.xqm b/content/test/0002-basic-pass-fail/0002.xqm index 8388484..bfb2f5d 100644 --- a/content/test/0002-basic-pass-fail/0002.xqm +++ b/content/test/0002-basic-pass-fail/0002.xqm @@ -4,22 +4,66 @@ import module namespace s = "http://github.com/Schematron/schematron-exist" at " declare namespace test="http://exist-db.org/xquery/xqsuite"; -declare %test:assertTrue function _:valid() { - let $r := s:validate(doc('0002-valid.xml'), s:compile(doc('0002.sch'))) +declare variable $_:schema := document { + + + + + title should be followed by a p (paragraph) element + + + + + p (paragraph) should not be empty + + + + +}; + +declare variable $_:valid := document { + + Schematron for eXist +

This is a test of running ISO Schematron in eXist

+
+}; + +declare variable $_:invalid := document { + + Schematron for eXist +

This is a test of running ISO Schematron in eXist

+

+ +}; + +declare +%test:assertTrue +%test:name('simple valid') +function _:valid() { + let $r := s:validate($_:valid, s:compile($_:schema)) return s:is-valid($r) }; -declare %test:assertFalse function _:invalid() { - let $r := s:validate(doc('0002-invalid.xml'), s:compile(doc('0002.sch'))) +declare +%test:assertFalse +%test:name('simple invalid') +function _:invalid() { + let $r := s:validate($_:invalid, s:compile($_:schema)) return s:is-valid($r) }; -declare %test:assertEmpty function _:valid-messages() { - let $r := s:messages(s:validate(doc('0002-valid.xml'), s:compile(doc('0002.sch')))) +declare +%test:assertEmpty +%test:name('valid message') +function _:valid-messages() { + let $r := s:messages(s:validate($_:valid, s:compile($_:schema))) return $r }; -declare %test:assertEquals(1) function _:invalid-messages() { - let $r := s:messages(s:validate(doc('0002-invalid.xml'), s:compile(doc('0002.sch')))) +declare +%test:assertEquals(1) +%test:name('invalid message') +function _:invalid-messages() { + let $r := s:messages(s:validate($_:invalid, s:compile($_:schema))) return count($r) }; diff --git a/dist/schematron-exist-1.0.xar b/dist/schematron-exist-1.0.xar deleted file mode 100644 index ca6e0f8746e3c9e2e18de18c2ed442c3758a2923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100015 zcmb5W1CXrUvL@WNZS38)ZQHhO+qP}nwr$(yZoB*6Xa1Qx_uRPg%}hnCLPTcO^JZq{ zdRAs-$w>l(Kmq*gCR&Lr`ahoh&pU{}kA}83PR2G)v~vF;wNU==Qi%Ua%Ggcc+Rn<@ z@gKy||C6}6qb;?gp_#F@zLSHk%|9r?{wF0TW5<7j^ZUPw($Ue;Qybb^+nHM#Q@iL} znH%Xl8UMp){rYd-fPvaT-_hKV+D_lmk=jJx-0C0n3I7{?Mrs>dY7=t@V*;s)BP0lfQ2cIS zkrf9xw0YiRG{ZAbw7tK%fx}qhlx?xz&BY zNa#5AT9Uva^#MP2#uwU~HAzqOt#-ge)Wz(D;_&*g*aF8UBQL;qw@!cmDa{q5P^!Zt ztUiig$h)^BmQJl_?-MB)1wLmSM!*d+2SGNdmEa}oW zEcMu^b6A|#E~C(&GSA2N8k;G?b5090o@O%nqq*Q~Q&OJ#X&yMS^N|b|y-AUg-kNcg z{731t4?6-&X$%e7m<8Jr7@c+J*HaPNQ9yXY!lgnGtiBuXiqguZ^`6jXPG%VQ`tIkz zY_Ui3!@cfnee{E|m*o@G`&rN>3zM66Gy+RC3un?&11Qt3kq33amxZb22>=r_opez- z#=Yg=pYh900C#mu1vUKUBW((X#w(7nQYgEXn)%+z2UHp|%#9GC<f&pkQ_<yeN?27~x6B8zd0Tp}pS`Dfc!U`~pahLnQ zwB*8G*}h3cDk7|;l#H41pq2Shz*vNq|kH|?K4tSQ=1g<@u_SoL)3yRl^DuN8)rXRKGCaWncUj~Y> zUy-yUc?$$oSb|w31Th8Car4Jhwx9yKXSZ}l!AC>OxML=xsThyJ?Y)B17N&M%HH*}i z#3f1M=B|c*jMVs)-Dj=SJVk$&Nj2)#ai{L6NrMS~_j>NbLc2+$P9$(obp+MCNvjUg zl{dNdDKH$BW3k@KUB_Mto4qo#gi?Xambk>&Swy@nbZI+{P{X1}sZheD#dejoZ5vOt zzibxs23tw%)nT1=vOOgnp|nGLVvQB!tu^f>jy+{F&u&j%gSYp%(ft|Xhu)iv6bY>* zN?sCeF|_7~t?TC)l)mF{MtLV*5Adov_s!JQx?JYBl4JC(lynj%0I0=i2o+nmZ^-#I zOP#}9@ij-{2U(wRbWl`GR-`8YSr(=t5Q8BrI(D_|=%Nc6vmkv&27<&N1&P4)9ON{dYcU(6; z4N)j9WflYQkPeu{(tlx94{+I%PkE@s{2DY;4@RfgQg^f18a;OWe3p5f+Hp4>lLwnn z?dlV~A>_z#6`9lwRKw5E_+ad#IU~vPAX97N{al3xs4x-WMg>Vw^Jkj?o$sgQcqM+e6C{E7uPH?5(+X;c)cEGnQoV9k$zIf;OTx_3 z{l*th#wVN7p_-Nt7iMkVZk<>dzb)E>y%b>Zc&@WZ8yD%WzWqd{7m@7ajW?)q7cCjM z58NV(-c=BhrHFpWXL;m=O(4k_l< zAbJmcvH9m{GV|x3)7(yc219-FGN?s7Lw*;TSfJ`Bmx9Ttu}vXR3-S8hL_#eejKdgL z*DAp5@<$cBzF@EFh(`h|!Bgd|4$v|

jnF(TLAhHnixRa2x1RF;{v5qFT4h$y@cD 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

1egtaLphaF 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%0A7TC-;M#M*1dPeFXNh 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 diff --git a/dist/schematron-exist-1.1.xar b/dist/schematron-exist-1.1.xar deleted file mode 100644 index 348f9f19cde30b422d9970757d5e9b8e6a7172d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99981 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 diff --git a/expath-pkg.xml b/expath-pkg.xml index afe4993..6c0c544 100644 --- a/expath-pkg.xml +++ b/expath-pkg.xml @@ -1,13 +1,17 @@ - Schematron for eXist-db - + + http://github.com/Schematron/schematron-exist schematron.xqm - \ No newline at end of file + diff --git a/repo.xml b/repo.xml index 53f04e9..c292590 100644 --- a/repo.xml +++ b/repo.xml @@ -2,12 +2,10 @@ Library module to use ISO Schematron in eXist Vincent M. Lizzi + Duncan Paterson https://github.com/Schematron/schematron-exist stable The MIT License true library - schematron-exist - - - \ No newline at end of file + diff --git a/result/test.bats b/result/test.bats new file mode 100644 index 0000000..7dcb5c2 --- /dev/null +++ b/result/test.bats @@ -0,0 +1,28 @@ +#!/usr/bin/env bats + + +# https://github.com/bats-core/bats-core#printing-to-the-terminal + +@test "Testuite reports no failures or errors" { + run xmllint --xpath '//@failures > 0 or //@errors > 0' result/*.xml + [ "$status" -eq 0 ] + [ "$output" = false ] +} + +@test "No testcase failures" { + run xmllint --xpath "//failure/../../*" result/*.xml + for FAIL in ${output} + do + echo "# " ${FAIL} >&3 + done + [ "$output" = 'XPath set is empty' ] +} + +@test "No testcase errors" { + run xmllint --xpath "//error/../../*" result/*.xml + for ERR in ${output} + do + echo "# " ${ERR} >&3 + done + [ "$output" = 'XPath set is empty' ] +} From da71f4c29fa296e4ec77fd6f2903baab15880643 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Fri, 31 Jan 2020 15:53:59 +0100 Subject: [PATCH 03/11] ignore(git): ignore dist folder ignore(xpr): ignore and add oxygen project --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5d76797 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +dist/ +result/*.xml +*.xpr From f7dc2c67b16dd9800df7b40918b8f3d8581bf489 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Fri, 31 Jan 2020 16:00:03 +0100 Subject: [PATCH 04/11] test(ci): init travis ci ci(travis): check test-results ci(travis): ensure proper xar is tested ci(travis): disable v5 and up, add v3 for testing --- .travis.yml | 41 +++++++++++++++++++++++++++++++++++++++++ build.xml | 18 ++++++++++++++++++ content/schematron.xqm | 41 +++++++++++++++++++++-------------------- 3 files changed, 80 insertions(+), 20 deletions(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..1184485 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,41 @@ +notifications: + email: false + +language: java + +jdk: + - openjdk8 + # - openjdk11 + +services: + - docker + +env: + # TODO support versions 5.0.0 and up + # - img=existdb/existdb:latest + # - img=existdb/existdb:release + # - img=existdb/existdb:5.0.0 + - img=existdb/existdb:4.7.1 + - img=evolvedbinary/exist-db:eXist-3.6.1-minimal + + +before_install: + - docker pull $img + - docker create --name exist-ci -p 8080:8080 $img + +install: + - ant + +before_script: + - docker cp ./dist/*.xar exist-ci:exist/autodeploy/a1.xar + - docker start exist-ci + # exist needs time + - sleep 30 + - docker ps + +script: + - curl -s "http://0.0.0.0:8080/exist/rest/db/system/repo/schematron-exist-1.2.0/content/test/test-suite.xq" -o result/test-result.xml + - bats -t result/*.bats + +after_success: + - docker stop exist-ci diff --git a/build.xml b/build.xml index 4997afd..95e8933 100644 --- a/build.xml +++ b/build.xml @@ -1,9 +1,11 @@ + + @@ -28,4 +30,20 @@ + + + + + + + diff --git a/content/schematron.xqm b/content/schematron.xqm index c6843e2..6d6673d 100644 --- a/content/schematron.xqm +++ b/content/schematron.xqm @@ -1,6 +1,6 @@ (:~ : Schematron module for eXist - : + : : @author Vincent M. Lizzi : @see LICENSE (The MIT License) : @see http://exist-db.org/ @@ -13,27 +13,28 @@ declare namespace sch = "http://purl.oclc.org/dsdl/schematron"; declare namespace svrl = "http://purl.oclc.org/dsdl/svrl"; declare namespace xsl = "http://www.w3.org/1999/XSL/Transform"; -declare variable $_:include := "/db/apps/schematron-exist/content/iso-schematron/iso_dsdl_include.xsl"; -declare variable $_:expand := "/db/apps/schematron-exist/content/iso-schematron/iso_abstract_expand.xsl"; -declare variable $_:compile1 := "/db/apps/schematron-exist/content/iso-schematron/iso_svrl_for_xslt1.xsl"; -declare variable $_:compile2 := "/db/apps/schematron-exist/content/iso-schematron/iso_svrl_for_xslt2.xsl"; +(: TODO replace with xs:anyURI calls :) +declare variable $_:include := "/db/system/repo/schematron-exist-1.2.0/content/iso-schematron/iso_dsdl_include.xsl"; +declare variable $_:expand := "/db/system/repo/schematron-exist-1.2.0/content/iso-schematron/iso_abstract_expand.xsl"; +declare variable $_:compile1 := "/db/system/repo/schematron-exist-1.2.0/content/iso-schematron/iso_svrl_for_xslt1.xsl"; +declare variable $_:compile2 := "/db/system/repo/schematron-exist-1.2.0/content/iso-schematron/iso_svrl_for_xslt2.xsl"; declare variable $_:error := ('error', 'fatal'); declare variable $_:warn := ('warn', 'warning'); declare variable $_:info := ('info', 'information'); -(:~ - : Compile a given Schematron file so that it can be used to validate documents. +(:~ + : Compile a given Schematron file so that it can be used to validate documents. :) declare function _:compile($schematron) as node() { _:compile($schematron, () ) }; -(:~ - : Compile a given Schematron file using given parameters so that it can be used to validate documents. +(:~ + : Compile a given Schematron file using given parameters so that it can be used to validate documents. :) declare function _:compile($schematron, $params) as node() { - let $p := typeswitch ($params) + let $p := typeswitch ($params) case xs:string return default return $params let $step1 := transform:transform($schematron, doc($_:include), $p) @@ -42,14 +43,14 @@ declare function _:compile($schematron, $params) as node() { return $step3 }; -(:~ +(:~ : Validate a given document using a compiled Schematron. Returns SVRL validation result. :) declare function _:validate($document as node(), $compiledSchematron as node()) as node() { transform:transform($document, $compiledSchematron, ()) }; -(:~ +(:~ : Check whether a SVRL validation result indicates valid in a pass/fail sense. :) declare function _:is-valid($svrl) as xs:boolean { @@ -59,27 +60,27 @@ declare function _:is-valid($svrl) as xs:boolean { ])) }; -(:~ +(:~ : Check whether a SVRL validation result contains any error, warning, or informational messages. :) declare function _:has-messages($svrl) as xs:boolean { boolean(($svrl//svrl:failed-assert union $svrl//svrl:successful-report)) }; -(:~ +(:~ : Return messages from a SVRL validation result. :) declare function _:messages($svrl) as item()* { ($svrl//svrl:failed-assert union $svrl//svrl:successful-report) }; -(:~ - : Return severity (error, warn, info) of a message based on the role attribute. - : Variations are standardized: - : 'error' and 'fatal' return 'error', - : 'warn' and 'warning' returns 'warn', +(:~ + : Return severity (error, warn, info) of a message based on the role attribute. + : Variations are standardized: + : 'error' and 'fatal' return 'error', + : 'warn' and 'warning' returns 'warn', : 'info' and 'information' returns 'info' - : If the role attribute value is unrecognized the value is returned unchanged. + : If the role attribute value is unrecognized the value is returned unchanged. :) declare function _:message-level($message) as xs:string { if ($message[not(@role) or @role = $_:error]) then $_:error[1] From 8c928de9e7ac05beebc6d70573ac0989cd01d869 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Sat, 22 Feb 2020 03:07:16 +0100 Subject: [PATCH 05/11] ci(travis): add deploy step --- .travis.yml | 64 +++++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1184485..50c1a9b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,41 +1,47 @@ notifications: email: false - language: java - jdk: - - openjdk8 - # - openjdk11 - +- openjdk8 +addons: + apt: + packages: + - libxml2-utils services: - - docker - +- docker env: - # TODO support versions 5.0.0 and up - # - img=existdb/existdb:latest - # - img=existdb/existdb:release - # - img=existdb/existdb:5.0.0 - - img=existdb/existdb:4.7.1 - - img=evolvedbinary/exist-db:eXist-3.6.1-minimal - +- img=existdb/existdb:4.7.1 +- img=evolvedbinary/exist-db:eXist-3.6.1-minimal +jobs: + include: + - stage: GitHub Release + before_install: skip + before_script: skip + script: skip + after_success: skip + deploy: + provider: releases + token: + secure: CmdGlijuVza6Sxp7SBb0A9xuLPX24MJoFZeZF25T/8OlWBf4LeQ7lQnQgeThfuto+iOGlleNPm/641n1Cm+9Qb95AJA9G06R/7aBw7wkVGC34fNiDODnkor/UalB//uwlGjvg8oMR0OYMhQDqJVfz+HgyxCmdy297abt9iV/t7lMsP7rctMKUvRkXgntGwSP8LrNqo9bocZV0SgE3x2nzgMId0o9mirR+yeAPvPGqaE7aJcl5hbh51JGwSVUi5xNBNW3tI0ztFdbrX1u8rGY74hEUkL93ZEicu8wwttU8cTeBOSSWF2TpRWyVRbrqhAwvklhOtnk+RQm72TaUp41ibN+t+t1FVMq2Ae5CUh+X2ZoLXuw7FDw4HmeQR4mNyVlToDlTgG4r0iZVEjIx7JFOZ1xXTb21I6fDeaJG2EvUQ7XtHUkJRHucWohwliImRQoklUOy1b/q/8iIxBrcukC9Zx2f8Sae8zKyBWW6m4Z8qAerV1W3euP/R3wcchJ/gtdUxTM5bF+r6OdmoywjEd7Wu1Yvcp0EW7IcUCTni0PQQbOsJ4ii7qvNNOqNCpibLmtzKQPLm4/GLYp2LHKTTlmEUmQWc7Ko5lXCEr7j0Adtl5dIa8+zNG4Seiwu8fSy3VwbrhL4EsV6gGYcQfkwx9F84zsl7QAUQBWbDstlzFbc0I= + file: dist/*.xar + cleanup: false + on: + tags: true before_install: - - docker pull $img - - docker create --name exist-ci -p 8080:8080 $img - +- docker pull $img +- docker create --name exist-ci -p 8080:8080 $img install: - - ant - +- ant +- npm install -g bats before_script: - - docker cp ./dist/*.xar exist-ci:exist/autodeploy/a1.xar - - docker start exist-ci - # exist needs time - - sleep 30 - - docker ps - +- docker cp ./dist/*.xar exist-ci:exist/autodeploy/a1.xar +- docker start exist-ci +- sleep 30 +- docker ps script: - - curl -s "http://0.0.0.0:8080/exist/rest/db/system/repo/schematron-exist-1.2.0/content/test/test-suite.xq" -o result/test-result.xml - - bats -t result/*.bats - +- curl -s "http://0.0.0.0:8080/exist/rest/db/system/repo/schematron-exist-2.0.0/test/test-suite.xq" + -o test/result/test-result.xml +- bats -t test/*.bats after_success: - - docker stop exist-ci +- docker stop exist-ci From 9709bd16823bd32d9082acdc015655df267dd365 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Fri, 31 Jan 2020 16:52:13 +0100 Subject: [PATCH 06/11] feat(ant): add test build target --- README.md | 2 +- build.xml | 37 +++++++------------------------------ 2 files changed, 8 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index d24b2ab..61456a9 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Schematron for eXist +[![Build Status](https://travis-ci.com/duncdrum/schematron-exist.svg?branch=master)](https://travis-ci.com/duncdrum/schematron-exist) XQuery library module to use ISO Schematron in [eXist](http://exist-db.org/). This module uses the standard Schematron implementation from [https://code.google.com/p/schematron/](https://code.google.com/p/schematron/). This module is a port of [schematron-basex](https://github.com/Schematron/schematron-basex) to eXist. ## Usage - Install the module in the way described in the eXist documentation. Go to the Dashboard and open the Package Manager. Click the add a package button, and then upload `schematron-exist-1.1.xar`. After the module is installed, in your XQuery code declare the module import: diff --git a/build.xml b/build.xml index 95e8933..6ff9977 100644 --- a/build.xml +++ b/build.xml @@ -1,49 +1,26 @@ - - + - - - + - + - - - - - - - - + + + + - - - - - - - From 46207e2d4427054afcf272f2b7a517da42e6c544 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Fri, 31 Jan 2020 23:27:48 +0100 Subject: [PATCH 07/11] fix(xqm): path adjustment --- build.xml | 20 +++++++++++++------- content/schematron.xqm | 4 +++- content/test/0001-compile-validate/0001.xqm | 4 +--- content/test/0002-basic-pass-fail/0002.xqm | 2 +- content/test/0003-no-fired-rules/0003.xqm | 2 +- content/test/0004-phases/0004.xqm | 3 +-- content/test/0005-example-1/example-1.xq | 12 ++++++------ 7 files changed, 26 insertions(+), 21 deletions(-) diff --git a/build.xml b/build.xml index 6ff9977..0902232 100644 --- a/build.xml +++ b/build.xml @@ -4,23 +4,29 @@ + - + + + - - + - - - - + + + + + + + + diff --git a/content/schematron.xqm b/content/schematron.xqm index 6d6673d..d7a3f4b 100644 --- a/content/schematron.xqm +++ b/content/schematron.xqm @@ -1,10 +1,12 @@ -(:~ +(:~ : Schematron module for eXist : : @author Vincent M. Lizzi + : @author Duncan Paterson : @see LICENSE (The MIT License) : @see http://exist-db.org/ : @see http://github.com/Schematron/schematron-exist + : @version 1.1.0 :) module namespace _ = "http://github.com/Schematron/schematron-exist"; diff --git a/content/test/0001-compile-validate/0001.xqm b/content/test/0001-compile-validate/0001.xqm index e6a1945..a2dc334 100644 --- a/content/test/0001-compile-validate/0001.xqm +++ b/content/test/0001-compile-validate/0001.xqm @@ -1,6 +1,6 @@ module namespace _ = "0001"; -import module namespace s = "http://github.com/Schematron/schematron-exist" at "../../schematron.xqm"; +import module namespace s = "http://github.com/Schematron/schematron-exist"; declare namespace svrl="http://purl.oclc.org/dsdl/svrl"; declare namespace xsl="http://www.w3.org/1999/XSL/Transform"; @@ -32,5 +32,3 @@ function _:validationResult() { let $r := s:validate($_:xml, $c) return $r[self::svrl:schematron-output] }; - - diff --git a/content/test/0002-basic-pass-fail/0002.xqm b/content/test/0002-basic-pass-fail/0002.xqm index bfb2f5d..a44ee0a 100644 --- a/content/test/0002-basic-pass-fail/0002.xqm +++ b/content/test/0002-basic-pass-fail/0002.xqm @@ -1,6 +1,6 @@ module namespace _ = "0002"; -import module namespace s = "http://github.com/Schematron/schematron-exist" at "../../schematron.xqm"; +import module namespace s = "http://github.com/Schematron/schematron-exist"; declare namespace test="http://exist-db.org/xquery/xqsuite"; diff --git a/content/test/0003-no-fired-rules/0003.xqm b/content/test/0003-no-fired-rules/0003.xqm index 260994e..e1c0043 100644 --- a/content/test/0003-no-fired-rules/0003.xqm +++ b/content/test/0003-no-fired-rules/0003.xqm @@ -1,6 +1,6 @@ module namespace _ = "0003"; -import module namespace s = "http://github.com/Schematron/schematron-exist" at "../../schematron.xqm"; +import module namespace s = "http://github.com/Schematron/schematron-exist"; declare namespace test="http://exist-db.org/xquery/xqsuite"; diff --git a/content/test/0004-phases/0004.xqm b/content/test/0004-phases/0004.xqm index 176aea2..3f42f4f 100644 --- a/content/test/0004-phases/0004.xqm +++ b/content/test/0004-phases/0004.xqm @@ -1,6 +1,6 @@ module namespace _ = "0004"; -import module namespace s = "http://github.com/Schematron/schematron-exist" at "../../schematron.xqm"; +import module namespace s = "http://github.com/Schematron/schematron-exist"; declare namespace test="http://exist-db.org/xquery/xqsuite"; @@ -29,4 +29,3 @@ declare %test:assertFalse function _:phase2string() { let $r := s:validate(doc('0004.xml'), $s) return s:is-valid($r) }; - diff --git a/content/test/0005-example-1/example-1.xq b/content/test/0005-example-1/example-1.xq index 079848f..bb4b051 100644 --- a/content/test/0005-example-1/example-1.xq +++ b/content/test/0005-example-1/example-1.xq @@ -1,16 +1,16 @@ -import module namespace schematron = "http://github.com/Schematron/schematron-exist" at "/db/apps/schematron-exist/content/schematron.xqm"; +import module namespace schematron = "http://github.com/Schematron/schematron-exist"; let $sch := schematron:compile(doc('example-1.sch')) for $file in ('example-1a.xml', 'example-1b.xml', 'example-1c.xml') let $svrl := schematron:validate(doc($file), $sch) return ( - concat('*** ', $file, ' ***'), + concat('*** ', $file, ' ***'), if (schematron:is-valid($svrl)) then 'Valid!' else 'Not valid!', - if (schematron:has-messages($svrl)) then - for $message in schematron:messages($svrl) + if (schematron:has-messages($svrl)) then + for $message in schematron:messages($svrl) return concat( schematron:message-level($message) - , ': ', + , ': ', schematron:message-description($message) , ' (location: ', schematron:message-location($message) @@ -36,4 +36,4 @@ warn: short section has fewer than 3 paragraphs (location: /document/title) Valid! No messages were reported -:) \ No newline at end of file +:) From 3361851deae9e100afa729a4a301986c4607f9c6 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Sat, 1 Feb 2020 17:19:35 +0100 Subject: [PATCH 08/11] refactor(var): rm version from app name and paths make paths dry adjust tests to new paths --- build.xml | 3 +-- content/schematron.xqm | 12 +++++++----- content/test/test-suite.xq | 2 +- expath-pkg.xml | 10 +++++----- result/test.bats | 5 ++--- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/build.xml b/build.xml index 0902232..40fde79 100644 --- a/build.xml +++ b/build.xml @@ -4,7 +4,6 @@ - @@ -17,7 +16,7 @@ - + diff --git a/content/schematron.xqm b/content/schematron.xqm index d7a3f4b..754567d 100644 --- a/content/schematron.xqm +++ b/content/schematron.xqm @@ -1,3 +1,4 @@ +xquery version "3.1"; (:~ : Schematron module for eXist : @@ -15,11 +16,12 @@ declare namespace sch = "http://purl.oclc.org/dsdl/schematron"; declare namespace svrl = "http://purl.oclc.org/dsdl/svrl"; declare namespace xsl = "http://www.w3.org/1999/XSL/Transform"; -(: TODO replace with xs:anyURI calls :) -declare variable $_:include := "/db/system/repo/schematron-exist-1.2.0/content/iso-schematron/iso_dsdl_include.xsl"; -declare variable $_:expand := "/db/system/repo/schematron-exist-1.2.0/content/iso-schematron/iso_abstract_expand.xsl"; -declare variable $_:compile1 := "/db/system/repo/schematron-exist-1.2.0/content/iso-schematron/iso_svrl_for_xslt1.xsl"; -declare variable $_:compile2 := "/db/system/repo/schematron-exist-1.2.0/content/iso-schematron/iso_svrl_for_xslt2.xsl"; +declare variable $_:path := '/db/system/repo/schematron-exist/content/iso-schematron-2.0.0/'; + +declare variable $_:include := $_:path || "iso_dsdl_include.xsl"; +declare variable $_:expand := $_:path || "iso_abstract_expand.xsl"; +declare variable $_:compile1 := $_:path || "iso_svrl_for_xslt1.xsl"; +declare variable $_:compile2 := $_:path || "iso_svrl_for_xslt2.xsl"; declare variable $_:error := ('error', 'fatal'); declare variable $_:warn := ('warn', 'warning'); diff --git a/content/test/test-suite.xq b/content/test/test-suite.xq index 97fbd87..69e4660 100644 --- a/content/test/test-suite.xq +++ b/content/test/test-suite.xq @@ -1,4 +1,4 @@ -xquery version "3.0"; +xquery version "3.1"; import module namespace test="http://exist-db.org/xquery/xqsuite" at "resource:org/exist/xquery/lib/xqsuite/xqsuite.xql"; diff --git a/expath-pkg.xml b/expath-pkg.xml index 6c0c544..3f5bfcb 100644 --- a/expath-pkg.xml +++ b/expath-pkg.xml @@ -5,11 +5,11 @@ version="2.0.0" spec="1.0"> Schematron for eXist-db - - + + + http://www.functx.com/functx.xsl + functx.xsl + http://github.com/Schematron/schematron-exist schematron.xqm diff --git a/result/test.bats b/result/test.bats index 7dcb5c2..649afa8 100644 --- a/result/test.bats +++ b/result/test.bats @@ -2,9 +2,8 @@ # https://github.com/bats-core/bats-core#printing-to-the-terminal - -@test "Testuite reports no failures or errors" { - run xmllint --xpath '//@failures > 0 or //@errors > 0' result/*.xml +@test "Testuite reporte no failures" { + run xmllint --xpath '//@failures = 0' result/*.xml [ "$status" -eq 0 ] [ "$output" = false ] } From f1bb6993348a2b2450653a5351634cf0f3ef55b7 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Sat, 1 Feb 2020 18:10:08 +0100 Subject: [PATCH 09/11] feature(xsl2): upgrade to xsl2 distro --- build.xml | 2 +- .../iso-schematron/iso_abstract_expand.xsl | 81 +- .../iso_abstract_expand_preamble.txt | 81 - content/iso-schematron/iso_dsdl_include.xsl | 114 +- .../iso_dsdl_include_preamble.txt | 113 -- .../iso-schematron/iso_schematron_message.xsl | 29 - .../iso_schematron_message_preamble.txt | 36 - .../iso_schematron_message_xslt2.xsl | 37 +- .../iso_schematron_message_xslt2_preamble.txt | 36 - .../iso_schematron_skeleton_for_saxon.xsl | 432 ++++- ...schematron_skeleton_for_saxon_preamble.txt | 431 ----- .../iso_schematron_skeleton_for_xslt1.xsl | 1457 ----------------- ...schematron_skeleton_for_xslt1_preamble.txt | 395 ----- content/iso-schematron/iso_svrl_for_xslt1.xsl | 476 ------ .../iso_svrl_for_xslt1_preamble.txt | 138 -- content/iso-schematron/iso_svrl_for_xslt2.xsl | 147 ++ .../iso_svrl_for_xslt2_preamble.txt | 147 -- content/iso-schematron/readme.txt | 200 +-- content/iso-schematron/sch-messages-de.xhtml | 112 +- content/iso-schematron/sch-messages-en.xhtml | 112 +- content/iso-schematron/sch-messages-fr.xhtml | 108 +- content/iso-schematron/sch-messages-ja.xhtml | 53 + content/iso-schematron/sch-messages-nl.xhtml | 116 +- .../schematron-skeleton-api.htm | 1444 ++++++++-------- content/schematron.xqm | 3 +- expath-pkg.xml | 7 +- 26 files changed, 1911 insertions(+), 4396 deletions(-) delete mode 100644 content/iso-schematron/iso_abstract_expand_preamble.txt delete mode 100644 content/iso-schematron/iso_dsdl_include_preamble.txt delete mode 100644 content/iso-schematron/iso_schematron_message.xsl delete mode 100644 content/iso-schematron/iso_schematron_message_preamble.txt delete mode 100644 content/iso-schematron/iso_schematron_message_xslt2_preamble.txt delete mode 100644 content/iso-schematron/iso_schematron_skeleton_for_saxon_preamble.txt delete mode 100644 content/iso-schematron/iso_schematron_skeleton_for_xslt1.xsl delete mode 100644 content/iso-schematron/iso_schematron_skeleton_for_xslt1_preamble.txt delete mode 100644 content/iso-schematron/iso_svrl_for_xslt1.xsl delete mode 100644 content/iso-schematron/iso_svrl_for_xslt1_preamble.txt delete mode 100644 content/iso-schematron/iso_svrl_for_xslt2_preamble.txt create mode 100644 content/iso-schematron/sch-messages-ja.xhtml diff --git a/build.xml b/build.xml index 40fde79..1a9fe6b 100644 --- a/build.xml +++ b/build.xml @@ -16,7 +16,7 @@ - + diff --git a/content/iso-schematron/iso_abstract_expand.xsl b/content/iso-schematron/iso_abstract_expand.xsl index 0689ab1..5018395 100644 --- a/content/iso-schematron/iso_abstract_expand.xsl +++ b/content/iso-schematron/iso_abstract_expand.xsl @@ -1,4 +1,83 @@ - + + + + + + + - - - - - - - diff --git a/content/iso-schematron/iso_dsdl_include.xsl b/content/iso-schematron/iso_dsdl_include.xsl index f2d8f69..f345b2d 100644 --- a/content/iso-schematron/iso_dsdl_include.xsl +++ b/content/iso-schematron/iso_dsdl_include.xsl @@ -1,4 +1,116 @@ - + + + + + + + - - - - - - diff --git a/content/iso-schematron/iso_schematron_message.xsl b/content/iso-schematron/iso_schematron_message.xsl deleted file mode 100644 index e6f4af2..0000000 --- a/content/iso-schematron/iso_schematron_message.xsl +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - ( - / - ) - - - \ No newline at end of file diff --git a/content/iso-schematron/iso_schematron_message_preamble.txt b/content/iso-schematron/iso_schematron_message_preamble.txt deleted file mode 100644 index 6e4b25d..0000000 --- a/content/iso-schematron/iso_schematron_message_preamble.txt +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - diff --git a/content/iso-schematron/iso_schematron_message_xslt2.xsl b/content/iso-schematron/iso_schematron_message_xslt2.xsl index 9dbc0cb..b3ade50 100644 --- a/content/iso-schematron/iso_schematron_message_xslt2.xsl +++ b/content/iso-schematron/iso_schematron_message_xslt2.xsl @@ -1,4 +1,39 @@ - + + + + + + - - - - - diff --git a/content/iso-schematron/iso_schematron_skeleton_for_saxon.xsl b/content/iso-schematron/iso_schematron_skeleton_for_saxon.xsl index 7230da0..d18f216 100644 --- a/content/iso-schematron/iso_schematron_skeleton_for_saxon.xsl +++ b/content/iso-schematron/iso_schematron_skeleton_for_saxon.xsl @@ -1,4 +1,434 @@ - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - diff --git a/content/iso-schematron/iso_schematron_skeleton_for_xslt1.xsl b/content/iso-schematron/iso_schematron_skeleton_for_xslt1.xsl deleted file mode 100644 index eccf074..0000000 --- a/content/iso-schematron/iso_schematron_skeleton_for_xslt1.xsl +++ /dev/null @@ -1,1457 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - #ALL - - - -false - -true - - - - - true - false - - - - - - - true - false - - - - - - - - - @*| - - * - node() - *|comment()|processing-instruction() - - - - - - - - - -false - - - - - -default - -false - - - -1 - - - - - Schema error: Schematron elements in old and new namespaces found - - - - - - - - - - - - - - - - - Schema error: in the queryBinding attribute, use 'xslt' - - - - - 1.0 - - - - - - - - - This XSLT was automatically generated from a Schematron schema. - - - - - 1.0 - - - - - - - - - - Fail: This implementation of ISO Schematron does not work with - schemas using the "" query language. - - - - - Implementers: please note that overriding process-prolog or process-root is - the preferred method for meta-stylesheets to use where possible. - - - - - - - - - - PHASES - - PROLOG - - KEYS - - DEFAULT RULES - - SCHEMA METADATA - - SCHEMATRON PATTERNS - - - - - - - - - - - - - - - - - - - - - - - Phase Error: no phase with name has been defined. - - - - - - - MODE: SCHEMATRON-SELECT-FULL-PATH - This mode can be used to generate an ugly though full XPath for locators - - - - - - - - - - - - - - - - - - - - - - - - - MODE: SCHEMATRON-FULL-PATH - This mode can be used to generate an ugly though full XPath for locators - - - - - - / - - - - - - [] - - - - *[local-name()=' - ' and namespace-uri()=' - - '] - - - [] - - - - - - - - - - / - - @ - - @*[local-name()=' - - ' and namespace-uri()=' - - '] - - - - - - - - - MODE: SCHEMATRON-FULL-PATH-2 - - This mode can be used to generate prefixed XPath for humans - - - - - - / - - - [ - - ] - - - - - /@ - - - - - MODE: GENERATE-ID-FROM-PATH - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - MODE: SCHEMATRON-FULL-PATH-3 - - - This mode can be used to generate prefixed XPath for humans - (Top-level element has index) - - - - - - / - - - [ - - ] - - - - - /@ - - - - - MODE: GENERATE-ID-2 - - - U - - - U - - - - - U. - - n - - - - - U. - - _ - - _ - - - - - Strip characters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Markup Error: no pattern attribute in <active> - - - - Reference Error: the pattern "" has been activated but is not declared - - - - - - - - Markup Error: no test attribute in <assert - - - ASSERT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Markup Error: no test attribute in <report> - - - - REPORT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Markup Error: no id attribute in <diagnostic> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Markup Error: no rule attribute in <extends> - - - Reference Error: the abstract rule "" has been referenced but is not declared - - - - - - - - - - - - - - Markup Error: no name attribute in <key> - - - Markup Error: no path or use attribute in <key> - - - - - - - - - - - - - - - - Markup Error: no path or use attribute in <key> - - - - - - - - - - - - Schema error: The key element is not in the ISO Schematron namespace. Use the XSLT namespace. - - - - - - - - Schema error: Empty href= attribute for include directive. - - - - - - - - - - - - - - Error: Impossible URL in Schematron include - - - - - - - Schema error: Use include to include fragments, not a whole schema - - - - - - - - - - Schema error: Use include to include fragments, not a whole schema - - - - - - - - - - - - - - - Error: Impossible URL in Schematron include - - - - - - - Schema error: Use include to include fragments, not a whole schema - - - - - - - - - - - Schema error: Use include to include fragments, not a whole schema - - - - - - - - - - Warning: Variables should not be used with the "xpath" query language binding. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Markup Error: no uri attribute in <ns> - - - Markup Error: no prefix attribute in <ns> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //( - - ( - - ) - | - - ) - [not(self::text())] - - - - - - - - - - - - - Schema implementation error: This schema has abstract patterns, yet they are supposed to be preprocessed out already - - - - - - - - - - PATTERN - - - - - - - - - - - - - - - - - - - - Markup Error: no id attribute in <phase> - - - - - - - - Markup Error: no context attribute in <rule> - - - RULE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Markup Error: no id attribute on abstract <rule> - - - Markup Error: (2) context attribute on abstract <rule> - - - - - - Markup Error: context attribute on abstract <rule> - - - - - - - - - - - - - - - - - - - - - - - - - - - Markup Error: no select attribute in <value-of> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warning: - - must not contain any child elements - - - - - - - - - - - - - - - - - - - - - - - - - Reference error: A diagnostic "" has been referenced but is not declared - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Using the XSLT namespace with a prefix other than "xsl" in - Schematron rules is not supported - in this processor: - - - - - - - - - - - - - - - - - - - - Error: unrecognized element in ISO Schematron namespace: check spelling - and capitalization - - - - - - - - - - - - - Warning: unrecognized element - - - - - - - - - - - - - - - Warning: unrecognized element - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TERMINATING - - - TERMINATING - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TERMINATING - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - title - - - - - - - schema-title - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/content/iso-schematron/iso_schematron_skeleton_for_xslt1_preamble.txt b/content/iso-schematron/iso_schematron_skeleton_for_xslt1_preamble.txt deleted file mode 100644 index b208d16..0000000 --- a/content/iso-schematron/iso_schematron_skeleton_for_xslt1_preamble.txt +++ /dev/null @@ -1,395 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/content/iso-schematron/iso_svrl_for_xslt1.xsl b/content/iso-schematron/iso_svrl_for_xslt1.xsl deleted file mode 100644 index a13faa4..0000000 --- a/content/iso-schematron/iso_svrl_for_xslt1.xsl +++ /dev/null @@ -1,476 +0,0 @@ - - - - - - - - - -true - - - - - - - - - - - #ALL - - -false -true -true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xslt1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   -   -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TERMINATING - - - TERMINATING - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TERMINATING - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/content/iso-schematron/iso_svrl_for_xslt1_preamble.txt b/content/iso-schematron/iso_svrl_for_xslt1_preamble.txt deleted file mode 100644 index bb04e8e..0000000 --- a/content/iso-schematron/iso_svrl_for_xslt1_preamble.txt +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - diff --git a/content/iso-schematron/iso_svrl_for_xslt2.xsl b/content/iso-schematron/iso_svrl_for_xslt2.xsl index 7fd4289..373270d 100644 --- a/content/iso-schematron/iso_svrl_for_xslt2.xsl +++ b/content/iso-schematron/iso_svrl_for_xslt2.xsl @@ -1,4 +1,151 @@ + + + + + + + - - - - - - diff --git a/content/iso-schematron/readme.txt b/content/iso-schematron/readme.txt index f3d4d72..685c92e 100644 --- a/content/iso-schematron/readme.txt +++ b/content/iso-schematron/readme.txt @@ -1,101 +1,101 @@ -

ISO SCHEMATRON 2010

- -XSLT implementation by Rick Jelliffe with assistance from members of Schematron-love-in maillist. - -2010-04-21 - -Two distributions are available. One is for XSLT1 engines. -The other is for XSLT2 engines, such as SAXON 9. - - -This version of Schematron splits the process into a pipeline of several different XSLT stages. - -1) First, preprocess your Schematron schema with iso_dsdl_include.xsl. -This is a macro processor to assemble the schema from various parts. -If your schema is not in separate parts, you can skip this stage. -This stage also generates error messages for some common XPath syntax problems. - -2) Second, preprocess the output from stage 1 with iso_abstract_expand.xsl. -This is a macro processor to convert abstract patterns to real patterns. -If your schema does not use abstract patterns, you can skip this -stage. - -3) Third, compile the Schematron schema into an XSLT script. -This will typically use iso_svrl_for_xslt1.xsl or iso_svrl_for_xslt2.xsl -(which in turn invoke iso_schematron_skeleton_for_xslt1.xsl or iso_schematron_skeleton_for_saxon.xsl) -However, other "meta-styleseets" are also in common use; the principle of operation is the same. -If your schema uses Schematron phases, supply these as command line/invocation parameters -to this process. - -4) Fourth, run the script generated by stage 3 against the document being validated. -If you are using the SVRL script, then the output of validation will be an XML document. -If your schema uses Schematron parameters, supply these as command line/invocation parameters -to this process. - - -The XSLT2 distribution also features several next generation features, -such as validating multiple documents. See the source code for details. - -Schematron assertions can be written in any language, of course; the file -sch-messages-en.xhtml contains the diagnostics messages from the XSLT2 skeleton -in English, and this can be used as template to localize the skeleton's -error messages. Note that typically programming errors in Schematron are XPath -errors, which requires localized messages from the XSLT engine. - -ANT ---- -To give an example of how to process a document, here is a sample ANT task. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -EXTRACTION SCHEMATRON FROM XSD OR RELAX NG - -The following files allow extracting of embedded schematron patterns -in XML Schemas or RELAX NG schemas. For details, see the at - article http://www.topologi.com/resources/schtrn_xsd_paper.html - -The following files are provided: - ExtractSchFromRNG.xsl Generate a Schematron schema from patterns - embedded in a RELAX NG schema. The schema uses XSLT1. - ExtractSchFromXSD.xsl Generate a Schematron schema from patterns - embedded in a W3C XML Schemas schema. The schema uses XSLT1. - - ExtractSchFromRNG-2.xsl Generate a Schematron schema from patterns - embedded in a RELAX NG schema. The schema uses XSLT2. - ExtractSchFromXSD-2.xsl Generate a Schematron schema from patterns +

ISO SCHEMATRON 2010

+ +XSLT implementation by Rick Jelliffe with assistance from members of Schematron-love-in maillist. + +2010-04-21 + +Two distributions are available. One is for XSLT1 engines. +The other is for XSLT2 engines, such as SAXON 9. + + +This version of Schematron splits the process into a pipeline of several different XSLT stages. + +1) First, preprocess your Schematron schema with iso_dsdl_include.xsl. +This is a macro processor to assemble the schema from various parts. +If your schema is not in separate parts, you can skip this stage. +This stage also generates error messages for some common XPath syntax problems. + +2) Second, preprocess the output from stage 1 with iso_abstract_expand.xsl. +This is a macro processor to convert abstract patterns to real patterns. +If your schema does not use abstract patterns, you can skip this +stage. + +3) Third, compile the Schematron schema into an XSLT script. +This will typically use iso_svrl_for_xslt1.xsl or iso_svrl_for_xslt2.xsl +(which in turn invoke iso_schematron_skeleton_for_xslt1.xsl or iso_schematron_skeleton_for_saxon.xsl) +However, other "meta-styleseets" are also in common use; the principle of operation is the same. +If your schema uses Schematron phases, supply these as command line/invocation parameters +to this process. + +4) Fourth, run the script generated by stage 3 against the document being validated. +If you are using the SVRL script, then the output of validation will be an XML document. +If your schema uses Schematron parameters, supply these as command line/invocation parameters +to this process. + + +The XSLT2 distribution also features several next generation features, +such as validating multiple documents. See the source code for details. + +Schematron assertions can be written in any language, of course; the file +sch-messages-en.xhtml contains the diagnostics messages from the XSLT2 skeleton +in English, and this can be used as template to localize the skeleton's +error messages. Note that typically programming errors in Schematron are XPath +errors, which requires localized messages from the XSLT engine. + +ANT +--- +To give an example of how to process a document, here is a sample ANT task. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +EXTRACTION SCHEMATRON FROM XSD OR RELAX NG + +The following files allow extracting of embedded schematron patterns +in XML Schemas or RELAX NG schemas. For details, see the at + article http://www.topologi.com/resources/schtrn_xsd_paper.html + +The following files are provided: + ExtractSchFromRNG.xsl Generate a Schematron schema from patterns + embedded in a RELAX NG schema. The schema uses XSLT1. + ExtractSchFromXSD.xsl Generate a Schematron schema from patterns + embedded in a W3C XML Schemas schema. The schema uses XSLT1. + + ExtractSchFromRNG-2.xsl Generate a Schematron schema from patterns + embedded in a RELAX NG schema. The schema uses XSLT2. + ExtractSchFromXSD-2.xsl Generate a Schematron schema from patterns embedded in a W3C XML Schemas schema. The schema uses XSLT2. \ No newline at end of file diff --git a/content/iso-schematron/sch-messages-de.xhtml b/content/iso-schematron/sch-messages-de.xhtml index e1d5445..00e33e6 100644 --- a/content/iso-schematron/sch-messages-de.xhtml +++ b/content/iso-schematron/sch-messages-de.xhtml @@ -1,57 +1,55 @@ - - - - Fehler im Schema: Schematron Elemente sowohl im alten als auch neuen Namensraum gefunden - Fehler im Schema: Nutzen Sie 'xslt' im queryBinding-Attribut - Fehler: Diese Implementierung von ISO Schematron arbeitet nicht mit Schemas zusammen, die die Query Language - nutzen - Phasenfehler: Es gibt keine Phase mit Namen - - Fehler in der Annotation: Kein Attribut pattern in <active> - Referenzierungsfehler: Der Ausdruck " - " wurde aktiviert, ist aber nicht deklariert - Fehler in der Annotation: Kein Attribut test in <assert - Fehler in der Annotation: Kein Attribut test <report> - Fehler in der Annotation: Kein Attribut id in <diagnostic> - Fehler in der Annotation: Kein Attribut rule in <extends> - Referenzierungsfehler: Die abstrakte Regel " - " wurde referenziert, ist aber nicht deklariert - Fehler in der Annotation: Kein Attribut name in <key> - Fehler in der Annotation: Kein Attribut path oder use in <key> - Fehler in der Annotation: Kein Attribut path oder use in <key> - Fehler im Schema: Das Element key ist im ISO Schematron-Namensraum nicht vorhanden. Benutzen Sie den XSLT-Namensraum. - Fehler in der Annotation: Kein Attribut name in <function> - Fehler im Schema: Das Element function ist im ISO Schematron-Namensraum nicht vorhanden. Benutzen Sie den XSLT-Namensraum. - Fehler im Schema: Leeres Attribut href= für include Anweisung. - Fehler: Ungültige URL in Schematron include - Kann die referenzierte Datei nicht öffnen: - - Fehler im Schema: include darf nur zur Einbettung von Schemafragmenten genutzt werden, nicht für ganze Schemata - Fehler im Schema: XSD Schemata dürfen nur importiert werden, wenn das 'xslt2' Query Language Binding genutzt wird - Fehler im Schema: Das Element import-schema ist im ISO Schematron-Namensraum nicht vorhanden. Benutzen Sie den XSLT-Namensraum. - Warnung: Variablen sollten nicht zusammen mit dem "xpath" Query Language Binding genutzt werden. - Warnung: Variablen sollten nicht zusammen mit dem "xpath2" Query Language Binding genutzt werden. - Fehler in der Annotation: Fehlendes Attiribut uri in <ns> - Fehler in der Annotation: Fehlendes Attribut prefix in <ns> - Fehler bei der Schemaimplementierung: Dieses Schema enthält abstrakte Mustervergleiche, die bereits vorverarbeitet sein sollten. - Fehler in der Annotation: Fehlendes Attiribut id in <phase> - Fehler in der Annotation: Fehlendes Attiribut context in <rule> - Fehler in der Annotation: Fehlendes Attiribut id on abstract <rule> - Fehler in der Annotation: (2) context attribute on abstract <rule> - Fehler in der Annotation: Attribut context bei abstrakter <rule> - Fehler in der Annotation: Fehlendes Attiribut select in <value-of> - Warnung: - darf keine Kindelemente beinhalten - Referenzierungsfehler: Ein diagnostic-Element " - " wurde referenziert, ist aber nicht deklariert - Der Gebrauch des XSLT-Namensraums mit einem anderen Präfix als "xsl" in Schematron-Regeln wird von diesem Prozessor nicht unterstützt: - - Fehler: Unbekanntes Element im ISO Schematron-Namensraum: Überprüfen Sie die Schreibweise (inkl. Groß- und Kleinschreibung) - - Warnung: Unbekanntes Element - - + + + Fehler im Schema: Schematron Elemente sowohl im alten als auch neuen Namensraum gefunden + Fehler im Schema: Nutzen Sie 'xslt' als Wert für das 'queryBinding'-Attribut + Fehler: Diese Implementierung von ISO Schematron unterstützt keine Schemas, welche die Query Language + nutzen + Phasenfehler: Es gibt keine Phase mit Namen + + Fehler in der Annotation: Kein Attribut 'pattern' in <active> + Referenzierungsfehler: Der Ausdruck " + " wurde aktiviert, ist aber nicht deklariert + Fehler in der Annotation: Kein Attribut 'test' in <assert + Fehler in der Annotation: Kein Attribut 'test' in <report> + Fehler in der Annotation: Kein Attribut 'id' in <diagnostic> + Fehler in der Annotation: Kein Attribut 'rule' in <extends> + Referenzierungsfehler: Die abstrakte Regel " + " wurde referenziert, ist aber nicht deklariert + Fehler in der Annotation: Kein Attribut 'name' in <key> + Fehler in der Annotation: Kein Attribut 'path' oder 'use' in <key> + Fehler in der Annotation: Kein Attribut 'path' oder 'use' in <key> + Fehler im Schema: Das Element <key> ist im ISO Schematron-Namensraum nicht vorhanden. Benutzen Sie den XSLT-Namensraum. + Fehler in der Annotation: Kein Attribut 'name' in <function> + Fehler im Schema: Das Element <function> ist im ISO Schematron-Namensraum nicht vorhanden. Benutzen Sie den XSLT-Namensraum. + Fehler im Schema: Leeres Attribut 'href' für <include> Anweisung. + Fehler: Ungültige URL in <include> + Kann die referenzierte Datei nicht öffnen: + + Fehler im Schema: <include> darf nur zur Einbettung von Schemafragmenten genutzt werden, nicht für ganze Schemata + Fehler im Schema: XSD Schemata dürfen nur importiert werden, wenn das 'xslt2' Query Language Binding genutzt wird + Fehler im Schema: Das Element <import-schema> ist im ISO Schematron-Namensraum nicht vorhanden. Benutzen Sie den XSLT-Namensraum. + Warnung: Variablen sollten nicht zusammen mit dem 'xpath' Query Language Binding genutzt werden. + Warnung: Variablen sollten nicht zusammen mit dem 'xpath2' Query Language Binding genutzt werden. + Fehler in der Annotation: Fehlendes Attribut 'uri' in <ns> + Fehler in der Annotation: Fehlendes Attribut 'prefix' in <ns> + Fehler bei der Schemaimplementierung: Dieses Schema enthält abstrakte Mustervergleiche, die bereits vorverarbeitet sein sollten. + Fehler in der Annotation: Fehlendes Attribut 'id' in <phase> + Fehler in der Annotation: Fehlendes Attribut 'context' in <rule> + Fehler in der Annotation: Fehlendes Attribut 'id' an abstrakter <rule> + Fehler in der Annotation: (2) Kontext-Attribut an abstrakter <rule> + Fehler in der Annotation: Attribut 'context' an abstrakter <rule> + Fehler in der Annotation: Fehlendes Attribut 'select' in <value-of> + Warnung: + darf keine Kindelemente beinhalten + Referenzierungsfehler: Ein <diagnostic>-Element " + " wurde referenziert, ist aber nicht deklariert + Der Gebrauch des XSLT-Namensraums mit einem anderen Präfix als 'xsl' in Schematron-Regeln wird von diesem Prozessor nicht unterstützt: + + Fehler: Unbekanntes Element im ISO Schematron-Namensraum: Überprüfen Sie die Schreibweise (inkl. Groß- und Kleinschreibung) + + Warnung: Unbekanntes Element + + diff --git a/content/iso-schematron/sch-messages-en.xhtml b/content/iso-schematron/sch-messages-en.xhtml index 5e266eb..6f777ed 100644 --- a/content/iso-schematron/sch-messages-en.xhtml +++ b/content/iso-schematron/sch-messages-en.xhtml @@ -1,57 +1,57 @@ - - - - Schema error: Schematron elements in old and new namespaces found - Schema error: in the queryBinding attribute, use 'xslt' - Fail: This implementation of ISO Schematron does not work with schemas using the query language - - Phase Error: no phase has been defined with name - - Markup Error: no pattern attribute in <active> - Reference Error: the pattern " - " has been activated but is not declared - Markup Error: no test attribute in <assert> - Markup Error: no test attribute in <report> - Markup Error: no id attribute in <diagnostic> - Markup Error: no rule attribute in <extends> - Reference Error: the abstract rule " - " has been referenced but is not declared - Markup Error: no name attribute in <key> - Markup Error: no path or use attribute in <key> - Markup Error: no path or use attribute in <key> - Schema error: The <key> element is not in the ISO Schematron namespace. Use the XSLT namespace. - Markup Error: no name attribute in <function> - Schema error: The <function> element is not in the ISO Schematron namespace. Use the XSLT namespace. - Schema error: Empty href attribute for <include> directive. - Error: Impossible URL in Schematron <include> - Error: Unable to open referenced included file: - - Schema error: Use <include> to include fragments, not a whole schema - Schema error: XSD schemas may only be imported if you are using the 'xslt2' query language binding - Schema error: The <import-schema> element is not available in the ISO Schematron namespace. Use the XSLT namespace. - Warning: Variables should not be used with the "xpath" query language binding. - Warning: Variables should not be used with the "xpath2" query language binding. - Markup Error: no uri attribute in <ns> - Markup Error: no prefix attribute in <ns> - Schema implementation error: This schema has abstract patterns, yet they are supposed to be preprocessed out already - Markup Error: no id attribute in <phase> - Markup Error: no context attribute in <rule> - Markup Error: no id attribute on abstract <rule> - Markup Error: (2) context attribute on abstract <rule> - Markup Error: context attribute on abstract <rule> - Markup Error: no select attribute in <value-of> - Warning: - must not contain any child elements - Reference error: A diagnostic " - " has been referenced but is not declared - Warning: Using the XSLT namespace with a prefix other than "xsl" in Schematron rules is not supported in this processor: - - Error: unrecognized element in ISO Schematron namespace: check spelling and capitalization - - Warning: unrecognized element - + + + + Schema error: Schematron elements in old and new namespaces found + Schema error: in the queryBinding attribute, use 'xslt' + Fail: This implementation of ISO Schematron does not work with schemas using the query language + + Phase Error: no phase has been defined with name + + Markup Error: no pattern attribute in <active> + Reference Error: the pattern " + " has been activated but is not declared + Markup Error: no test attribute in <assert> + Markup Error: no test attribute in <report> + Markup Error: no id attribute in <diagnostic> + Markup Error: no rule attribute in <extends> + Reference Error: the abstract rule " + " has been referenced but is not declared + Markup Error: no name attribute in <key> + Markup Error: no path or use attribute in <key> + Markup Error: no path or use attribute in <key> + Schema error: The <key> element is not in the ISO Schematron namespace. Use the XSLT namespace. + Markup Error: no name attribute in <function> + Schema error: The <function> element is not in the ISO Schematron namespace. Use the XSLT namespace. + Schema error: Empty href attribute for <include> directive. + Error: Impossible URL in Schematron <include> + Error: Unable to open referenced included file: + + Schema error: Use <include> to include fragments, not a whole schema + Schema error: XSD schemas may only be imported if you are using the 'xslt2' query language binding + Schema error: The <import-schema> element is not available in the ISO Schematron namespace. Use the XSLT namespace. + Warning: Variables should not be used with the "xpath" query language binding. + Warning: Variables should not be used with the "xpath2" query language binding. + Markup Error: no uri attribute in <ns> + Markup Error: no prefix attribute in <ns> + Schema implementation error: This schema has abstract patterns, yet they are supposed to be preprocessed out already + Markup Error: no id attribute in <phase> + Markup Error: no context attribute in <rule> + Markup Error: no id attribute on abstract <rule> + Markup Error: (2) context attribute on abstract <rule> + Markup Error: context attribute on abstract <rule> + Markup Error: no select attribute in <value-of> + Warning: + must not contain any child elements + Reference error: A diagnostic " + " has been referenced but is not declared + Warning: Using the XSLT namespace with a prefix other than "xsl" in Schematron rules is not supported in this processor: + + Error: unrecognized element in ISO Schematron namespace: check spelling and capitalization + + Warning: unrecognized element + \ No newline at end of file diff --git a/content/iso-schematron/sch-messages-fr.xhtml b/content/iso-schematron/sch-messages-fr.xhtml index 574b5cb..a797db7 100644 --- a/content/iso-schematron/sch-messages-fr.xhtml +++ b/content/iso-schematron/sch-messages-fr.xhtml @@ -1,54 +1,54 @@ - - - Erreur de schema: éléments Schematron à la fois dans l'ancien et le nouveau namespace - Erreur de schema: utilisez 'xslt' dans l'attribut queryBinding - Échec: Cette implémentation de Schematron ISO ne fonctionne pas avec des schemas utilisant le langage de query - - Erreur de phase: aucune phase n'a été définie avec le nom - - Erreur de balisage: pas d'attribut pattern dans <active> - Erreur de référence: le pattern " - " a été activé mais n'a pas été décalaré - Erreur de balisage: pas d'attribut test dans <assert> - Erreur de balisage: pas d'attribut test dans <report> - Erreur de balisage: pas d'attribut id dans <diagnostic> - Erreur de balisage: pas d'attribut rule dans <extends> - Erreur de référence: la règle abstraite " - " a été référencée mais pas déclarée - Erreur de balisage: pas d'attribut name dans <key> - Erreur de balisage: pas d'attribut path ou use dans <key> - Erreur de schema: L'élément key n'est pas dans le namespace Schematron ISO. Utilisez le namespace XSLT. - Erreur de balisage: pas d'attribut name dans <function> - Erreur de schema: L'élément function n'est pas dans le namespace Schematron ISO. Utilisez le namespace XSLT. - Erreur de schema: Attribut href vide sur a directive include. - Erreur: URL impossible dans la directive include de Schematron - Impossible d'ouvrir le fichier référencé pour l'inclusion: - - Erreur de schema: Utilisez include pour inclure des fragments et non un schema entier - Erreur de schema: Les schema XSD peuvent être importés seulement si vous utilisez the langage de query 'xslt2' - Erreur de schema: L'élément import-schema n'est pas disponible dans le namespace Schematron ISO. Utilisez le namespace XSLT. - Avertissement: Des variables ne devraient pas être utiliées avec le langage de query "xpath". - Avertissement: Des variables ne devraient pas être utiliées avec le langage de query "xpath2". - Erreur de balisage: pas d'attribut uri dans <ns> - Erreur de balisage: pas d'attribut prefix dans <ns> - Erreur d'implémentation de schema: Ce schema des patterns abstraits, bien qu'ils sont supposés avoir été préprocessés précédemment - Erreur de balisage: pas d'attribut id dans <phase> - Erreur de balisage: pas d'attribut context dans <rule> - Erreur de balisage: pas d'attribut id dans <rule> - Erreur de balisage: (2) attribut context dans une <rule> abstraite - Erreur de balisage: attribut context dans une <rule> abstraite - Erreur de balisage: pas d'attribut select dans <value-of> - Avertissement: - ne peut contenir aucun élément enfant - Erreur de référence: Un diagnostique " - " a été référencé mais n'est pas déclaré - Utiliser the namespace XSLT avec un autre préfixe que "xsl" dans les rules Schematron n'est pas supporté par ce processor: - - Erreur: élément inconnu dans le namespace Schematron ISO: vérifiez l'orthographe et la casse - - Avertissement: élément inconnu - - + + + Erreur de schema: éléments Schematron à la fois dans l'ancien et le nouveau namespace + Erreur de schema: utilisez 'xslt' dans l'attribut queryBinding + Échec: Cette implémentation de Schematron ISO ne fonctionne pas avec des schemas utilisant le langage de query + + Erreur de phase: aucune phase n'a été définie avec le nom + + Erreur de balisage: pas d'attribut pattern dans <active> + Erreur de référence: le pattern " + " a été activé mais n'a pas été décalaré + Erreur de balisage: pas d'attribut test dans <assert> + Erreur de balisage: pas d'attribut test dans <report> + Erreur de balisage: pas d'attribut id dans <diagnostic> + Erreur de balisage: pas d'attribut rule dans <extends> + Erreur de référence: la règle abstraite " + " a été référencée mais pas déclarée + Erreur de balisage: pas d'attribut name dans <key> + Erreur de balisage: pas d'attribut path ou use dans <key> + Erreur de schema: L'élément key n'est pas dans le namespace Schematron ISO. Utilisez le namespace XSLT. + Erreur de balisage: pas d'attribut name dans <function> + Erreur de schema: L'élément function n'est pas dans le namespace Schematron ISO. Utilisez le namespace XSLT. + Erreur de schema: Attribut href vide sur a directive include. + Erreur: URL impossible dans la directive include de Schematron + Impossible d'ouvrir le fichier référencé pour l'inclusion: + + Erreur de schema: Utilisez include pour inclure des fragments et non un schema entier + Erreur de schema: Les schema XSD peuvent être importés seulement si vous utilisez the langage de query 'xslt2' + Erreur de schema: L'élément import-schema n'est pas disponible dans le namespace Schematron ISO. Utilisez le namespace XSLT. + Avertissement: Des variables ne devraient pas être utiliées avec le langage de query "xpath". + Avertissement: Des variables ne devraient pas être utiliées avec le langage de query "xpath2". + Erreur de balisage: pas d'attribut uri dans <ns> + Erreur de balisage: pas d'attribut prefix dans <ns> + Erreur d'implémentation de schema: Ce schema des patterns abstraits, bien qu'ils sont supposés avoir été préprocessés précédemment + Erreur de balisage: pas d'attribut id dans <phase> + Erreur de balisage: pas d'attribut context dans <rule> + Erreur de balisage: pas d'attribut id dans <rule> + Erreur de balisage: (2) attribut context dans une <rule> abstraite + Erreur de balisage: attribut context dans une <rule> abstraite + Erreur de balisage: pas d'attribut select dans <value-of> + Avertissement: + ne peut contenir aucun élément enfant + Erreur de référence: Un diagnostique " + " a été référencé mais n'est pas déclaré + Utiliser the namespace XSLT avec un autre préfixe que "xsl" dans les rules Schematron n'est pas supporté par ce processor: + + Erreur: élément inconnu dans le namespace Schematron ISO: vérifiez l'orthographe et la casse + + Avertissement: élément inconnu + + diff --git a/content/iso-schematron/sch-messages-ja.xhtml b/content/iso-schematron/sch-messages-ja.xhtml new file mode 100644 index 0000000..bedf32b --- /dev/null +++ b/content/iso-schematron/sch-messages-ja.xhtml @@ -0,0 +1,53 @@ + + + スキーマエラー:古い名前空間と新しい名前空間にはSchematron 要素が見つかりました。 + スキーマエラー:検索結合属性では、 'xslt'を使用する。 + 失敗: ISO Schematron の 実行 は、スキーマが検索言語を使用してできない。 + + フェーズ エラー: フェーズは名前で定義されていない。 + + マークアップエラー: <active>にはパターンの属性がない + 参照エラー: パターン が " + " 活性化されているが宣言されていない。 + マークアップエラー: <assert> にはtestの属性がない + マークアップエラー: <report> にはtestの属性がない + マークアップエラー: <diagnostic> にはidの属性がない   + マークアップエラー:  <extends> にはruleの属性がない + 参照エラー: 抽象的な規則が " + " 参照されているが宣言されていない。 + マークアップエラー: <key>にはnameの属性がない + マークアップエラー: <key>にはpath か 又は useの 属性がない + マークアップエラー:  <key>には path か 又は useの 属性がない + スキーマエラー: <key> の要素はISO Schematronの 名前空間にはない. XSLTの名前空間を使用する。 + マークアップエラー: <function>にはnameの属性がない + スキーマエラー: <function> の要素はISO Schematronの 名前空間にはない. XSLTの名前空間を使用する。 + スキーマエラー: <include>のために空hrefの属性がある。 + エラー: Schematron <include>には不可能なURL がある + エラー: 参照したファイルが含まれて、開けない : + + スキーマエラー:全体のスキーマではなく、フラグメントを含む <include> を使用する。 + スキーマエラー: 'xslt2'の検索言語結合を使用している場合はXSDスキーマのみ読み込みできる。 + スキーマエラー:ISO Schematron の名前空間には <import-schema>の要素は無効です。 XSLTの 名前空間を使用する。 + 注意: 変数は、"xpath" 検索言語結合を使用すべきではない。 + 注意: 変数は、"xpath" 検索言語結合を使用すべきではない。 + マークアップエラー: <ns>にはuriの属性がない + マークアップエラー: <ns>にはprefixの属性がない + スキーマ実行 エラー: このスキーマは抽象的なパターンを持って、まだすでに前加工されることになっている。 + マークアップエラー: <phase>にはidの属性がない + マークアップエラー: <rule>にはcontextの要素がない + マークアップエラー: 抽象的な <rule>にはid属性がない。 + マークアップエラー: (2) 抽象的な <rule>にはcontext属性がない。 + マークアップエラー: 抽象的な <rule>にはcontext属性がない。 + マークアップエラー: <value-of>には selectの属性がない + 注意: + 子要素が含まれなくてはならない + 参照エラー: 診断は " + " 参照されているが宣言されていない。 + 注意: Schematron規則で"xsl"以外の接頭辞 XSLT 名前空間を使用することは、このプロセサーで サーポトしていない。 + + エラー: ISO Schematron 名前空間に不明な要素がある: 綴り字と大文字使用を確認する + + 注意: 不明な要素 + + diff --git a/content/iso-schematron/sch-messages-nl.xhtml b/content/iso-schematron/sch-messages-nl.xhtml index 8258377..5f05577 100644 --- a/content/iso-schematron/sch-messages-nl.xhtml +++ b/content/iso-schematron/sch-messages-nl.xhtml @@ -1,58 +1,58 @@ - - - Schema fout: er werden Schematron elementen uit de oude en nieuwe - namespace gevonden - Schema fout: gebruik 'xslt' in het queryBinding attribute - Faling: Deze implementatie van ISO Schematron werkt niet met - schemas die gebruik maken van de query language - - Fase fout: er is geen 'phase' gedefinieerd met naam - - Markup fout: er is geen 'pattern' attribuut in <active> - Referentie fout: het 'pattern' " - " is geactiveerd maar niet gedeclareerd - Markup fout: er is geen 'test' attribuut in <assert - Markup fout: er is geen 'test' attribuut in <report> - Markup fout: er is geen 'id' attribuut in <diagnostic> - Markup fout: er is geen 'rule' attribuut in <extends> - Referentie fout: de abstracte regel " - " werd gerefereerd maar niet gedeclareerd - Markup fout: er is geen 'name' attribuut in <key> - Markup fout: er is geen 'path' of 'use' attribuut in <key> - Markup fout: er is geen 'path' of 'use' attribuut in <key> - Schema fout: Het 'key' element zit niet in de ISO Schematron namespace. Gebruik de XSLT namespace. - Markup fout: er is geen 'name' attribuut in <function> - Schema fout: Het 'function' element zit niet in de ISO Schematron namespace. Gebruik de XSLT namespace. - Schema fout: Leeg 'href=' attribuut bij de include opdracht. - Fout: Onmogelijke URL gebruikt bij de Schematron include - Kan de gerefereerde 'include' file niet openen: - - Schema fout: Gebruik include om fragmenten op te nemen, niet een volledig schema - Schema fout: XSD schemas kunnen enkel geïmporteerd worden indien de 'xslt2' query language binding gebruikt is - Schema fout: Het 'import-schema' element is niet beschikbaar in the ISO Schematron namespace. Gebruik de XSLT namespace. - Waarschuwing: Variabelen niet gebruiken met de "xpath" query language binding. - Waarschuwing: Variabelen niet gebruiken met de "xpath2" query language binding. - Markup fout: er is geen 'uri' attribute in <ns> - Markup fout: er is geen 'prefix' attribute in <ns> - Schema implementatie fout: Dit schema heeft abstracte patronen, die al gepreprocessed zouden moeten zijn - Markup fout: er is geen 'id' attribuut in <phase> - Markup fout: er is geen 'context' attribuut in <rule> - Markup fout: er is geen 'id' attribuut op abstracte <rule> - Markup fout: (2) context attributen op abstracte <rule> - Markup fout: context attribuut op abstracte <rule> - Markup fout: er is geen 'select' attribute in <value-of> - Waarschuwing: - mag geen kind elementen bevatten - Referentie fout: Een diagnostic " - " werd gerefereerd maar is niet gedeclareerd. - Het gebruik van de XSLT namespace met een prefix verschillend - van "xsl" in Schematron regels wordt niet ondersteund in deze processor: - - Fout: een niet herkend element in de ISO Schematron namespace: check spelling en hoofdlettergebruik - - Waarschuwing: een niet herkend element - - + + + Schema fout: er werden Schematron elementen uit de oude en nieuwe + namespace gevonden + Schema fout: gebruik 'xslt' in het queryBinding attribute + Faling: Deze implementatie van ISO Schematron werkt niet met + schemas die gebruik maken van de query language + + Fase fout: er is geen 'phase' gedefinieerd met naam + + Markup fout: er is geen 'pattern' attribuut in <active> + Referentie fout: het 'pattern' " + " is geactiveerd maar niet gedeclareerd + Markup fout: er is geen 'test' attribuut in <assert + Markup fout: er is geen 'test' attribuut in <report> + Markup fout: er is geen 'id' attribuut in <diagnostic> + Markup fout: er is geen 'rule' attribuut in <extends> + Referentie fout: de abstracte regel " + " werd gerefereerd maar niet gedeclareerd + Markup fout: er is geen 'name' attribuut in <key> + Markup fout: er is geen 'path' of 'use' attribuut in <key> + Markup fout: er is geen 'path' of 'use' attribuut in <key> + Schema fout: Het 'key' element zit niet in de ISO Schematron namespace. Gebruik de XSLT namespace. + Markup fout: er is geen 'name' attribuut in <function> + Schema fout: Het 'function' element zit niet in de ISO Schematron namespace. Gebruik de XSLT namespace. + Schema fout: Leeg 'href=' attribuut bij de include opdracht. + Fout: Onmogelijke URL gebruikt bij de Schematron include + Kan de gerefereerde 'include' file niet openen: + + Schema fout: Gebruik include om fragmenten op te nemen, niet een volledig schema + Schema fout: XSD schemas kunnen enkel geïmporteerd worden indien de 'xslt2' query language binding gebruikt is + Schema fout: Het 'import-schema' element is niet beschikbaar in the ISO Schematron namespace. Gebruik de XSLT namespace. + Waarschuwing: Variabelen niet gebruiken met de "xpath" query language binding. + Waarschuwing: Variabelen niet gebruiken met de "xpath2" query language binding. + Markup fout: er is geen 'uri' attribute in <ns> + Markup fout: er is geen 'prefix' attribute in <ns> + Schema implementatie fout: Dit schema heeft abstracte patronen, die al gepreprocessed zouden moeten zijn + Markup fout: er is geen 'id' attribuut in <phase> + Markup fout: er is geen 'context' attribuut in <rule> + Markup fout: er is geen 'id' attribuut op abstracte <rule> + Markup fout: (2) context attributen op abstracte <rule> + Markup fout: context attribuut op abstracte <rule> + Markup fout: er is geen 'select' attribute in <value-of> + Waarschuwing: + mag geen kind elementen bevatten + Referentie fout: Een diagnostic " + " werd gerefereerd maar is niet gedeclareerd. + Het gebruik van de XSLT namespace met een prefix verschillend + van "xsl" in Schematron regels wordt niet ondersteund in deze processor: + + Fout: een niet herkend element in de ISO Schematron namespace: check spelling en hoofdlettergebruik + + Waarschuwing: een niet herkend element + + diff --git a/content/iso-schematron/schematron-skeleton-api.htm b/content/iso-schematron/schematron-skeleton-api.htm index 165899c..af81377 100644 --- a/content/iso-schematron/schematron-skeleton-api.htm +++ b/content/iso-schematron/schematron-skeleton-api.htm @@ -1,723 +1,723 @@ - - - - - The ISO Schematron Skeleton API - - - - - -

API for ISO Schematron Skeleton

-



-

-

Rick Jelliffe, 2010/04/14

-

This document provides documentation on the XSLT API available in -the implementation of Schematron called iso_schematron_skeleton.xsl. -(available in an XSLT1 and XSLT2 version). The API makes available as -much information from the schema, however there may be some edge -cases where it is not exhaustive. -

-

The skeleton is an XSLT script which provides all the basic -parsing and validating routines for compiling a Schematron schema -into XSLT. Schematron was designed to allow many different uses, and -the skeleton gives you a headstart in creating a customized -implementation. You just need to write XSLT templates to override the -default ones. (The program you write is sometimes called a -meta-stylesheet.) It is the meta-stylesheet that is called -as the XSLT script, not the skeleton. There are several -pre-processing stages which the Schematron schema should be processed -through first, to handle such things as include statements and -abstract patterns. -

-

Phases and error reporting for problems in the schema itself are -handled by the skeleton with no interaction with a “meta-stylesheet”. -Note that there is no guarantee that the context node is always the -element being handled: in most cases the only information available -is the information in the parameters. -

-

For an introductory tutorial on using this API, see Bob DuCharme's -Schematron 1.5: -Looking Under the Hood -

-

Superset of API for Schematron 1.5 and 1.6

-

(This is an updated version of the API for the Schematron 1.5 -implementation called skeleton1-5.xsl, which in turn comes -from the new architecture contributed by Oliver Becker for -Schematron 1.3.)

-

The current API contains only additions. Well-written -meta-stylesheets that use the new API will be be able to run on the -existing 1.5 and 1.6 skeletons. Similarly, it should be possible to -upgrade the skeleton from 1.5 or 1.6 to the iso-schematron-skeleton -only by correcting the import statement at the beginning of the -meta-stylsheet. Additions or re-groupings from the 1.5 schema are -shown in red. Deletions have overstrike.

-

Mooted addition: a parameter @action which for specifying -processing instructions on assertions and reports.

-
-

process-prolog

-

The process-prolog template gets called at the start of -the validation session. It has no parameters. The default -implementation is no action.

-
-

process-root

-

The process-root template processes the root element of -the schema (which is not the same thing as the root of the document / -and need not be the document element /*) .

-
-
node-list $contents -
- string $schemaVersion -
- The version of the schema, perhaps a datestamp. -
- "xslt" | "xpath" | - "xslt2" | ... - $queryBinding -
- The query language binding. -
- string $title -
- The title of this schema -
- "iso" | "1.5" | - "1.6" | ... - $version -
- The version of Schematron being used. -
-

-Rich properties:

-
-
XML SystemId - $icon -
- The URI of an icon -
- XML ID - $id -
- The unique identifier with the schema for the - schema - element. -
- SGML FPI - $fpi -
- The Formal Public Identifier for this schema. -
- IETF language - $lang -
- The human language used in this schema, from - xml:lang -
- URL - $see -
- Link to documentation on WWW or file -
- "preserve" | "default" - $space -
- The value for xml:space -
-

-To print the documentation paragraphs, use <xsl:apply-templates -mode="do-schema-p" />

-

To output the results, use <xsl:copy-of select="$contents" -/>

-
-

process-assert

-

The process-assert template handles asserts whose test -has failed. -

-
-
XPath $test -
- The test -
- XML IDREFS $diagnostics -
- A list of the idrefs diagnostic elements related to the current - assertion -
- XML NMTOKEN - $flag -
- The name of a flag that becomes true because - this assertion fails. The flag is true for the document if it is - flagged true on any assertion. For compatability, this parameter - should not be used with Schematron 1.5. -
-

-Rich properties:

-
-
XML SystemId - $icon -
- The URI of an icon -
- XML ID - $id -
- The unique identifier with the schema for the - assert - element. -
- SGML FPI - $fpi -
- The Formal Public Identifier for this - assertion. -
- IETF language - $lang -
- The human language used in this assertion, - from xml:lang -
- URL - $see -
- Link to documentation on WWW or file -
- "preserve" | "default" - $space -
- The value for xml:space -
-

-Linking properties:

-
-
XML NMTOKEN - $role -
- A name for the generic role of this assertion. - The schema creator would have their own vocabulary. -
- XPath - $subject -
- A path relative to the current context to some - interesting node considered the subject. -
-

-To print the text contents, use <xsl:apply-templates -mode="text" />

-
-

process-diagnostic

-

The process-diagnostic template handles diagnostic -messages for assert statements that have failed and report -statements that have succeeded. The diagnostics are evaluated in the -context of the rule.

-

Rich properties:

-
-
XML SystemId - $icon -
- The URI of an icon -
- XML ID - $id -
- The unique identifier with the schema for the - assert - element. -
- SGML FPI - $fpi -
- The Formal Public Identifier for this - assertion. -
- IETF language - $lang -
- The human language used in this assertion, - from xml:lang -
- URL - $see -
- Link to documentation on WWW or file -
- "preserve" | "default" - $space -
- The value for xml:space -

-
-

process-dir

-

The process-dir template handles bi-directionality -markup, which is only needed by certain human scripts such as Arabic.

-
-
"ltr" or "rtl" or "" - $value -
- Left-to-right or right-to-left or unspecified -

-
-

process-emph

-

The process-emph template handles the markup of -emphasized text in paragraphs, assertions and diagnostics. It has no -parameters.

-
-

process-message

-

The process-message handles default outputing of text.

-
-
string $pattern -
- Some text that may be some kind of pattern -
- string $role -
- Some text that may be some kind of role -

-
-

process-name

-

The process-name templates handle name strings that can -be used in assertions. asssert and report only -provide name subelements rather than the more general -value-of elements to encourage plain language and generic -descriptions rather than specific diagnostics, for which purpose the -diagnostics elements are used.

-
-
string $name -
- The name of the current element, or of the node specified by a name - element -

-
-

process-ns

-

The process-ns template reports on ns -declarations, which are used to transmit on namespace information by -the skeleton.

-
-
Namespace NCName $prefix -
- The prefix of a namespace -
- XML SystemId $uri -
- The (internationalized) URI Reference of a namespace -

-
-

process-p

-

The process-p template handles paragraphs.

-
-
XML NMTOKEN $class -
- An attribute that can be used for stylesheet style -
- XML ID $id -
- The unique identifier with the schema for the p element. -
- XML SystemId $icon -
- The URI of an icon -
- IETF Language $lang -
- The human language used in this paragraph -
-

-To print the text contents, use <xsl:apply-templates -mode="text" /> -

-
-

process-pattern

-

The process-pattern reports on the start of evaluation of -a pattern element.

-
-
string $name -
- The title of the current pattern -
- XML NCNAMES $is-a -
- Empty or not provided if the pattern is not derived from an abstract - pattern. Otherwise the name of the abstract pattern. A list may be - used if there was a sequence of abstract patterns. -
-

-Rich properties:

-
-
XML SystemId - $icon -
- The URI of an icon -
- XML ID - $id -
- The unique identifier with the schema for the - pattern - element. -
- SGML FPI - $fpi -
- The Formal Public Identifier for this pattern. - -
- IETF language - $lang -
- The human language used in this pattern, from - xml:lang -
- URL - $see -
- A (internationalized) URI reference to some - supporting or defining documentation -
- "preserve" | "default" - $space -
- The value for xml:space -
-

-To print the documentation contents, use <xsl:apply-templates -mode="do-pattern-p"/>

-
-

process-report

-

The process-report template handles report whose -test has succeeded. -

-
-
XPath $test -
- The test -
- XML IDREFS $diagnostics -
- A list of the diagnostic elements related to the current assertion -
- XML NMTOKEN - $flag -
- The name of a flag that becomes true because - this assertion fails. The flag is true for the document if it is - flagged true on any assertion. For compatability, this parameter - should not be used with Schematron 1.5. -
-

-Rich properties:

-
-
XML SystemId - $icon -
- The URI of an icon -
- XML ID - $id -
- The unique identifier with the schema for the - report - element. -
- SGML FPI - $fpi -
- The Formal Public Identifier for this report. -
- IETF language - $lang -
- The human language used in this report, from - xml:lang -
- URL - $see -
- Link to documentation on WWW or file -
- "preserve" | "default" - $space -
- The value for xml:space -
-

-Linking properties:

-
-
XML NMTOKEN - $role -
- A name for the generic role of this assertion. - The schema creator would have their own vocabulary. -
- XPath - $subject -
- A path relative to the current context to some - interesting node considered the subject. -
-

-To print the text contents, use <xsl:apply-templates -mode="text" />

-
-

process-rule

-

The process-rule reports that a rule element has -fired: its context attribute matched some nodes. .

-
-
XSLT expression $context -
- The expression that gives the context of the current -
-

-Rich properties:

-
-
XML SystemId - $icon -
- The URI of an icon -
- XML ID - $id -
- The unique identifier with the schema for this - rule - element. -
- SGML FPI - $fpi -
- The Formal Public Identifier for this rule. -
- IETF language - $lang -
- The human language used in this rule, from - xml:lang -
- URL - $see -
- Link to documentation on WWW or file -
- "preserve" | "default" - $space -
- The value for xml:space -
-

-Linking properties:

-
-
XML NMTOKEN - $role -
- A name for the generic role of this assertion. - The schema creator would have their own vocabulary. -
- XPath - $subject -
- A path relative to the current context to some - interesting node considered the subject. -

-
-

process-span

-

The process-span handles span elements, which are generic -elements for styling, like HTML's .

-
-
XML NMTOKEN $class -
- An attribute that can be used for stylesheet style -

-
-

process-title

-

The process-title handles title elements, which are -generic elements for styling, like HTML's .

-
-
XML NMTOKEN $class -
- An attribute that can be used for stylesheet style -
-

-By default, titles are handled by invocing process-p with -the parameter class with a value "title".

-
-

process-value-of

-

The process-value-of template handles value-of -elements, which are used in diagnostic messages to allow very -specific hinting .

-
-
XPath $select -
- The path of some node that will be evaluated and printed.

-
-

Global Parameters

-

There are several global parameters that may be available for use. -However, it is not a requirement to follow these, and implementations -may not supply them with any value. So a test of -string-length(variable) < -0 is appropriate in each case.

-



-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Parameter

-
-

Value

-
-

Description

-
-

allow-foreign

-
-

"true" | "false" (default) -

-
-

Pass non-Schematron elements to the generated - stylesheet. Pass the Schematron elements span, emph and dir: to - the output SVRL. -

-
-

fileNameParameter

-
-

string

-
-

A parameter passed to the Validator and - potentially available as a variable in Schematron schemas as - $fileNameParameter

-
-

fileDirParameter

-
-

string

-
-

A parameter passed to the Validator and - potentially available as a variable in Schematron schemas as - $fileDirParameter

-
-

archiveNamePaameter

-
-

string

-
-

A parameter passed to the Validator and - potentially available as a variable in Schematron schemas as - $archiveNameParameter

-
-

archiveDirParameter

-
-

string

-
-

A parameter passed to the Validator and - potentially available as a variable in Schematron schemas as - $archivePathParameter

-
-

debug -

-
-

true” | “false” (default)

-
-

Verbose error messages (Note this may be - superceded by “verbose” at some stage in the future.)

-
-

generate-paths

-
-

true|false -

-
-

generate the SVRL @location attribute with XPaths

-
-

diagnose

-
-

yes | no -

-
-

Add the diagnostics to the assertion results

-
-

terminate

-
-

yes | no | true | false | assert -

-
-

Terminate on the first failed assertion or - successful report

-
-

message-newline -

-
-

"true" (default) | "false" -

-
-

Generate an extra newline at the end of messages

-
-

output-encoding

-
-

string

-
-

The encoding used for output, for example if the - output is XML

-
-
-
-
- + + + + + The ISO Schematron Skeleton API + + + + + +

API for ISO Schematron Skeleton

+



+

+

Rick Jelliffe, 2010/04/14

+

This document provides documentation on the XSLT API available in +the implementation of Schematron called iso_schematron_skeleton.xsl. +(available in an XSLT1 and XSLT2 version). The API makes available as +much information from the schema, however there may be some edge +cases where it is not exhaustive. +

+

The skeleton is an XSLT script which provides all the basic +parsing and validating routines for compiling a Schematron schema +into XSLT. Schematron was designed to allow many different uses, and +the skeleton gives you a headstart in creating a customized +implementation. You just need to write XSLT templates to override the +default ones. (The program you write is sometimes called a +meta-stylesheet.) It is the meta-stylesheet that is called +as the XSLT script, not the skeleton. There are several +pre-processing stages which the Schematron schema should be processed +through first, to handle such things as include statements and +abstract patterns. +

+

Phases and error reporting for problems in the schema itself are +handled by the skeleton with no interaction with a “meta-stylesheet”. +Note that there is no guarantee that the context node is always the +element being handled: in most cases the only information available +is the information in the parameters. +

+

For an introductory tutorial on using this API, see Bob DuCharme's +Schematron 1.5: +Looking Under the Hood +

+

Superset of API for Schematron 1.5 and 1.6

+

(This is an updated version of the API for the Schematron 1.5 +implementation called skeleton1-5.xsl, which in turn comes +from the new architecture contributed by Oliver Becker for +Schematron 1.3.)

+

The current API contains only additions. Well-written +meta-stylesheets that use the new API will be be able to run on the +existing 1.5 and 1.6 skeletons. Similarly, it should be possible to +upgrade the skeleton from 1.5 or 1.6 to the iso-schematron-skeleton +only by correcting the import statement at the beginning of the +meta-stylsheet. Additions or re-groupings from the 1.5 schema are +shown in red. Deletions have overstrike.

+

Mooted addition: a parameter @action which for specifying +processing instructions on assertions and reports.

+
+

process-prolog

+

The process-prolog template gets called at the start of +the validation session. It has no parameters. The default +implementation is no action.

+
+

process-root

+

The process-root template processes the root element of +the schema (which is not the same thing as the root of the document / +and need not be the document element /*) .

+
+
node-list $contents +
+ string $schemaVersion +
+ The version of the schema, perhaps a datestamp. +
+ "xslt" | "xpath" | + "xslt2" | ... + $queryBinding +
+ The query language binding. +
+ string $title +
+ The title of this schema +
+ "iso" | "1.5" | + "1.6" | ... + $version +
+ The version of Schematron being used. +
+

+Rich properties:

+
+
XML SystemId + $icon +
+ The URI of an icon +
+ XML ID + $id +
+ The unique identifier with the schema for the + schema + element. +
+ SGML FPI + $fpi +
+ The Formal Public Identifier for this schema. +
+ IETF language + $lang +
+ The human language used in this schema, from + xml:lang +
+ URL + $see +
+ Link to documentation on WWW or file +
+ "preserve" | "default" + $space +
+ The value for xml:space +
+

+To print the documentation paragraphs, use <xsl:apply-templates +mode="do-schema-p" />

+

To output the results, use <xsl:copy-of select="$contents" +/>

+
+

process-assert

+

The process-assert template handles asserts whose test +has failed. +

+
+
XPath $test +
+ The test +
+ XML IDREFS $diagnostics +
+ A list of the idrefs diagnostic elements related to the current + assertion +
+ XML NMTOKEN + $flag +
+ The name of a flag that becomes true because + this assertion fails. The flag is true for the document if it is + flagged true on any assertion. For compatability, this parameter + should not be used with Schematron 1.5. +
+

+Rich properties:

+
+
XML SystemId + $icon +
+ The URI of an icon +
+ XML ID + $id +
+ The unique identifier with the schema for the + assert + element. +
+ SGML FPI + $fpi +
+ The Formal Public Identifier for this + assertion. +
+ IETF language + $lang +
+ The human language used in this assertion, + from xml:lang +
+ URL + $see +
+ Link to documentation on WWW or file +
+ "preserve" | "default" + $space +
+ The value for xml:space +
+

+Linking properties:

+
+
XML NMTOKEN + $role +
+ A name for the generic role of this assertion. + The schema creator would have their own vocabulary. +
+ XPath + $subject +
+ A path relative to the current context to some + interesting node considered the subject. +
+

+To print the text contents, use <xsl:apply-templates +mode="text" />

+
+

process-diagnostic

+

The process-diagnostic template handles diagnostic +messages for assert statements that have failed and report +statements that have succeeded. The diagnostics are evaluated in the +context of the rule.

+

Rich properties:

+
+
XML SystemId + $icon +
+ The URI of an icon +
+ XML ID + $id +
+ The unique identifier with the schema for the + assert + element. +
+ SGML FPI + $fpi +
+ The Formal Public Identifier for this + assertion. +
+ IETF language + $lang +
+ The human language used in this assertion, + from xml:lang +
+ URL + $see +
+ Link to documentation on WWW or file +
+ "preserve" | "default" + $space +
+ The value for xml:space +

+
+

process-dir

+

The process-dir template handles bi-directionality +markup, which is only needed by certain human scripts such as Arabic.

+
+
"ltr" or "rtl" or "" + $value +
+ Left-to-right or right-to-left or unspecified +

+
+

process-emph

+

The process-emph template handles the markup of +emphasized text in paragraphs, assertions and diagnostics. It has no +parameters.

+
+

process-message

+

The process-message handles default outputing of text.

+
+
string $pattern +
+ Some text that may be some kind of pattern +
+ string $role +
+ Some text that may be some kind of role +

+
+

process-name

+

The process-name templates handle name strings that can +be used in assertions. asssert and report only +provide name subelements rather than the more general +value-of elements to encourage plain language and generic +descriptions rather than specific diagnostics, for which purpose the +diagnostics elements are used.

+
+
string $name +
+ The name of the current element, or of the node specified by a name + element +

+
+

process-ns

+

The process-ns template reports on ns +declarations, which are used to transmit on namespace information by +the skeleton.

+
+
Namespace NCName $prefix +
+ The prefix of a namespace +
+ XML SystemId $uri +
+ The (internationalized) URI Reference of a namespace +

+
+

process-p

+

The process-p template handles paragraphs.

+
+
XML NMTOKEN $class +
+ An attribute that can be used for stylesheet style +
+ XML ID $id +
+ The unique identifier with the schema for the p element. +
+ XML SystemId $icon +
+ The URI of an icon +
+ IETF Language $lang +
+ The human language used in this paragraph +
+

+To print the text contents, use <xsl:apply-templates +mode="text" /> +

+
+

process-pattern

+

The process-pattern reports on the start of evaluation of +a pattern element.

+
+
string $name +
+ The title of the current pattern +
+ XML NCNAMES $is-a +
+ Empty or not provided if the pattern is not derived from an abstract + pattern. Otherwise the name of the abstract pattern. A list may be + used if there was a sequence of abstract patterns. +
+

+Rich properties:

+
+
XML SystemId + $icon +
+ The URI of an icon +
+ XML ID + $id +
+ The unique identifier with the schema for the + pattern + element. +
+ SGML FPI + $fpi +
+ The Formal Public Identifier for this pattern. + +
+ IETF language + $lang +
+ The human language used in this pattern, from + xml:lang +
+ URL + $see +
+ A (internationalized) URI reference to some + supporting or defining documentation +
+ "preserve" | "default" + $space +
+ The value for xml:space +
+

+To print the documentation contents, use <xsl:apply-templates +mode="do-pattern-p"/>

+
+

process-report

+

The process-report template handles report whose +test has succeeded. +

+
+
XPath $test +
+ The test +
+ XML IDREFS $diagnostics +
+ A list of the diagnostic elements related to the current assertion +
+ XML NMTOKEN + $flag +
+ The name of a flag that becomes true because + this assertion fails. The flag is true for the document if it is + flagged true on any assertion. For compatability, this parameter + should not be used with Schematron 1.5. +
+

+Rich properties:

+
+
XML SystemId + $icon +
+ The URI of an icon +
+ XML ID + $id +
+ The unique identifier with the schema for the + report + element. +
+ SGML FPI + $fpi +
+ The Formal Public Identifier for this report. +
+ IETF language + $lang +
+ The human language used in this report, from + xml:lang +
+ URL + $see +
+ Link to documentation on WWW or file +
+ "preserve" | "default" + $space +
+ The value for xml:space +
+

+Linking properties:

+
+
XML NMTOKEN + $role +
+ A name for the generic role of this assertion. + The schema creator would have their own vocabulary. +
+ XPath + $subject +
+ A path relative to the current context to some + interesting node considered the subject. +
+

+To print the text contents, use <xsl:apply-templates +mode="text" />

+
+

process-rule

+

The process-rule reports that a rule element has +fired: its context attribute matched some nodes. .

+
+
XSLT expression $context +
+ The expression that gives the context of the current +
+

+Rich properties:

+
+
XML SystemId + $icon +
+ The URI of an icon +
+ XML ID + $id +
+ The unique identifier with the schema for this + rule + element. +
+ SGML FPI + $fpi +
+ The Formal Public Identifier for this rule. +
+ IETF language + $lang +
+ The human language used in this rule, from + xml:lang +
+ URL + $see +
+ Link to documentation on WWW or file +
+ "preserve" | "default" + $space +
+ The value for xml:space +
+

+Linking properties:

+
+
XML NMTOKEN + $role +
+ A name for the generic role of this assertion. + The schema creator would have their own vocabulary. +
+ XPath + $subject +
+ A path relative to the current context to some + interesting node considered the subject. +

+
+

process-span

+

The process-span handles span elements, which are generic +elements for styling, like HTML's .

+
+
XML NMTOKEN $class +
+ An attribute that can be used for stylesheet style +

+
+

process-title

+

The process-title handles title elements, which are +generic elements for styling, like HTML's .

+
+
XML NMTOKEN $class +
+ An attribute that can be used for stylesheet style +
+

+By default, titles are handled by invocing process-p with +the parameter class with a value "title".

+
+

process-value-of

+

The process-value-of template handles value-of +elements, which are used in diagnostic messages to allow very +specific hinting .

+
+
XPath $select +
+ The path of some node that will be evaluated and printed.

+
+

Global Parameters

+

There are several global parameters that may be available for use. +However, it is not a requirement to follow these, and implementations +may not supply them with any value. So a test of +string-length(variable) < +0 is appropriate in each case.

+



+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Parameter

+
+

Value

+
+

Description

+
+

allow-foreign

+
+

"true" | "false" (default) +

+
+

Pass non-Schematron elements to the generated + stylesheet. Pass the Schematron elements span, emph and dir: to + the output SVRL. +

+
+

fileNameParameter

+
+

string

+
+

A parameter passed to the Validator and + potentially available as a variable in Schematron schemas as + $fileNameParameter

+
+

fileDirParameter

+
+

string

+
+

A parameter passed to the Validator and + potentially available as a variable in Schematron schemas as + $fileDirParameter

+
+

archiveNamePaameter

+
+

string

+
+

A parameter passed to the Validator and + potentially available as a variable in Schematron schemas as + $archiveNameParameter

+
+

archiveDirParameter

+
+

string

+
+

A parameter passed to the Validator and + potentially available as a variable in Schematron schemas as + $archivePathParameter

+
+

debug +

+
+

true” | “false” (default)

+
+

Verbose error messages (Note this may be + superceded by “verbose” at some stage in the future.)

+
+

generate-paths

+
+

true|false +

+
+

generate the SVRL @location attribute with XPaths

+
+

diagnose

+
+

yes | no +

+
+

Add the diagnostics to the assertion results

+
+

terminate

+
+

yes | no | true | false | assert +

+
+

Terminate on the first failed assertion or + successful report

+
+

message-newline +

+
+

"true" (default) | "false" +

+
+

Generate an extra newline at the end of messages

+
+

output-encoding

+
+

string

+
+

The encoding used for output, for example if the + output is XML

+
+
+
+
+ \ No newline at end of file diff --git a/content/schematron.xqm b/content/schematron.xqm index 754567d..a44c9b2 100644 --- a/content/schematron.xqm +++ b/content/schematron.xqm @@ -15,8 +15,9 @@ module namespace _ = "http://github.com/Schematron/schematron-exist"; declare namespace sch = "http://purl.oclc.org/dsdl/schematron"; declare namespace svrl = "http://purl.oclc.org/dsdl/svrl"; declare namespace xsl = "http://www.w3.org/1999/XSL/Transform"; +declare namespace xmldb = "http://exist-db.org/xquery/xmldb"; -declare variable $_:path := '/db/system/repo/schematron-exist/content/iso-schematron-2.0.0/'; +declare variable $_:path := '/db/system/repo/schematron-exist-2.0.0/content/iso-schematron/'; declare variable $_:include := $_:path || "iso_dsdl_include.xsl"; declare variable $_:expand := $_:path || "iso_abstract_expand.xsl"; diff --git a/expath-pkg.xml b/expath-pkg.xml index 3f5bfcb..a27cbbf 100644 --- a/expath-pkg.xml +++ b/expath-pkg.xml @@ -6,10 +6,9 @@ spec="1.0"> Schematron for eXist-db - - http://www.functx.com/functx.xsl - functx.xsl - + http://github.com/Schematron/schematron-exist schematron.xqm From bb73bc184df6d5f76b04885d0bec31711b06530a Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Fri, 21 Feb 2020 14:35:32 +0100 Subject: [PATCH 10/11] refactor(xqsuite): tests --- .gitignore | 3 +- .travis.yml | 6 +- build.xml | 16 ++- content/test/0003-no-fired-rules/0003.sch | 9 -- content/test/0003-no-fired-rules/0003.xml | 4 - content/test/0003-no-fired-rules/0003.xqm | 12 -- content/test/0004-phases/0004.sch | 30 ----- content/test/0004-phases/0004.xml | 2 - content/test/0004-phases/0004.xqm | 31 ----- content/test/0005-example-1/0005.xqm | 68 ---------- content/test/0005-example-1/example-1.sch | 26 ---- content/test/0005-example-1/example-1.xq | 39 ------ content/test/0005-example-1/example-1a.xml | 6 - content/test/0005-example-1/example-1b.xml | 5 - content/test/0005-example-1/example-1c.xml | 4 - .../0001-compile-validate/0001.xqm | 5 +- .../0002-basic-pass-fail/0002.xqm | 4 +- test/0003-no-fired-rules/0003.xqm | 31 +++++ test/0004-phases/0004.xqm | 71 ++++++++++ test/0005-example-1/0005.xqm | 123 ++++++++++++++++++ {content/test => test}/test-suite.xq | 0 {result => test}/test.bats | 9 +- 22 files changed, 249 insertions(+), 255 deletions(-) delete mode 100644 content/test/0003-no-fired-rules/0003.sch delete mode 100644 content/test/0003-no-fired-rules/0003.xml delete mode 100644 content/test/0003-no-fired-rules/0003.xqm delete mode 100644 content/test/0004-phases/0004.sch delete mode 100644 content/test/0004-phases/0004.xml delete mode 100644 content/test/0004-phases/0004.xqm delete mode 100644 content/test/0005-example-1/0005.xqm delete mode 100644 content/test/0005-example-1/example-1.sch delete mode 100644 content/test/0005-example-1/example-1.xq delete mode 100644 content/test/0005-example-1/example-1a.xml delete mode 100644 content/test/0005-example-1/example-1b.xml delete mode 100644 content/test/0005-example-1/example-1c.xml rename {content/test => test}/0001-compile-validate/0001.xqm (92%) rename {content/test => test}/0002-basic-pass-fail/0002.xqm (96%) create mode 100644 test/0003-no-fired-rules/0003.xqm create mode 100644 test/0004-phases/0004.xqm create mode 100644 test/0005-example-1/0005.xqm rename {content/test => test}/test-suite.xq (100%) rename {result => test}/test.bats (62%) diff --git a/.gitignore b/.gitignore index 5d76797..befb626 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ dist/ -result/*.xml +test/result/*.xml *.xpr +.notes.txt diff --git a/.travis.yml b/.travis.yml index 50c1a9b..f5c198f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,8 +40,8 @@ before_script: - sleep 30 - docker ps script: -- curl -s "http://0.0.0.0:8080/exist/rest/db/system/repo/schematron-exist-2.0.0/test/test-suite.xq" - -o test/result/test-result.xml -- bats -t test/*.bats + - curl -s "http://0.0.0.0:8080/exist/rest/db/system/repo/schematron-exist-2.0.0/test/test-suite.xq" -o test/result/test-result.xml + - bats -t test/*.bats + after_success: - docker stop exist-ci diff --git a/build.xml b/build.xml index 1a9fe6b..e6e9e38 100644 --- a/build.xml +++ b/build.xml @@ -9,23 +9,25 @@ - + + - + - - - - + + + + + - + diff --git a/content/test/0003-no-fired-rules/0003.sch b/content/test/0003-no-fired-rules/0003.sch deleted file mode 100644 index 717f44f..0000000 --- a/content/test/0003-no-fired-rules/0003.sch +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/content/test/0003-no-fired-rules/0003.xml b/content/test/0003-no-fired-rules/0003.xml deleted file mode 100644 index ce168ad..0000000 --- a/content/test/0003-no-fired-rules/0003.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/content/test/0003-no-fired-rules/0003.xqm b/content/test/0003-no-fired-rules/0003.xqm deleted file mode 100644 index e1c0043..0000000 --- a/content/test/0003-no-fired-rules/0003.xqm +++ /dev/null @@ -1,12 +0,0 @@ -module namespace _ = "0003"; - -import module namespace s = "http://github.com/Schematron/schematron-exist"; - -declare namespace test="http://exist-db.org/xquery/xqsuite"; - -(:~ Expect validation to fail if the Schematron doesn't match anything in the document. :) -declare %test:assertFalse function _:test() { - let $c := s:compile(doc('0003.sch')) - let $r := s:validate(doc('0003.xml'), $c) - return s:is-valid($r) -}; diff --git a/content/test/0004-phases/0004.sch b/content/test/0004-phases/0004.sch deleted file mode 100644 index 032b403..0000000 --- a/content/test/0004-phases/0004.sch +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - Pass Valid - - - - - - - - Fail Invalid - - - - - - \ No newline at end of file diff --git a/content/test/0004-phases/0004.xml b/content/test/0004-phases/0004.xml deleted file mode 100644 index 6cc709c..0000000 --- a/content/test/0004-phases/0004.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/content/test/0004-phases/0004.xqm b/content/test/0004-phases/0004.xqm deleted file mode 100644 index 3f42f4f..0000000 --- a/content/test/0004-phases/0004.xqm +++ /dev/null @@ -1,31 +0,0 @@ -module namespace _ = "0004"; - -import module namespace s = "http://github.com/Schematron/schematron-exist"; - -declare namespace test="http://exist-db.org/xquery/xqsuite"; - -declare %test:assertTrue function _:phase1() { - let $p := - let $s := s:compile(doc('0004.sch'), $p) - let $r := s:validate(doc('0004.xml'), $s) - return s:is-valid($r) -}; - -declare %test:assertFalse function _:phase2() { - let $p := - let $s := s:compile(doc('0004.sch'), $p) - let $r := s:validate(doc('0004.xml'), $s) - return s:is-valid($r) -}; - -declare %test:assertTrue function _:phase1string() { - let $s := s:compile(doc('0004.sch'), 'phase1') - let $r := s:validate(doc('0004.xml'), $s) - return s:is-valid($r) -}; - -declare %test:assertFalse function _:phase2string() { - let $s := s:compile(doc('0004.sch'), 'phase2') - let $r := s:validate(doc('0004.xml'), $s) - return s:is-valid($r) -}; diff --git a/content/test/0005-example-1/0005.xqm b/content/test/0005-example-1/0005.xqm deleted file mode 100644 index 76bfc82..0000000 --- a/content/test/0005-example-1/0005.xqm +++ /dev/null @@ -1,68 +0,0 @@ -module namespace _ = "0005"; - -import module namespace s = "http://github.com/Schematron/schematron-exist" at "../../schematron.xqm"; - -declare namespace test="http://exist-db.org/xquery/xqsuite"; - -declare %test:assertEquals( - 'false', - 'true', - 4, - 'info', - 'info', - 'warn', - 'error', - '/document/title', - 'short section has fewer than 3 paragraphs', - '/document/p[2]', - 'p (paragraph) should not be empty' - ) function _:example1a() { - let $sch := s:compile(doc('example-1.sch')) - let $svrl := s:validate(doc('example-1a.xml'), $sch) - return ( - s:is-valid($svrl), - s:has-messages($svrl), - count(s:messages($svrl)), - s:message-level(s:messages($svrl)[1]), - s:message-level(s:messages($svrl)[2]), - s:message-level(s:messages($svrl)[3]), - s:message-level(s:messages($svrl)[4]), - s:message-location(s:messages($svrl)[3]), - normalize-space(s:message-description(s:messages($svrl)[3])), - s:message-location(s:messages($svrl)[4]), - normalize-space(s:message-description(s:messages($svrl)[4])) - ) -}; - -declare %test:assertEquals( - 'true', - 'true', - 3, - 'info', - 'info', - 'warn', - '/document/title', - 'short section has fewer than 3 paragraphs' - ) function _:example1b() { - let $sch := s:compile(doc('example-1.sch')) - let $svrl := s:validate(doc('example-1b.xml'), $sch) - return ( - s:is-valid($svrl), - s:has-messages($svrl), - count(s:messages($svrl)), - s:message-level(s:messages($svrl)[1]), - s:message-level(s:messages($svrl)[2]), - s:message-level(s:messages($svrl)[3]), - s:message-location(s:messages($svrl)[3]), - normalize-space(s:message-description(s:messages($svrl)[3])) - ) -}; - -declare %test:assertEquals('true', 'false') function _:example1c() { - let $sch := s:compile(doc('example-1.sch')) - let $svrl := s:validate(doc('example-1c.xml'), $sch) - return ( - s:is-valid($svrl), - s:has-messages($svrl) - ) -}; diff --git a/content/test/0005-example-1/example-1.sch b/content/test/0005-example-1/example-1.sch deleted file mode 100644 index 962d2ef..0000000 --- a/content/test/0005-example-1/example-1.sch +++ /dev/null @@ -1,26 +0,0 @@ - - - - - title - paragraph - - - always true - - - always false - - - short section has fewer than 3 paragraphs - - - - - p (paragraph) should not be empty - - - - - \ No newline at end of file diff --git a/content/test/0005-example-1/example-1.xq b/content/test/0005-example-1/example-1.xq deleted file mode 100644 index bb4b051..0000000 --- a/content/test/0005-example-1/example-1.xq +++ /dev/null @@ -1,39 +0,0 @@ -import module namespace schematron = "http://github.com/Schematron/schematron-exist"; - -let $sch := schematron:compile(doc('example-1.sch')) -for $file in ('example-1a.xml', 'example-1b.xml', 'example-1c.xml') -let $svrl := schematron:validate(doc($file), $sch) -return ( - concat('*** ', $file, ' ***'), - if (schematron:is-valid($svrl)) then 'Valid!' else 'Not valid!', - if (schematron:has-messages($svrl)) then - for $message in schematron:messages($svrl) - return concat( - schematron:message-level($message) - , ': ', - schematron:message-description($message) - , ' (location: ', - schematron:message-location($message) - , ')' - ) - else 'No messages were reported' -) - -(: OUTPUT: - -*** example-1a.xml *** -Not valid! -info: always true (location: /document/title) -info: always false (location: /document/title) -warn: short section has fewer than 3 paragraphs (location: /document/title) -error: p (paragraph) should not be empty (location: /document/p[2]) -*** example-1b.xml *** -Valid! -info: always true (location: /document/title) -info: always false (location: /document/title) -warn: short section has fewer than 3 paragraphs (location: /document/title) -*** example-1c.xml *** -Valid! -No messages were reported - -:) diff --git a/content/test/0005-example-1/example-1a.xml b/content/test/0005-example-1/example-1a.xml deleted file mode 100644 index 71a8947..0000000 --- a/content/test/0005-example-1/example-1a.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - Schematron for eXist -

This is a test of running ISO Schematron in eXist

-

-
diff --git a/content/test/0005-example-1/example-1b.xml b/content/test/0005-example-1/example-1b.xml deleted file mode 100644 index a65aba0..0000000 --- a/content/test/0005-example-1/example-1b.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Schematron for eXist -

This is a test of running ISO Schematron in eXist

-
diff --git a/content/test/0005-example-1/example-1c.xml b/content/test/0005-example-1/example-1c.xml deleted file mode 100644 index 78c5fd6..0000000 --- a/content/test/0005-example-1/example-1c.xml +++ /dev/null @@ -1,4 +0,0 @@ - - -

This is a test of running ISO Schematron in eXist

-
diff --git a/content/test/0001-compile-validate/0001.xqm b/test/0001-compile-validate/0001.xqm similarity index 92% rename from content/test/0001-compile-validate/0001.xqm rename to test/0001-compile-validate/0001.xqm index a2dc334..a422662 100644 --- a/content/test/0001-compile-validate/0001.xqm +++ b/test/0001-compile-validate/0001.xqm @@ -8,6 +8,7 @@ declare namespace test="http://exist-db.org/xquery/xqsuite"; declare variable $_:schema := document { + }; @@ -18,7 +19,7 @@ declare variable $_:xml := document { declare %test:assertExists -%test:name('compile') +%test:name('compile empty schema') function _:compile() { let $c := s:compile($_:schema) return $c[self::xsl:stylesheet] @@ -26,7 +27,7 @@ function _:compile() { declare %test:assertExists -%test:name('validate') +%test:name('validate empty document') function _:validationResult() { let $c := s:compile($_:schema) let $r := s:validate($_:xml, $c) diff --git a/content/test/0002-basic-pass-fail/0002.xqm b/test/0002-basic-pass-fail/0002.xqm similarity index 96% rename from content/test/0002-basic-pass-fail/0002.xqm rename to test/0002-basic-pass-fail/0002.xqm index a44ee0a..1ecff17 100644 --- a/content/test/0002-basic-pass-fail/0002.xqm +++ b/test/0002-basic-pass-fail/0002.xqm @@ -38,7 +38,7 @@ declare variable $_:invalid := document { declare %test:assertTrue -%test:name('simple valid') +%test:name('simple pass') function _:valid() { let $r := s:validate($_:valid, s:compile($_:schema)) return s:is-valid($r) @@ -46,7 +46,7 @@ function _:valid() { declare %test:assertFalse -%test:name('simple invalid') +%test:name('simple fail') function _:invalid() { let $r := s:validate($_:invalid, s:compile($_:schema)) return s:is-valid($r) diff --git a/test/0003-no-fired-rules/0003.xqm b/test/0003-no-fired-rules/0003.xqm new file mode 100644 index 0000000..a708626 --- /dev/null +++ b/test/0003-no-fired-rules/0003.xqm @@ -0,0 +1,31 @@ +module namespace _ = "0003"; + +import module namespace s = "http://github.com/Schematron/schematron-exist"; + +declare namespace test="http://exist-db.org/xquery/xqsuite"; + +declare variable $_:schema := document { + + + + + + + +}; + +declare variable $_:xml := document { + + + +}; + +(:~ Expect validation to fail if the Schematron doesn't match anything in the document. :) +declare +%test:assertFalse +%test:name('No rules fail for 0 matches') +function _:test() { + let $c := s:compile($_:schema) + let $r := s:validate($_:xml, $c) + return s:is-valid($r) +}; diff --git a/test/0004-phases/0004.xqm b/test/0004-phases/0004.xqm new file mode 100644 index 0000000..d36354d --- /dev/null +++ b/test/0004-phases/0004.xqm @@ -0,0 +1,71 @@ +module namespace _ = "0004"; + +import module namespace s = "http://github.com/Schematron/schematron-exist"; + +declare namespace test="http://exist-db.org/xquery/xqsuite"; +declare variable $_:schema := document { + + + + + + + + + + + Pass Valid + + + + + + + Fail Invalid + + + + +}; + +declare variable $_:xml := document { + +}; + +declare +%test:assertTrue +%test:name('phase parameter pass') +function _:phase1() { + let $p := + let $s := s:compile($_:schema, $p) + let $r := s:validate($_:xml, $s) + return s:is-valid($r) +}; + +declare +%test:assertFalse +%test:name('phase parameter fail') +function _:phase2() { + let $p := + let $s := s:compile($_:schema, $p) + let $r := s:validate($_:xml, $s) + return s:is-valid($r) +}; + +declare +%test:assertTrue +%test:name('string parameter pass') +function _:phase1string() { + let $s := s:compile($_:schema, 'phase1') + let $r := s:validate($_:xml, $s) + return s:is-valid($r) +}; + +declare +%test:assertFalse +%test:name('string parameter fail') +function _:phase2string() { + let $s := s:compile($_:schema, 'phase2') + let $r := s:validate($_:xml, $s) + return s:is-valid($r) +}; diff --git a/test/0005-example-1/0005.xqm b/test/0005-example-1/0005.xqm new file mode 100644 index 0000000..9297bb7 --- /dev/null +++ b/test/0005-example-1/0005.xqm @@ -0,0 +1,123 @@ +module namespace _ = "0005"; + +import module namespace s = "http://github.com/Schematron/schematron-exist" at "../../schematron.xqm"; + +declare namespace test="http://exist-db.org/xquery/xqsuite"; + +declare variable $_:schema := document { + + + title + paragraph + + + always true + + + always false + + + short section has fewer than 3 paragraphs + + + + + p (paragraph) should not be empty + + + + +}; + +declare variable $_:xml1 := document { + + Schematron for eXist +

This is a test of running ISO Schematron in eXist

+

+ +}; + +declare variable $_:xml2 := document { + + Schematron for eXist +

This is a test of running ISO Schematron in eXist

+
+}; + +declare variable $_:xml3 := document { + +

This is a test of running ISO Schematron in eXist

+
+}; + +declare +%test:assertEquals( + 'false', + 'true', + 4, + 'info', + 'info', + 'warn', + 'error', + '/document/title', + 'short section has fewer than 3 paragraphs', + '/document/p[2]', + 'p (paragraph) should not be empty' + ) +%test:name('message has info, warn, and error') +function _:example1a() { + let $sch := s:compile($_:schema) + let $svrl := s:validate($_:xml1, $sch) + return ( + s:is-valid($svrl), + s:has-messages($svrl), + count(s:messages($svrl)), + s:message-level(s:messages($svrl)[1]), + s:message-level(s:messages($svrl)[2]), + s:message-level(s:messages($svrl)[3]), + s:message-level(s:messages($svrl)[4]), + s:message-location(s:messages($svrl)[3]), + normalize-space(s:message-description(s:messages($svrl)[3])), + s:message-location(s:messages($svrl)[4]), + normalize-space(s:message-description(s:messages($svrl)[4])) + ) +}; + +declare +%test:assertEquals( + 'true', + 'true', + 3, + 'info', + 'info', + 'warn', + '/document/title', + 'short section has fewer than 3 paragraphs' + ) +%test:name('valid with info and warning') +function _:example1b() { + let $sch := s:compile($_:schema) + let $svrl := s:validate($_:xml2, $sch) + return ( + s:is-valid($svrl), + s:has-messages($svrl), + count(s:messages($svrl)), + s:message-level(s:messages($svrl)[1]), + s:message-level(s:messages($svrl)[2]), + s:message-level(s:messages($svrl)[3]), + s:message-location(s:messages($svrl)[3]), + normalize-space(s:message-description(s:messages($svrl)[3])) + ) +}; + +declare +%test:assertEquals('true', 'false') +%test:name('validate schematron without messages') +function _:example1c() { + let $sch := s:compile($_:schema) + let $svrl := s:validate($_:xml3, $sch) + return ( + s:is-valid($svrl), + s:has-messages($svrl) + ) +}; diff --git a/content/test/test-suite.xq b/test/test-suite.xq similarity index 100% rename from content/test/test-suite.xq rename to test/test-suite.xq diff --git a/result/test.bats b/test/test.bats similarity index 62% rename from result/test.bats rename to test/test.bats index 649afa8..826bfb3 100644 --- a/result/test.bats +++ b/test/test.bats @@ -2,14 +2,15 @@ # https://github.com/bats-core/bats-core#printing-to-the-terminal -@test "Testuite reporte no failures" { - run xmllint --xpath '//@failures = 0' result/*.xml + +@test "Testuite reports no failures or errors" { + run xmllint --xpath '//@failures > 0 or //@errors > 0' test/result/*.xml [ "$status" -eq 0 ] [ "$output" = false ] } @test "No testcase failures" { - run xmllint --xpath "//failure/../../*" result/*.xml + run xmllint --xpath "//failure/../../*" test/result/*.xml for FAIL in ${output} do echo "# " ${FAIL} >&3 @@ -18,7 +19,7 @@ } @test "No testcase errors" { - run xmllint --xpath "//error/../../*" result/*.xml + run xmllint --xpath "//error/../../*" test/result/*.xml for ERR in ${output} do echo "# " ${ERR} >&3 From b5d5bbb75a32faeec0cce3aac2192a9db69159d3 Mon Sep 17 00:00:00 2001 From: Duncan Paterson Date: Sat, 22 Feb 2020 02:52:46 +0100 Subject: [PATCH 11/11] =?UTF-8?q?refactor(various):=20fix=20readme=20versi?= =?UTF-8?q?on,=20add=20xqdoc=20syntax,=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- build.xml | 2 +- content/schematron.xqm | 9 +++++++-- expath-pkg.xml | 37 +++++++++++++++++++++++-------------- 4 files changed, 33 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 61456a9..3702c9d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ XQuery library module to use ISO Schematron in [eXist](http://exist-db.org/). This module uses the standard Schematron implementation from [https://code.google.com/p/schematron/](https://code.google.com/p/schematron/). This module is a port of [schematron-basex](https://github.com/Schematron/schematron-basex) to eXist. ## Usage -Install the module in the way described in the eXist documentation. Go to the Dashboard and open the Package Manager. Click the add a package button, and then upload `schematron-exist-1.1.xar`. +Install the module in the way described in the eXist documentation. Go to the Dashboard and open the Package Manager. Click the add a package button, and then upload `schematron-exist.xar`. After the module is installed, in your XQuery code declare the module import: ```xquery @@ -65,7 +65,7 @@ To get the XPath location where a message was generated: Putting this all together: -``` +```xquery import module namespace schematron = "http://github.com/Schematron/schematron-exist"; let $sch := schematron:compile(doc('rules.sch')) diff --git a/build.xml b/build.xml index e6e9e38..3c28f35 100644 --- a/build.xml +++ b/build.xml @@ -17,7 +17,7 @@
- + diff --git a/content/schematron.xqm b/content/schematron.xqm index a44c9b2..6cd2338 100644 --- a/content/schematron.xqm +++ b/content/schematron.xqm @@ -7,7 +7,7 @@ xquery version "3.1"; : @see LICENSE (The MIT License) : @see http://exist-db.org/ : @see http://github.com/Schematron/schematron-exist - : @version 1.1.0 + : @version 2.0.0 :) module namespace _ = "http://github.com/Schematron/schematron-exist"; @@ -17,6 +17,7 @@ declare namespace svrl = "http://purl.oclc.org/dsdl/svrl"; declare namespace xsl = "http://www.w3.org/1999/XSL/Transform"; declare namespace xmldb = "http://exist-db.org/xquery/xmldb"; +(: TODO: make this a computed path :) declare variable $_:path := '/db/system/repo/schematron-exist-2.0.0/content/iso-schematron/'; declare variable $_:include := $_:path || "iso_dsdl_include.xsl"; @@ -30,6 +31,7 @@ declare variable $_:info := ('info', 'information'); (:~ : Compile a given Schematron file so that it can be used to validate documents. + : @return a compiled schematron file :) declare function _:compile($schematron) as node() { _:compile($schematron, () ) @@ -37,6 +39,7 @@ declare function _:compile($schematron) as node() { (:~ : Compile a given Schematron file using given parameters so that it can be used to validate documents. + : @return a compiled schematron file :) declare function _:compile($schematron, $params) as node() { let $p := typeswitch ($params) @@ -49,7 +52,8 @@ declare function _:compile($schematron, $params) as node() { }; (:~ - : Validate a given document using a compiled Schematron. Returns SVRL validation result. + : Validate a given document using a compiled Schematron. + : @return SVRL validation result. :) declare function _:validate($document as node(), $compiledSchematron as node()) as node() { transform:transform($document, $compiledSchematron, ()) @@ -57,6 +61,7 @@ declare function _:validate($document as node(), $compiledSchematron as node()) (:~ : Check whether a SVRL validation result indicates valid in a pass/fail sense. + : @return true if passing, fail otherwise :) declare function _:is-valid($svrl) as xs:boolean { boolean($svrl[descendant::svrl:fired-rule]) and diff --git a/expath-pkg.xml b/expath-pkg.xml index a27cbbf..c26843e 100644 --- a/expath-pkg.xml +++ b/expath-pkg.xml @@ -1,16 +1,25 @@ - - Schematron for eXist-db - - - - http://github.com/Schematron/schematron-exist - schematron.xqm - + + Schematron for eXist-db + + + http://github.com/Schematron/schematron-exist/iso_dsdl_include.xsl + iso_dsdl_include.xsl + + + http://github.com/Schematron/schematron-exist/iso_abstract_expand.xsl + iso_abstract_expand.xsl + + + http://github.com/Schematron/schematron-exist/iso_svrl_for_xslt1.xsl + iso_svrl_for_xslt1.xsl + + + http://github.com/Schematron/schematron-exist/iso_svrl_for_xslt2.xsl + iso_svrl_for_xslt2.xsl + + + http://github.com/Schematron/schematron-exist + schematron.xqm +