diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index b2f1bb8..d7710d6 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -10,10 +10,12 @@ jobs:
strategy:
matrix:
java: ["8", "17"]
- basex: ["9.7", "9.7.3", "11.5"]
+ basex: ["9.7", "9.7.3", "11.5", "12.2"]
exclude:
- basex: "11.5"
java: "8"
+ - basex: "12.2"
+ java: "8"
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
diff --git a/build.gradle b/build.gradle
index 7e2f260..61c3a0e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,7 +9,7 @@ repositories {
}
}
-def basexVersion = System.getenv('BASEX_VERSION') ?: "11.5"
+def basexVersion = System.getenv('BASEX_VERSION') ?: "12.2"
dependencies {
runtimeOnly "org.basex:basex:${basexVersion}"
diff --git a/test/xml-catalog-resolver-test.xqm b/test/xml-catalog-resolver-test.xqm
index e81c890..ae31120 100644
--- a/test/xml-catalog-resolver-test.xqm
+++ b/test/xml-catalog-resolver-test.xqm
@@ -135,6 +135,12 @@ declare %unit:test function resolverTest:parse-xml() {
let $examplexml := file:resolve-path("example.xml", $base)
let $result := resolver:parse-xml($examplexml, $catalog)
return unit:assert-equals($result, document{expansion from external DTD})
+ ,
+ let $base := file:base-dir()
+ let $catalog := file:resolve-path("catalog1.xml", $base)
+ let $examplexml := file:resolve-path("example.xml", $base) => unparsed-text()
+ let $result := resolver:parse-xml($examplexml, $catalog)
+ return unit:assert-equals($result, document{expansion from external DTD})
};
diff --git a/xml-catalog-resolver.xqm b/xml-catalog-resolver.xqm
index 974a6c8..c40ee83 100644
--- a/xml-catalog-resolver.xqm
+++ b/xml-catalog-resolver.xqm
@@ -2,7 +2,7 @@
: This module provides an XML Resolver for OASIS XML Catalogs entirely in XQuery.
: Use this module to resolve the location a DTD specified in a DOCTYPE before parsing XML.
:
- : Tested with BaseX versions 9.7.3 and 11.5
+ : Tested with BaseX versions 9.7.3, 11.5, and 12.2
: May work in other XQuery processors.
:
: @author Vincent Lizzi
@@ -170,11 +170,8 @@ declare function resolver:resolveURI($uri as xs:string, $catalog as xs:string) a
:)
declare function resolver:parse-xml($xml as xs:string, $catalog as xs:string) as document-node() {
let $temp := file:create-temp-file('xml-catalog-resolver', '.xml')
- let $raw := if ($xml castable as xs:anyURI) then unparsed-text($xml) else $xml
- let $resolved := resolver:resolveDOCTYPE($raw, $catalog)
return (
- file:write-text($temp, $resolved),
- (# db:dtd true #) (# db:intparse false #) { doc($temp) },
+ resolver:parse-xml($xml, $catalog, $temp),
file:delete($temp)
)
};
@@ -190,7 +187,7 @@ declare function resolver:parse-xml($xml as xs:string, $catalog as xs:string) as
: @return parsed XML document
:)
declare function resolver:parse-xml($xml as xs:string, $catalog as xs:string, $path as xs:string) as document-node() {
- let $raw := if ($xml castable as xs:anyURI) then unparsed-text($xml) else $xml
+ let $raw := if (starts-with($xml, '<')) then $xml else unparsed-text($xml)
let $resolved := resolver:resolveDOCTYPE($raw, $catalog)
return (
file:write-text($path, $resolved),