From 4c0119b87e408a418f02a0594ebf17231564f923 Mon Sep 17 00:00:00 2001 From: Radek Hubner Date: Thu, 30 Jun 2022 15:42:07 +0100 Subject: [PATCH 1/7] [feature] Allow lazy loading of buid-in modules. --- .../java/org/exist/util/Configuration.java | 32 +++++---- .../java/org/exist/xquery/XQueryContext.java | 18 ++++- exist-distribution/src/main/config/conf.xml | 66 +++++++++---------- schema/conf.xsd | 8 +++ 4 files changed, 79 insertions(+), 45 deletions(-) diff --git a/exist-core/src/main/java/org/exist/util/Configuration.java b/exist-core/src/main/java/org/exist/util/Configuration.java index c068f5e4e58..5afeba9a49b 100644 --- a/exist-core/src/main/java/org/exist/util/Configuration.java +++ b/exist-core/src/main/java/org/exist/util/Configuration.java @@ -393,11 +393,13 @@ private void configureXQuery( Element xquery ) throws DatabaseConfigurationExcep config.put( PerformanceStats.CONFIG_PROPERTY_TRACE, trace ); // built-in-modules - final Map> classMap = new HashMap<>(); - final Map knownMappings = new HashMap<>(); + final Map> eagerModuleClassMap = new HashMap<>(); + final Map> lazyModuleClassMap = new HashMap<>(); + final Map knownMappings = new HashMap<>(); final Map>> moduleParameters = new HashMap<>(); - loadModuleClasses(xquery, classMap, knownMappings, moduleParameters); - config.put( XQueryContext.PROPERTY_BUILT_IN_MODULES, classMap); + loadModuleClasses(xquery, eagerModuleClassMap, lazyModuleClassMap, knownMappings, moduleParameters); + config.put( XQueryContext.PROPERTY_BUILT_IN_MODULES, eagerModuleClassMap); + config.put( XQueryContext.PROPERTY_BUILT_IN_LAZY_MODULES, lazyModuleClassMap); config.put( XQueryContext.PROPERTY_STATIC_MODULE_MAP, knownMappings); config.put( XQueryContext.PROPERTY_MODULE_PARAMETERS, moduleParameters); } @@ -407,14 +409,15 @@ private void configureXQuery( Element xquery ) throws DatabaseConfigurationExcep * that the specified module class exists and is a subclass of {@link org.exist.xquery.Module}. * * @param xquery configuration root - * @param modulesClassMap map containing all classes of modules - * @param modulesSourceMap map containing all source uris to external resources + * @param eagerModuleClassMap map containing all classes of modules which are always loaded to XQueryContext + * @param lazyModuleClassMap map containing all classes of modules which are lazy loaded to XQueryContext only if they are explicitly imported + * @param modulesSourceMap map containing all source uris to external resources * * @throws DatabaseConfigurationException */ - private void loadModuleClasses( Element xquery, Map> modulesClassMap, Map modulesSourceMap, Map>> moduleParameters) throws DatabaseConfigurationException { + private void loadModuleClasses( Element xquery, Map> eagerModuleClassMap, Map> lazyModuleClassMap, Map modulesSourceMap, Map>> moduleParameters) throws DatabaseConfigurationException { // add the standard function module - modulesClassMap.put(Namespaces.XPATH_FUNCTIONS_NS, org.exist.xquery.functions.fn.FnModule.class); + eagerModuleClassMap.put(Namespaces.XPATH_FUNCTIONS_NS, org.exist.xquery.functions.fn.FnModule.class); // add other modules specified in configuration final NodeList builtins = xquery.getElementsByTagName(XQUERY_BUILTIN_MODULES_CONFIGURATION_MODULES_ELEMENT_NAME); @@ -436,6 +439,8 @@ private void loadModuleClasses( Element xquery, Map> modulesCla final String uri = elem.getAttribute(XQueryContext.BUILT_IN_MODULE_URI_ATTRIBUTE); final String clazz = elem.getAttribute(XQueryContext.BUILT_IN_MODULE_CLASS_ATTRIBUTE); final String source = elem.getAttribute(XQueryContext.BUILT_IN_MODULE_SOURCE_ATTRIBUTE); + final String load = elem.getAttribute(XQueryContext.BUILT_IN_MODULE_LOAD_ATTRIBUTE); + // uri attribute is the identifier and is always required if(uri == null) { @@ -447,6 +452,10 @@ private void loadModuleClasses( Element xquery, Map> modulesCla throw(new DatabaseConfigurationException("element 'module' requires either an attribute " + "'class' or 'src'" )); } + if(load != null && !("always".equals(load) || "lazily".equals(load))) { + throw(new DatabaseConfigurationException("parameter 'load' on module can contains only 'always' and 'lazily' values")); + } + if(source != null) { // Store src attribute info @@ -463,10 +472,11 @@ private void loadModuleClasses( Element xquery, Map> modulesCla final Class moduleClass = lookupModuleClass(uri, clazz); // Store class if thw module class actually exists - if( moduleClass != null) { - modulesClassMap.put(uri, moduleClass); + if( moduleClass != null && (load == null || "always".equals(load))) { + eagerModuleClassMap.put(uri, moduleClass); + }else if(moduleClass != null) { + lazyModuleClassMap.put(uri, moduleClass); } - if(LOG.isDebugEnabled()) { LOG.debug("Configured module '{}' implemented in '{}'", uri, clazz); } diff --git a/exist-core/src/main/java/org/exist/xquery/XQueryContext.java b/exist-core/src/main/java/org/exist/xquery/XQueryContext.java index 58281d6e164..76e7675aa0c 100644 --- a/exist-core/src/main/java/org/exist/xquery/XQueryContext.java +++ b/exist-core/src/main/java/org/exist/xquery/XQueryContext.java @@ -126,6 +126,8 @@ public class XQueryContext implements BinaryValueManager, Context { public static final String BUILT_IN_MODULE_URI_ATTRIBUTE = "uri"; public static final String BUILT_IN_MODULE_CLASS_ATTRIBUTE = "class"; public static final String BUILT_IN_MODULE_SOURCE_ATTRIBUTE = "src"; + public static final String BUILT_IN_MODULE_LOAD_ATTRIBUTE = "load"; + public static final String PROPERTY_XQUERY_BACKWARD_COMPATIBLE = "xquery.backwardCompatible"; public static final String PROPERTY_ENABLE_QUERY_REWRITING = "xquery.enable-query-rewriting"; @@ -134,7 +136,8 @@ public class XQueryContext implements BinaryValueManager, Context { public static final String PROPERTY_ENFORCE_INDEX_USE = "xquery.enforce-index-use"; //TODO : move elsewhere ? - public static final String PROPERTY_BUILT_IN_MODULES = "xquery.modules"; + public static final String PROPERTY_BUILT_IN_MODULES = "xquery.modules"; + public static final String PROPERTY_BUILT_IN_LAZY_MODULES = "xquery.modules.lazy"; public static final String PROPERTY_STATIC_MODULE_MAP = "xquery.modules.static"; public static final String PROPERTY_MODULE_PARAMETERS = "xquery.modules.parameters"; @@ -2512,6 +2515,19 @@ public Module[] importModule(@Nullable String namespaceURI, @Nullable String pre if (namespaceURI != null) { modules = getRootModules(namespaceURI); + + //Lazy load modules + if (modules == null) { + final Class moduleClass = (Class) ((Map) getConfiguration() + .getProperty(PROPERTY_BUILT_IN_LAZY_MODULES)) + .get(namespaceURI); + if(moduleClass != null) { + instantiateModule(namespaceURI, moduleClass , + (Map>>) getConfiguration().getProperty(PROPERTY_MODULE_PARAMETERS)); + + modules = getRootModules(namespaceURI); + } + } } if (isNotEmpty(modules)) { diff --git a/exist-distribution/src/main/config/conf.xml b/exist-distribution/src/main/config/conf.xml index 5de51f24943..205c7748fdd 100644 --- a/exist-distribution/src/main/config/conf.xml +++ b/exist-distribution/src/main/config/conf.xml @@ -948,21 +948,21 @@ - - + + - + - + - + - + @@ -972,10 +972,10 @@ - - - - + + + + @@ -984,23 +984,23 @@ - + - - - - - - + + + + + + - + - - - - - + + + + + - - - - - + + + + + - + - + diff --git a/schema/conf.xsd b/schema/conf.xsd index 3dcb1c275fe..f821b16dc1b 100644 --- a/schema/conf.xsd +++ b/schema/conf.xsd @@ -370,6 +370,14 @@ + + + + + + + + From 4766e97e4b590890ac429026fa123fad4efd33ff Mon Sep 17 00:00:00 2001 From: Radek Hubner Date: Wed, 6 Jul 2022 11:12:30 +0100 Subject: [PATCH 2/7] [feature] Enable lazy loading for unit tests, fix bugs. --- .../src/main/java/org/exist/xquery/ModuleContext.java | 5 +++++ .../src/main/java/org/exist/xquery/XQueryContext.java | 4 ++-- .../org/exist/test/runner/xquery-test-runner.xq | 2 ++ exist-core/src/test/resources-filtered/conf.xml | 10 +++++----- exist-core/src/test/xquery/securitymanager/account.xqm | 2 +- exist-core/src/test/xquery/securitymanager/id.xqm | 4 +++- exist-core/src/test/xquery/serialization.xml | 2 +- exist-core/src/test/xquery/validation/jaxv.xql | 2 ++ exist-core/src/test/xquery/xinclude/xinclude.xml | 2 ++ exist-core/src/test/xquery/xmldb/copy-tests.xql | 2 ++ exist-core/src/test/xquery/xmldb/permission-tests.xql | 1 + 11 files changed, 26 insertions(+), 10 deletions(-) diff --git a/exist-core/src/main/java/org/exist/xquery/ModuleContext.java b/exist-core/src/main/java/org/exist/xquery/ModuleContext.java index 5b18c962e94..3c28b5f857b 100644 --- a/exist-core/src/main/java/org/exist/xquery/ModuleContext.java +++ b/exist-core/src/main/java/org/exist/xquery/ModuleContext.java @@ -208,6 +208,11 @@ public Module[] getModules(final String namespaceURI) { return modules; } + @Override + public void addModule(String namespaceURI, Module module) { + parentContext.addModule(namespaceURI, module); + } + @Override protected void setRootModules(final String namespaceURI, final Module[] modules) { parentContext.setRootModules(namespaceURI, modules); diff --git a/exist-core/src/main/java/org/exist/xquery/XQueryContext.java b/exist-core/src/main/java/org/exist/xquery/XQueryContext.java index 76e7675aa0c..9c85ff6dde7 100644 --- a/exist-core/src/main/java/org/exist/xquery/XQueryContext.java +++ b/exist-core/src/main/java/org/exist/xquery/XQueryContext.java @@ -1763,8 +1763,8 @@ Module initBuiltInModule(final String namespaceURI, final String moduleClass) { declareNamespace(module.getDefaultPrefix(), module.getNamespaceURI()); } - modules.compute(module.getNamespaceURI(), addToMapValueArray(module)); - allModules.compute(module.getNamespaceURI(), addToMapValueArray(module)); + this.addModule(module.getNamespaceURI(), module); + this.addRootModule(module.getNamespaceURI(), module); if (module instanceof InternalModule) { ((InternalModule) module).prepare(this); diff --git a/exist-core/src/main/resources/org/exist/test/runner/xquery-test-runner.xq b/exist-core/src/main/resources/org/exist/test/runner/xquery-test-runner.xq index dc34eabc7e3..cb3c0aee3f4 100644 --- a/exist-core/src/main/resources/org/exist/test/runner/xquery-test-runner.xq +++ b/exist-core/src/main/resources/org/exist/test/runner/xquery-test-runner.xq @@ -24,6 +24,8 @@ xquery version "3.1"; import module namespace test = "http://exist-db.org/xquery/xqsuite" at "resource:org/exist/xquery/lib/xqsuite/xqsuite.xql"; +import module namespace inspect = "http://exist-db.org/xquery/inspection"; + declare variable $test-module-uri as xs:anyURI external; (: hooks for sending external notifications about test events :) diff --git a/exist-core/src/test/resources-filtered/conf.xml b/exist-core/src/test/resources-filtered/conf.xml index 7ccbc595154..8c220f60a45 100644 --- a/exist-core/src/test/resources-filtered/conf.xml +++ b/exist-core/src/test/resources-filtered/conf.xml @@ -896,18 +896,18 @@ - + - + - - + + - + diff --git a/exist-core/src/test/xquery/securitymanager/account.xqm b/exist-core/src/test/xquery/securitymanager/account.xqm index e39b61db069..45e714ea4ab 100644 --- a/exist-core/src/test/xquery/securitymanager/account.xqm +++ b/exist-core/src/test/xquery/securitymanager/account.xqm @@ -24,7 +24,7 @@ xquery version "3.1"; module namespace account = "http://exist-db.org/test/securitymanager/account"; declare namespace test = "http://exist-db.org/xquery/xqsuite"; -declare namespace sm = "http://exist-db.org/xquery/securitymanager"; +import module namespace sm = "http://exist-db.org/xquery/securitymanager"; declare %test:assertFalse diff --git a/exist-core/src/test/xquery/securitymanager/id.xqm b/exist-core/src/test/xquery/securitymanager/id.xqm index cb995847829..08e49e10108 100644 --- a/exist-core/src/test/xquery/securitymanager/id.xqm +++ b/exist-core/src/test/xquery/securitymanager/id.xqm @@ -25,7 +25,8 @@ module namespace id = "http://exist-db.org/test/securitymanager/id"; declare namespace test = "http://exist-db.org/xquery/xqsuite"; declare namespace mod1 = "http://module1"; -declare namespace sm = "http://exist-db.org/xquery/securitymanager"; +import module namespace inspect = "http://exist-db.org/xquery/inspection"; +import module namespace sm = "http://exist-db.org/xquery/securitymanager"; declare variable $id:TEST_COLLECTION_NAME := "test-id"; declare variable $id:TEST_COLLECTION_PATH := "/db/test-id"; @@ -38,6 +39,7 @@ function id:setup() { xmldb:store($id:TEST_COLLECTION_PATH, $id:TEST_MODULE_NAME, 'xquery version "3.0"; module namespace mod1 = "http://module1"; +import module namespace sm = "http://exist-db.org/xquery/securitymanager"; declare function mod1:function1() { {sm:id()} diff --git a/exist-core/src/test/xquery/serialization.xml b/exist-core/src/test/xquery/serialization.xml index 1644a972ab6..e0950eff98b 100644 --- a/exist-core/src/test/xquery/serialization.xml +++ b/exist-core/src/test/xquery/serialization.xml @@ -45,7 +45,7 @@ some value comments and xsl diff --git a/exist-core/src/test/xquery/validation/jaxv.xql b/exist-core/src/test/xquery/validation/jaxv.xql index 21a81afb2f9..6902549ad80 100644 --- a/exist-core/src/test/xquery/validation/jaxv.xql +++ b/exist-core/src/test/xquery/validation/jaxv.xql @@ -25,6 +25,8 @@ module namespace val ="http://exist-db.org/xquery/test/validation"; declare namespace test="http://exist-db.org/xquery/xqsuite"; +import module namespace validation = "http://exist-db.org/xquery/validation"; + declare variable $val:XML := 20 30 diff --git a/exist-core/src/test/xquery/xinclude/xinclude.xml b/exist-core/src/test/xquery/xinclude/xinclude.xml index 542751cfa11..ceb02077265 100644 --- a/exist-core/src/test/xquery/xinclude/xinclude.xml +++ b/exist-core/src/test/xquery/xinclude/xinclude.xml @@ -175,6 +175,7 @@ XInclude applied before XSLT step XInclude applied before XSLT step 2 Date: Tue, 12 Jul 2022 10:08:18 +0100 Subject: [PATCH 3/7] [feature] Lazy loading modules - fix tests. --- ...ectionConfigurationValidationModeTest.java | 10 ++++-- .../exist/xquery/ForwardReferenceTest.java | 1 + .../java/org/exist/xquery/XQueryTest.java | 2 +- .../functions/transform/TransformTest.java | 1 + .../validate/AdditionalJingXsdRngTest.java | 12 ++++--- .../validate/JaxpDtdCatalogTest.java | 22 ++++++++---- .../functions/validate/JaxpParseTest.java | 10 ++++-- .../validate/JaxpXsdCatalogTest.java | 34 +++++++++++++------ .../xquery/functions/validate/JaxvTest.java | 15 +++++--- .../functions/validate/JingOnvdlTest.java | 21 ++++++++---- .../functions/validate/JingRelaxNgTest.java | 27 ++++++++++----- .../validate/JingSchematronTest.java | 15 +++++--- .../functions/validate/JingXsdTest.java | 12 ++++--- .../functions/validate/ParseDtdTestNOK.java | 12 ++++--- .../functions/validate/ParseXsdTestNOK.java | 3 +- .../src/test/resources-filtered/conf.xml | 4 +-- 16 files changed, 136 insertions(+), 65 deletions(-) diff --git a/exist-core/src/test/java/org/exist/validation/CollectionConfigurationValidationModeTest.java b/exist-core/src/test/java/org/exist/validation/CollectionConfigurationValidationModeTest.java index 067dddf305f..f86aa75823e 100644 --- a/exist-core/src/test/java/org/exist/validation/CollectionConfigurationValidationModeTest.java +++ b/exist-core/src/test/java/org/exist/validation/CollectionConfigurationValidationModeTest.java @@ -55,12 +55,18 @@ public class CollectionConfigurationValidationModeTest { @AfterClass public static void tearDownClass() throws Exception { - existEmbeddedServer.executeQuery("validation:clear-grammar-cache()"); + existEmbeddedServer.executeQuery( + "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:clear-grammar-cache()" + ); } @Before public void setUp() throws Exception { - existEmbeddedServer.executeQuery("validation:clear-grammar-cache()"); + existEmbeddedServer.executeQuery( + "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:clear-grammar-cache()" + ); } private void createCollection(final String collection) throws XMLDBException { diff --git a/exist-core/src/test/java/org/exist/xquery/ForwardReferenceTest.java b/exist-core/src/test/java/org/exist/xquery/ForwardReferenceTest.java index ffd47489159..349b79c667b 100644 --- a/exist-core/src/test/java/org/exist/xquery/ForwardReferenceTest.java +++ b/exist-core/src/test/java/org/exist/xquery/ForwardReferenceTest.java @@ -141,6 +141,7 @@ public void test1() throws EXistException, PermissionDeniedException, IOExceptio "\n" + "import module namespace xqsuite = \"http://exist-db.org/xquery/xqsuite\"\n" + " at \"resource:org/exist/xquery/lib/xqsuite/xqsuite.xql\";\n" + + "import module namespace inspect = \"http://exist-db.org/xquery/inspection\";" + "\n" + "xqsuite:suite((\n" + " inspect:module-functions(xs:anyURI(\"xmldb:exist://" + TEST_PAGES_MODULE_URI + "\"))\n" + diff --git a/exist-core/src/test/java/org/exist/xquery/XQueryTest.java b/exist-core/src/test/java/org/exist/xquery/XQueryTest.java index 0cdab78b2d0..a16ef029aa0 100644 --- a/exist-core/src/test/java/org/exist/xquery/XQueryTest.java +++ b/exist-core/src/test/java/org/exist/xquery/XQueryTest.java @@ -922,7 +922,7 @@ public void namespaceWithTransform() throws XMLDBException { String query = "xquery version \"1.0\";\n" + - "declare namespace transform=\"http://exist-db.org/xquery/transform\";\n" + + "import module namespace transform=\"http://exist-db.org/xquery/transform\";\n" + "declare variable $xml {\n" + " text\n" + "};\n" + diff --git a/exist-core/src/test/java/org/exist/xquery/functions/transform/TransformTest.java b/exist-core/src/test/java/org/exist/xquery/functions/transform/TransformTest.java index 3b34abf7b6d..6faa682bc60 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/transform/TransformTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/transform/TransformTest.java @@ -132,6 +132,7 @@ public class TransformTest { "xquery version \"3.0\";\n" + "\n" + "(:Read document with xsl:for-each and look for key in the dictionary document :)\n" + + "import module namespace transform = \"http://exist-db.org/xquery/transform\";\n" + "declare variable $xsltPath as xs:string := '" + TEST_IDS_COLLECTION.getCollectionPath() + "';\n" + "declare variable $listOpsFileUri as xs:string := '" + TEST_IDS_COLLECTION.getCollectionPath()+ "/listOpsErr.xml';\n" + "declare variable $inputFileUri as xs:string := '" + TEST_IDS_COLLECTION.getCollectionPath() + "/inputListOps.xml';\n" + diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/AdditionalJingXsdRngTest.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/AdditionalJingXsdRngTest.java index 985ac4b6c6a..a3830ae06eb 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/AdditionalJingXsdRngTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/AdditionalJingXsdRngTest.java @@ -43,7 +43,8 @@ public class AdditionalJingXsdRngTest { @Test public void testValidateXSDwithJing() throws XMLDBException { - final String query = "let $v := \n" + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "let $v := \n" + "\tTitle\n" + "\t

Some paragraph.

\n" + "
\n" + @@ -71,7 +72,8 @@ public void testValidateXSDwithJing() throws XMLDBException { @Test public void testValidateXSDwithJing_invalid() throws XMLDBException { - final String query = "let $v := \n" + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "let $v := \n" + "\tTitle\n" + "\t

Some paragraph.

\n" + "
\n" + @@ -99,7 +101,8 @@ public void testValidateXSDwithJing_invalid() throws XMLDBException { @Test public void testValidateRNGwithJing() throws XPathException, XMLDBException { - final String query = "let $v := \n" + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "let $v := \n" + "\tTitle\n" + "\t

Some paragraph.

\n" + "
\n" + @@ -139,7 +142,8 @@ public void testValidateRNGwithJing() throws XPathException, XMLDBException { @Test public void testValidateRNGwithJing_invalid() throws XMLDBException { - final String query = "let $v := \n" + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "let $v := \n" + "\tTitle\n" + "\t

Some paragraph.

\n" + "
\n" + diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpDtdCatalogTest.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpDtdCatalogTest.java index fb7673ed7f1..4a701905763 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpDtdCatalogTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpDtdCatalogTest.java @@ -118,7 +118,9 @@ public static void prepareResources() throws Exception { @Before public void clearGrammarCache() throws XMLDBException { - final ResourceSet results = existEmbeddedServer.executeQuery("validation:clear-grammar-cache()"); + final ResourceSet results = existEmbeddedServer.executeQuery( + "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:clear-grammar-cache()"); results.getResource(0).getContent(); } @@ -127,7 +129,8 @@ public void clearGrammarCache() throws XMLDBException { */ @Test public void dtd_stored_catalog_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/parse/instance/valid-dtd.xml'), false()," + "doc('/db/parse/catalog.xml') )"; executeAndEvaluate(query,"valid"); @@ -135,7 +138,8 @@ public void dtd_stored_catalog_valid() throws XMLDBException, SAXException, Xpat @Test public void dtd_stored_catalog_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/parse/instance/invalid-dtd.xml'), false()," + "doc('/db/parse/catalog.xml') )"; executeAndEvaluate(query,"invalid"); @@ -143,7 +147,8 @@ public void dtd_stored_catalog_invalid() throws XMLDBException, SAXException, Xp @Test public void dtd_anyURI_catalog_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/parse/instance/valid-dtd.xml'), false()," + "xs:anyURI('/db/parse/catalog.xml') )"; executeAndEvaluate(query,"valid"); @@ -151,7 +156,8 @@ public void dtd_anyURI_catalog_valid() throws XMLDBException, SAXException, Xpat @Test public void dtd_anyURI_catalog_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/parse/instance/invalid-dtd.xml'), false()," + "xs:anyURI('/db/parse/catalog.xml') )"; executeAndEvaluate(query,"invalid"); @@ -165,7 +171,8 @@ public void dtd_anyURI_catalog_invalid() throws XMLDBException, SAXException, Xp */ @Test public void dtd_searched_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/parse/instance/valid-dtd.xml'), false()," + "xs:anyURI('/db/parse/') )"; executeAndEvaluate(query,"valid"); @@ -173,7 +180,8 @@ public void dtd_searched_valid() throws XMLDBException, SAXException, XpathExcep @Test public void dtd_searched_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/parse/instance/invalid-dtd.xml'), false()," + "xs:anyURI('/db/parse/') )"; executeAndEvaluate(query,"invalid"); diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpParseTest.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpParseTest.java index 38e75889b47..0e4d21daff1 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpParseTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpParseTest.java @@ -90,17 +90,21 @@ public static void prepareResources() throws Exception { @Before public void clearGrammarCache() throws XMLDBException { - final ResourceSet results = existEmbeddedServer.executeQuery("validation:clear-grammar-cache()"); + final ResourceSet results = existEmbeddedServer.executeQuery( + "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:clear-grammar-cache()"); results.getResource(0).getContent(); } @Test public void parse_and_fill_defaults() throws XMLDBException, IOException, SAXException { - String query = "validation:pre-parse-grammar(xs:anyURI('/db/parse_validate/defaultValue.xsd'))"; + String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:pre-parse-grammar(xs:anyURI('/db/parse_validate/defaultValue.xsd'))"; String result = execute(query); assertEquals(result, "defaultTest"); - query = "declare option exist:serialize 'indent=no'; " + + query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "declare option exist:serialize 'indent=no'; " + "validation:jaxp-parse(xs:anyURI('/db/parse_validate/defaultValue.xml'), true(), ())"; result = execute(query); diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpXsdCatalogTest.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpXsdCatalogTest.java index c32adf425b4..9f5ebb598f7 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpXsdCatalogTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxpXsdCatalogTest.java @@ -124,13 +124,16 @@ public static void prepareResources() throws XMLDBException, IOException, URISyn @Before public void clearGrammarCache() throws XMLDBException { - final ResourceSet results = existEmbeddedServer.executeQuery("validation:clear-grammar-cache()"); + final ResourceSet results = existEmbeddedServer.executeQuery( + "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:clear-grammar-cache()"); results.getResource(0).getContent(); } @Test public void xsd_stored_catalog_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "doc('/db/parse/instance/valid.xml'), false()," + "doc('/db/parse/catalog.xml') )"; executeAndEvaluate(query,"valid"); @@ -138,7 +141,8 @@ public void xsd_stored_catalog_valid() throws XMLDBException, SAXException, Xpat @Test public void xsd_stored_catalog_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "doc('/db/parse/instance/invalid.xml'), false()," + "doc('/db/parse/catalog.xml') )"; executeAndEvaluate(query,"invalid"); @@ -146,7 +150,8 @@ public void xsd_stored_catalog_invalid() throws XMLDBException, SAXException, Xp @Test public void xsd_anyURI_catalog_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/parse/instance/valid.xml'), false()," + "xs:anyURI('/db/parse/catalog.xml') )"; executeAndEvaluate(query,"valid"); @@ -154,7 +159,8 @@ public void xsd_anyURI_catalog_valid() throws XMLDBException, SAXException, Xpat @Test public void xsd_anyURI_catalog_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/parse/instance/invalid.xml'), false()," + "xs:anyURI('/db/parse/catalog.xml') )"; executeAndEvaluate(query,"invalid"); @@ -162,7 +168,8 @@ public void xsd_anyURI_catalog_invalid() throws XMLDBException, SAXException, Xp @Test public void xsd_searched_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "doc('/db/parse/instance/valid.xml'), false()," + "xs:anyURI('/db/parse/') )"; executeAndEvaluate(query,"valid"); @@ -170,7 +177,8 @@ public void xsd_searched_valid() throws XMLDBException, SAXException, XpathExcep @Test public void xsd_searched_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "doc('/db/parse/instance/invalid.xml'), false()," + "xs:anyURI('/db/parse/') )"; executeAndEvaluate(query,"invalid"); @@ -179,7 +187,8 @@ public void xsd_searched_invalid() throws XMLDBException, SAXException, XpathExc // test boolean function @Test public void xsd_searched_valid_boolean() throws XMLDBException { - final String query = "validation:jaxp( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp( " + "doc('/db/parse/instance/valid.xml'), false()," + "xs:anyURI('/db/parse/') )"; assertEquals("true", existEmbeddedServer.executeOneValue(query)); @@ -188,7 +197,8 @@ public void xsd_searched_valid_boolean() throws XMLDBException { // test boolean function @Test public void xsd_searched_invalid_boolean() throws XMLDBException { - final String query = "validation:jaxp( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp( " + "doc('/db/parse/instance/invalid.xml'), false()," + "xs:anyURI('/db/parse/') )"; assertEquals("false", existEmbeddedServer.executeOneValue(query)); @@ -197,7 +207,8 @@ public void xsd_searched_invalid_boolean() throws XMLDBException { // test parse function @Test public void xsd_searched_parse_valid() throws SAXException, IOException, XpathException, XMLDBException { - final String query = "validation:jaxp-parse( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-parse( " + "doc('/db/parse/instance/valid.xml'), false()," + "xs:anyURI('/db/parse/') )"; final String r = existEmbeddedServer.executeOneValue(query); @@ -207,7 +218,8 @@ public void xsd_searched_parse_valid() throws SAXException, IOException, XpathEx // test parse function @Test public void xsd_searched_parse_invalid() throws SAXException, IOException, XpathException, XMLDBException { - final String query = "validation:jaxp-parse( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-parse( " + "doc('/db/parse/instance/invalid.xml'), false()," + "xs:anyURI('/db/parse/') )"; final String r = existEmbeddedServer.executeOneValue(query); diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxvTest.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxvTest.java index 321811e64be..9b5e19a0841 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxvTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/JaxvTest.java @@ -89,7 +89,8 @@ public static void prepareResources() throws Exception { @Test public void xsd_stored_valid() throws XMLDBException { - final String query = "validation:jaxv( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxv( " + "doc('/db/personal/personal-valid.xml'), " + "doc('/db/personal/personal.xsd') )"; @@ -101,7 +102,8 @@ public void xsd_stored_valid() throws XMLDBException { @Test public void xsd_stored_report_valid() throws XMLDBException, SAXException, IOException, XpathException { - final String query = "validation:jaxv-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxv-report( " + "doc('/db/personal/personal-valid.xml'), " + "doc('/db/personal/personal.xsd') )"; @@ -114,7 +116,8 @@ public void xsd_stored_report_valid() throws XMLDBException, SAXException, IOExc @Test public void xsd_stored_invalid() throws XMLDBException, SAXException, IOException, XpathException { - final String query = "validation:jaxv-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxv-report( " + "doc('/db/personal/personal-invalid.xml'), " + "doc('/db/personal/personal.xsd') )"; @@ -127,7 +130,8 @@ public void xsd_stored_invalid() throws XMLDBException, SAXException, IOExceptio @Test public void xsd_anyuri_valid() throws XMLDBException, SAXException, IOException, XpathException { - final String query = "validation:jaxv-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxv-report( " + "xs:anyURI('xmldb:exist:///db/personal/personal-valid.xml'), " + "xs:anyURI('xmldb:exist:///db/personal/personal.xsd') )"; @@ -140,7 +144,8 @@ public void xsd_anyuri_valid() throws XMLDBException, SAXException, IOException, @Test public void xsd_anyuri_invalid() throws XMLDBException, SAXException, IOException, XpathException { - final String query = "validation:jaxv-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxv-report( " + "xs:anyURI('xmldb:exist:///db/personal/personal-invalid.xml'), " + "xs:anyURI('xmldb:exist:///db/personal/personal.xsd') )"; diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/JingOnvdlTest.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/JingOnvdlTest.java index 893a89de7fd..da59faa5d0f 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/JingOnvdlTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/JingOnvdlTest.java @@ -96,7 +96,8 @@ public void setUp() throws Exception { @Test public void onvdl_valid() throws XPathException, IOException, XpathException, SAXException, XMLDBException { - final String query = "let $a := " + XML_DATA1 + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "let $a := " + XML_DATA1 + "let $b := xs:anyURI('/db/validate-test/test.nvdl')" + "return " + "validation:jing-report($a,$b)"; @@ -105,7 +106,8 @@ public void onvdl_valid() throws XPathException, IOException, XpathException, SA @Test public void onvdl_invalid() throws XPathException, IOException, XpathException, SAXException, XMLDBException { - final String query = "let $a := " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "let $a := " + "let $b := xs:anyURI('/db/validate-test/test.nvdl')" + "return " + "validation:jing-report($a,$b)"; @@ -115,7 +117,8 @@ public void onvdl_invalid() throws XPathException, IOException, XpathException, @Test public void onvdl_stored_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/validate-test/valid.xml'), " + "doc('/db/validate-test/test.nvdl') )"; executeAndEvaluate(query,"valid"); @@ -123,7 +126,8 @@ public void onvdl_stored_valid() throws XMLDBException, SAXException, XpathExcep @Test public void onvdl_stored_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/validate-test/invalid.xml'), " + "doc('/db/validate-test/test.nvdl') )"; executeAndEvaluate(query,"invalid"); @@ -131,7 +135,8 @@ public void onvdl_stored_invalid() throws XMLDBException, SAXException, XpathExc @Test public void onvdl_anyuri_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "xs:anyURI('xmldb:exist:///db/validate-test/valid.xml'), " + "xs:anyURI('xmldb:exist:///db/validate-test/test.nvdl') )"; executeAndEvaluate(query,"valid"); @@ -139,7 +144,8 @@ public void onvdl_anyuri_valid() throws XMLDBException, SAXException, XpathExcep @Test public void onvdl_anyuri_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "xs:anyURI('xmldb:exist:///db/validate-test/invalid.xml'), " + "xs:anyURI('xmldb:exist:///db/validate-test/test.nvdl') )"; executeAndEvaluate(query,"invalid"); @@ -147,7 +153,8 @@ public void onvdl_anyuri_invalid() throws XMLDBException, SAXException, XpathExc @Test public void onvdl_anyuri_valid_boolean() throws XMLDBException { - final String query = "validation:jing( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing( " + "xs:anyURI('xmldb:exist:///db/validate-test/valid.xml'), " + "xs:anyURI('xmldb:exist:///db/validate-test/test.nvdl') )"; diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/JingRelaxNgTest.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/JingRelaxNgTest.java index 7ad50d0c933..4e08168b883 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/JingRelaxNgTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/JingRelaxNgTest.java @@ -88,7 +88,8 @@ public static void prepareResources() throws XMLDBException, IOException { @Test public void rng_stored_valid_boolean() throws XMLDBException { - final String query = "validation:jing( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing( " + "doc('/db/personal/personal-valid.xml'), " + "doc('/db/personal/personal.rng') )"; final ResourceSet results = existEmbeddedServer.executeQuery(query); @@ -99,7 +100,8 @@ public void rng_stored_valid_boolean() throws XMLDBException { @Test public void rng_stored_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/personal/personal-valid.xml'), " + "doc('/db/personal/personal.rng') )"; executeAndEvaluate(query,"valid"); @@ -107,7 +109,8 @@ public void rng_stored_valid() throws XMLDBException, SAXException, XpathExcepti @Test public void rng_stored_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/personal/personal-invalid.xml'), " + "doc('/db/personal/personal.rng') )"; executeAndEvaluate(query,"invalid"); @@ -115,7 +118,8 @@ public void rng_stored_invalid() throws XMLDBException, SAXException, XpathExcep @Test public void rng_anyuri_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "xs:anyURI('xmldb:exist:///db/personal/personal-valid.xml'), " + "xs:anyURI('xmldb:exist:///db/personal/personal.rng') )"; executeAndEvaluate(query,"valid"); @@ -123,7 +127,8 @@ public void rng_anyuri_valid() throws XMLDBException, SAXException, XpathExcepti @Test public void rng_anyuri_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "xs:anyURI('xmldb:exist:///db/personal/personal-invalid.xml'), " + "xs:anyURI('xmldb:exist:///db/personal/personal.rng') )"; executeAndEvaluate(query,"invalid"); @@ -131,7 +136,8 @@ public void rng_anyuri_invalid() throws XMLDBException, SAXException, XpathExcep @Test public void rnc_stored_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/personal/personal-valid.xml'), " + "util:binary-doc('/db/personal/personal.rnc') )"; executeAndEvaluate(query,"valid"); @@ -139,7 +145,8 @@ public void rnc_stored_valid() throws XMLDBException, SAXException, XpathExcepti @Test public void rnc_stored_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/personal/personal-invalid.xml'), " + "util:binary-doc('/db/personal/personal.rnc') )"; executeAndEvaluate(query,"invalid"); @@ -147,14 +154,16 @@ public void rnc_stored_invalid() throws XMLDBException, SAXException, XpathExcep @Test public void rnc_anyuri_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( xs:anyURI('xmldb:exist:///db/personal/personal-valid.xml'), " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( xs:anyURI('xmldb:exist:///db/personal/personal-valid.xml'), " + "xs:anyURI('xmldb:exist:///db/personal/personal.rnc') )"; executeAndEvaluate(query,"valid"); } @Test public void rnc_anyuri_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( xs:anyURI('xmldb:exist:///db/personal/personal-invalid.xml'), " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( xs:anyURI('xmldb:exist:///db/personal/personal-invalid.xml'), " + "xs:anyURI('xmldb:exist:///db/personal/personal.rnc') )"; executeAndEvaluate(query,"invalid"); } diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/JingSchematronTest.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/JingSchematronTest.java index e1eb29c8f46..a1a49325c28 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/JingSchematronTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/JingSchematronTest.java @@ -90,7 +90,8 @@ public static void prepareResources() throws Exception { @Test public void sch_15_stored_valid() throws XMLDBException, SAXException, XpathException, IOException { - String query = "validation:jing-report( " + + String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/tournament/1.5/Tournament-valid.xml'), " + "doc('/db/tournament/1.5/tournament-schema.sch') )"; @@ -99,7 +100,8 @@ public void sch_15_stored_valid() throws XMLDBException, SAXException, XpathExce @Test public void sch_15_stored_valid_boolean() throws XMLDBException { - final String query = "validation:jing( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing( " + "doc('/db/tournament/1.5/Tournament-valid.xml'), " + "doc('/db/tournament/1.5/tournament-schema.sch') )"; @@ -113,7 +115,8 @@ public void sch_15_stored_valid_boolean() throws XMLDBException { @Test public void sch_15_stored_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/tournament/1.5/Tournament-invalid.xml'), " + "doc('/db/tournament/1.5/tournament-schema.sch') )"; executeAndEvaluate(query,"invalid"); @@ -121,7 +124,8 @@ public void sch_15_stored_invalid() throws XMLDBException, SAXException, XpathEx @Test public void sch_15_anyuri_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "xs:anyURI('xmldb:exist:///db/tournament/1.5/Tournament-valid.xml'), " + "xs:anyURI('xmldb:exist:///db/tournament/1.5/tournament-schema.sch') )"; executeAndEvaluate(query,"valid"); @@ -129,7 +133,8 @@ public void sch_15_anyuri_valid() throws XMLDBException, SAXException, XpathExce @Test public void sch_15_anyuri_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "xs:anyURI('xmldb:exist:///db/tournament/1.5/Tournament-invalid.xml'), " + "xs:anyURI('xmldb:exist:///db/tournament/1.5/tournament-schema.sch') )"; executeAndEvaluate(query,"invalid"); diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/JingXsdTest.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/JingXsdTest.java index dac900ffc04..1fcf54ce2e5 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/JingXsdTest.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/JingXsdTest.java @@ -91,7 +91,8 @@ public static void prepareResources() throws XMLDBException, URISyntaxException, @Test public void xsd_stored_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/personal/personal-valid.xml'), " + "doc('/db/personal/personal.xsd') )"; executeAndEvaluate(query,"valid"); @@ -99,7 +100,8 @@ public void xsd_stored_valid() throws XMLDBException, SAXException, XpathExcepti @Test public void xsd_stored_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "doc('/db/personal/personal-invalid.xml'), " + "doc('/db/personal/personal.xsd') )"; executeAndEvaluate(query,"invalid"); @@ -107,7 +109,8 @@ public void xsd_stored_invalid() throws XMLDBException, SAXException, XpathExcep @Test public void xsd_anyuri_valid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "xs:anyURI('xmldb:exist:///db/personal/personal-valid.xml'), " + "xs:anyURI('xmldb:exist:///db/personal/personal.xsd') )"; executeAndEvaluate(query, "valid"); @@ -115,7 +118,8 @@ public void xsd_anyuri_valid() throws XMLDBException, SAXException, XpathExcepti @Test public void xsd_anyuri_invalid() throws XMLDBException, SAXException, XpathException, IOException { - final String query = "validation:jing-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jing-report( " + "xs:anyURI('xmldb:exist:///db/personal/personal-invalid.xml'), " + "xs:anyURI('xmldb:exist:///db/personal/personal.xsd') )"; executeAndEvaluate(query,"invalid"); diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/ParseDtdTestNOK.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/ParseDtdTestNOK.java index 6f7265033c4..c79361ec533 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/ParseDtdTestNOK.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/ParseDtdTestNOK.java @@ -101,7 +101,8 @@ public static void prepareResources() throws Exception { @Test public void xsd_stored_valid() throws XMLDBException, SAXException, IOException, XpathException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "doc('/db/hamlet/hamlet_valid.xml'), " + "xs:anyURI('/db/hamlet/dtd/hamlet.dtd'), () )"; @@ -114,7 +115,8 @@ public void xsd_stored_valid() throws XMLDBException, SAXException, IOException, @Test public void xsd_stored_invalid() throws XMLDBException, SAXException, IOException, XpathException { - final String query = "validation:jaxp-report(doc('/db/hamlet/hamlet_invalid.xml'), " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report(doc('/db/hamlet/hamlet_invalid.xml'), " + "xs:anyURI('/db/hamlet/dtd/hamlet.dtd'), () )"; final ResourceSet results = existEmbeddedServer.executeQuery(query); @@ -126,7 +128,8 @@ public void xsd_stored_invalid() throws XMLDBException, SAXException, IOExceptio @Test public void xsd_anyuri_valid() throws XMLDBException, SAXException, IOException, XpathException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/hamlet/hamlet_valid.xml'), " + "xs:anyURI('/db/hamlet/dtd/hamlet.dtd'), () )"; @@ -139,7 +142,8 @@ public void xsd_anyuri_valid() throws XMLDBException, SAXException, IOException, @Test public void xsd_anyuri_invalid() throws XMLDBException, SAXException, IOException, XpathException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "xs:anyURI('/db/hamlet/hamlet_invalid.xml'), " + "xs:anyURI('/db/hamlet/dtd/hamlet.dtd'), () )"; diff --git a/exist-core/src/test/java/org/exist/xquery/functions/validate/ParseXsdTestNOK.java b/exist-core/src/test/java/org/exist/xquery/functions/validate/ParseXsdTestNOK.java index 291285e45e2..cb3d27abd09 100644 --- a/exist-core/src/test/java/org/exist/xquery/functions/validate/ParseXsdTestNOK.java +++ b/exist-core/src/test/java/org/exist/xquery/functions/validate/ParseXsdTestNOK.java @@ -89,7 +89,8 @@ public static void prepareResources() throws Exception { @Test public void xsd_stored_valid() throws XMLDBException, SAXException, IOException, XpathException { - final String query = "validation:jaxp-report( " + + final String query = "import module namespace validation = \"http://exist-db.org/xquery/validation\";\n" + + "validation:jaxp-report( " + "doc('/db/addressbook/addressbook_valid.xml'), " + "xs:anyURI('/db/addressbook/addressbook.xsd'), () )"; diff --git a/exist-core/src/test/resources-filtered/conf.xml b/exist-core/src/test/resources-filtered/conf.xml index 8c220f60a45..7370fe58a2a 100644 --- a/exist-core/src/test/resources-filtered/conf.xml +++ b/exist-core/src/test/resources-filtered/conf.xml @@ -899,9 +899,9 @@ - + - + From 99824e48222791ce7c384c53511db52001bc9adb Mon Sep 17 00:00:00 2001 From: Radek Hubner Date: Tue, 12 Jul 2022 15:52:20 +0100 Subject: [PATCH 4/7] [bugfix] - Load module only to appropriate context. --- exist-core/src/main/java/org/exist/xquery/ModuleContext.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/exist-core/src/main/java/org/exist/xquery/ModuleContext.java b/exist-core/src/main/java/org/exist/xquery/ModuleContext.java index 3c28b5f857b..5b18c962e94 100644 --- a/exist-core/src/main/java/org/exist/xquery/ModuleContext.java +++ b/exist-core/src/main/java/org/exist/xquery/ModuleContext.java @@ -208,11 +208,6 @@ public Module[] getModules(final String namespaceURI) { return modules; } - @Override - public void addModule(String namespaceURI, Module module) { - parentContext.addModule(namespaceURI, module); - } - @Override protected void setRootModules(final String namespaceURI, final Module[] modules) { parentContext.setRootModules(namespaceURI, modules); From a4fc7ace22858c5ec98b089c1359f600e71e72f7 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 3 Aug 2022 23:14:07 +0200 Subject: [PATCH 5/7] [ignore] Fix formatting --- exist-core/src/main/java/org/exist/util/Configuration.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exist-core/src/main/java/org/exist/util/Configuration.java b/exist-core/src/main/java/org/exist/util/Configuration.java index 5afeba9a49b..80d3aa83ad4 100644 --- a/exist-core/src/main/java/org/exist/util/Configuration.java +++ b/exist-core/src/main/java/org/exist/util/Configuration.java @@ -471,10 +471,10 @@ private void loadModuleClasses( Element xquery, Map> eagerModul // Get class of module final Class moduleClass = lookupModuleClass(uri, clazz); - // Store class if thw module class actually exists - if( moduleClass != null && (load == null || "always".equals(load))) { + // Store class if the module class actually exists + if(moduleClass != null && (load == null || "always".equals(load))) { eagerModuleClassMap.put(uri, moduleClass); - }else if(moduleClass != null) { + } else if(moduleClass != null) { lazyModuleClassMap.put(uri, moduleClass); } if(LOG.isDebugEnabled()) { From d434d6cfcb3f6f5a4464ad383b535d8252e55b8e Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 5 Oct 2022 22:02:59 +0200 Subject: [PATCH 6/7] [refactor] Switch terms from 'lazily'/'always' to 'lazy'/'eager' --- .../java/org/exist/util/Configuration.java | 6 +- .../java/org/exist/xquery/XQueryContext.java | 2 + .../src/test/resources-filtered/conf.xml | 6 +- exist-distribution/src/main/config/conf.xml | 66 +++++++++---------- schema/conf.xsd | 4 +- 5 files changed, 43 insertions(+), 41 deletions(-) diff --git a/exist-core/src/main/java/org/exist/util/Configuration.java b/exist-core/src/main/java/org/exist/util/Configuration.java index 80d3aa83ad4..b7457d60087 100644 --- a/exist-core/src/main/java/org/exist/util/Configuration.java +++ b/exist-core/src/main/java/org/exist/util/Configuration.java @@ -452,8 +452,8 @@ private void loadModuleClasses( Element xquery, Map> eagerModul throw(new DatabaseConfigurationException("element 'module' requires either an attribute " + "'class' or 'src'" )); } - if(load != null && !("always".equals(load) || "lazily".equals(load))) { - throw(new DatabaseConfigurationException("parameter 'load' on module can contains only 'always' and 'lazily' values")); + if (load != null && !(XQueryContext.BUILT_IN_MODULE_LOAD_ATTRIBUTE_VALUE_EAGER.equals(load) || XQueryContext.BUILT_IN_MODULE_LOAD_ATTRIBUTE_VALUE_LAZY.equals(load))) { + throw new DatabaseConfigurationException(String.format("parameter '{}' on module can only contain the value: '{}' or '{}'", XQueryContext.BUILT_IN_MODULE_LOAD_ATTRIBUTE, XQueryContext.BUILT_IN_MODULE_LOAD_ATTRIBUTE_VALUE_EAGER, XQueryContext.BUILT_IN_MODULE_LOAD_ATTRIBUTE_VALUE_LAZY)); } if(source != null) { @@ -472,7 +472,7 @@ private void loadModuleClasses( Element xquery, Map> eagerModul final Class moduleClass = lookupModuleClass(uri, clazz); // Store class if the module class actually exists - if(moduleClass != null && (load == null || "always".equals(load))) { + if(moduleClass != null && (load == null || BUILT_IN_MODULE_LOAD_ATTRIBUTE_VALUE_EAGER.equals(load))) { eagerModuleClassMap.put(uri, moduleClass); } else if(moduleClass != null) { lazyModuleClassMap.put(uri, moduleClass); diff --git a/exist-core/src/main/java/org/exist/xquery/XQueryContext.java b/exist-core/src/main/java/org/exist/xquery/XQueryContext.java index 9c85ff6dde7..d886c1009f0 100644 --- a/exist-core/src/main/java/org/exist/xquery/XQueryContext.java +++ b/exist-core/src/main/java/org/exist/xquery/XQueryContext.java @@ -127,6 +127,8 @@ public class XQueryContext implements BinaryValueManager, Context { public static final String BUILT_IN_MODULE_CLASS_ATTRIBUTE = "class"; public static final String BUILT_IN_MODULE_SOURCE_ATTRIBUTE = "src"; public static final String BUILT_IN_MODULE_LOAD_ATTRIBUTE = "load"; + public static final String BUILT_IN_MODULE_LOAD_ATTRIBUTE_VALUE_EAGER = "eager"; + public static final String BUILT_IN_MODULE_LOAD_ATTRIBUTE_VALUE_LAZY = "lazy"; public static final String PROPERTY_XQUERY_BACKWARD_COMPATIBLE = "xquery.backwardCompatible"; diff --git a/exist-core/src/test/resources-filtered/conf.xml b/exist-core/src/test/resources-filtered/conf.xml index 7370fe58a2a..2988babcfea 100644 --- a/exist-core/src/test/resources-filtered/conf.xml +++ b/exist-core/src/test/resources-filtered/conf.xml @@ -896,18 +896,18 @@ - + - + - + diff --git a/exist-distribution/src/main/config/conf.xml b/exist-distribution/src/main/config/conf.xml index 205c7748fdd..9f54594ac42 100644 --- a/exist-distribution/src/main/config/conf.xml +++ b/exist-distribution/src/main/config/conf.xml @@ -948,21 +948,21 @@ - - + + - + - + - + - + @@ -972,10 +972,10 @@ - - - - + + + + @@ -984,23 +984,23 @@ - + - - - - - - + + + + + + - + - - - - - + + + + + - - - - - + + + + + - + - + diff --git a/schema/conf.xsd b/schema/conf.xsd index f821b16dc1b..31b16feb8a7 100644 --- a/schema/conf.xsd +++ b/schema/conf.xsd @@ -373,8 +373,8 @@ - - + + From 99fb337311bd690d81ecfe5bc4bda527de32fa3d Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Wed, 5 Oct 2022 22:05:47 +0200 Subject: [PATCH 7/7] [refactor] Set the default to eagerly load modules to preserve backwards compatibility --- .../main/java/org/exist/util/Configuration.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/exist-core/src/main/java/org/exist/util/Configuration.java b/exist-core/src/main/java/org/exist/util/Configuration.java index b7457d60087..aba85ae1f52 100644 --- a/exist-core/src/main/java/org/exist/util/Configuration.java +++ b/exist-core/src/main/java/org/exist/util/Configuration.java @@ -472,13 +472,16 @@ private void loadModuleClasses( Element xquery, Map> eagerModul final Class moduleClass = lookupModuleClass(uri, clazz); // Store class if the module class actually exists - if(moduleClass != null && (load == null || BUILT_IN_MODULE_LOAD_ATTRIBUTE_VALUE_EAGER.equals(load))) { - eagerModuleClassMap.put(uri, moduleClass); - } else if(moduleClass != null) { - lazyModuleClassMap.put(uri, moduleClass); - } - if(LOG.isDebugEnabled()) { - LOG.debug("Configured module '{}' implemented in '{}'", uri, clazz); + if (moduleClass != null) { + if (XQueryContext.BUILT_IN_MODULE_LOAD_ATTRIBUTE_VALUE_LAZY.equals(load)) { + lazyModuleClassMap.put(uri, moduleClass); + } else { + eagerModuleClassMap.put(uri, moduleClass); + } + + if (LOG.isDebugEnabled()) { + LOG.debug("Configured module '{}' implemented in '{}'", uri, clazz); + } } }