From eb5d960043e282edc35ada7f4ecdf28c0f34e631 Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 3 Jun 2022 13:39:55 +0200 Subject: [PATCH 001/110] SNAPSHOT bump Made $name optional in xhtml:Input named template --- pom.xml | 2 +- .../com/atomgraph/client/xsl/bootstrap/2.3.2/resource.xsl | 4 ++-- .../static/com/atomgraph/client/xsl/imports/default.xsl | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 866aa0b9..5c7f9462 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.49-SNAPSHOT + 3.1.50-SNAPSHOT ${packaging.type} AtomGraph Web-Client diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/resource.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/resource.xsl index f8e992cb..21fd2b3b 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/resource.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/resource.xsl @@ -268,8 +268,8 @@ exclude-result-prefixes="#all"> - - + +
diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/imports/default.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/imports/default.xsl index 0de1f63d..27f8e186 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/imports/default.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/imports/default.xsl @@ -508,10 +508,10 @@ exclude-result-prefixes="#all"> - + @@ -519,13 +519,16 @@ exclude-result-prefixes="#all"> - + + + + From c1f75fe010fecd3980b8734e227c2211d173d897 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 13 Jun 2022 14:46:05 +0200 Subject: [PATCH 002/110] [maven-release-plugin] prepare release client-3.1.50 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5c7f9462..3eac5ab4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.50-SNAPSHOT + 3.1.50 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.50 From e14239d1e8c06353424547c34f542ae50c308050 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 13 Jun 2022 14:46:08 +0200 Subject: [PATCH 003/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3eac5ab4..835c11a3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.50 + 3.1.51-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.50 + client-2.1.2 From 36a897338379c4ef0ec956adc63c4b6498c11a9c Mon Sep 17 00:00:00 2001 From: Martynas Date: Mon, 20 Jun 2022 14:35:06 +0200 Subject: [PATCH 004/110] Removed sioc.xsl $type-label check moved within bs2:FormControl --- .../xsl/bootstrap/2.3.2/external-layout.xsl | 1 - .../xsl/bootstrap/2.3.2/imports/default.xsl | 86 +++++++++---------- .../xsl/bootstrap/2.3.2/imports/foaf.xsl | 18 ++-- .../xsl/bootstrap/2.3.2/imports/sioc.xsl | 65 -------------- .../client/xsl/bootstrap/2.3.2/imports/sp.xsl | 6 +- .../xsl/bootstrap/2.3.2/internal-layout.xsl | 1 - 6 files changed, 56 insertions(+), 121 deletions(-) delete mode 100644 src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/sioc.xsl diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/external-layout.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/external-layout.xsl index 1056a600..5075069c 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/external-layout.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/external-layout.xsl @@ -57,7 +57,6 @@ exclude-result-prefixes="#all"> - diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/default.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/default.xsl index 6798d74f..2a0cac23 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/default.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/default.xsl @@ -126,18 +126,18 @@ exclude-result-prefixes="#all"> - - - - - + + + + + + - - + @@ -178,10 +178,10 @@ exclude-result-prefixes="#all"> - - - - + + + + @@ -201,17 +201,17 @@ exclude-result-prefixes="#all"> - - - - + + + + + - - + Literal @@ -231,17 +231,17 @@ exclude-result-prefixes="#all"> - - - - + + + + + - - + Resource @@ -260,18 +260,18 @@ exclude-result-prefixes="#all"> - - - - - + + + + + + - - + Language @@ -290,18 +290,18 @@ exclude-result-prefixes="#all"> - - - - - + + + + + + - - + Datatype @@ -340,19 +340,19 @@ exclude-result-prefixes="#all"> - - - - + + + + + - - + Resource diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/foaf.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/foaf.xsl index 32cd646a..4dc0bb37 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/foaf.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/foaf.xsl @@ -41,10 +41,11 @@ exclude-result-prefixes="#all"> - - - - + + + + + @@ -61,10 +62,11 @@ exclude-result-prefixes="#all"> - - - - + + + + + \ No newline at end of file diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/sioc.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/sioc.xsl deleted file mode 100644 index 876c6e6c..00000000 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/sioc.xsl +++ /dev/null @@ -1,65 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/sp.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/sp.xsl index 52693e65..b8296a12 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/sp.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/sp.xsl @@ -33,9 +33,9 @@ exclude-result-prefixes="#all"> - - - + + + diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/internal-layout.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/internal-layout.xsl index a008048a..2d0e2e94 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/internal-layout.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/internal-layout.xsl @@ -50,7 +50,6 @@ exclude-result-prefixes="#all"> - From b770e6b36e250ddbcf3164efe91af3e96cad59c1 Mon Sep 17 00:00:00 2001 From: Martynas Date: Mon, 20 Jun 2022 14:57:53 +0200 Subject: [PATCH 005/110] SNAPSHOT bump Removed the right sioc.xsl import --- pom.xml | 2 +- .../atomgraph/client/xsl/bootstrap/2.3.2/internal-layout.xsl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 835c11a3..67daaf03 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.51-SNAPSHOT + 3.1.52-SNAPSHOT ${packaging.type} AtomGraph Web-Client diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/internal-layout.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/internal-layout.xsl index 2d0e2e94..81cf4dd8 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/internal-layout.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/internal-layout.xsl @@ -50,12 +50,12 @@ exclude-result-prefixes="#all"> + - From 5c25c1c3f95e01d89333475372320c072f638036 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 20 Jun 2022 15:22:07 +0200 Subject: [PATCH 006/110] [maven-release-plugin] prepare release client-3.1.52 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 67daaf03..dfcb87b7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.52-SNAPSHOT + 3.1.52 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.52 From 8e4b854fca9b82673ca3b676481a592ee678a917 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 20 Jun 2022 15:22:11 +0200 Subject: [PATCH 007/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index dfcb87b7..eefed9b4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.52 + 3.1.53-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.52 + client-2.1.2 From 4346d5c375f0cffdf94343d5940cc0d0c4636579 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Wed, 22 Jun 2022 12:05:00 +0200 Subject: [PATCH 008/110] [maven-release-plugin] prepare release client-3.1.53 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index eefed9b4..4e66a116 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.53-SNAPSHOT + 3.1.53 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.53 From a8c9224b37446ec162d9fd05f1d7b6053c97085d Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Wed, 22 Jun 2022 12:05:04 +0200 Subject: [PATCH 009/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4e66a116..2a5ee7e9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.53 + 3.1.54-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.53 + client-2.1.2 From 4375d3a1d5e04906049198a8bdb5a07d2ee1000f Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 9 Sep 2022 01:05:51 +0200 Subject: [PATCH 010/110] Fixed DataTable XSLT converted by removing grouping of $properties --- .../xsl/converters/RDFXML2DataTable.xsl | 29 +++++-------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl index 77c0c294..12422342 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl @@ -59,25 +59,12 @@ exclude-result-prefixes="xs"> - - - - - - - - - - - - - - - - - - - + + + + + + { "cols": [ @@ -148,8 +135,8 @@ exclude-result-prefixes="xs"> - - + + { "v": null } From 8f5ca4f4570b44551a6af5e65696c2f996411141 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Fri, 9 Sep 2022 10:09:31 +0200 Subject: [PATCH 011/110] [maven-release-plugin] prepare release client-3.1.54 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 2a5ee7e9..4dc87207 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.54-SNAPSHOT + 3.1.54 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.54 From 99962d318bbac7ab5f9df03b0d9473b0bcf489de Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Fri, 9 Sep 2022 10:09:35 +0200 Subject: [PATCH 012/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4dc87207..4c8983a3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.54 + 3.1.55-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.54 + client-2.1.2 From 7543434650b605060eead4e110e3b32441139ebb Mon Sep 17 00:00:00 2001 From: Martynas Date: Mon, 12 Sep 2022 22:54:19 +0200 Subject: [PATCH 013/110] RDF/XML to DataTable converter optimized and refactored using XSLT 3.0 JSON/XML elements --- .../xsl/converters/RDFXML2DataTable.xsl | 317 +++++++++--------- 1 file changed, 154 insertions(+), 163 deletions(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl index 12422342..93fd279f 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl @@ -20,196 +20,187 @@ limitations under the License. ]> - - - - - - - - - - - - - - - - - - - - - - - -{ - "cols": [ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - { - "id": "", - "type": "string" - } + + + + + string + - - , - - - - - , - + + + + + + + - ], - "rows": [ + + + - + - ] -} - - - - - - - - - { - "id": "", - "label": "", - "type": - " - number - date - timeofday - string" - } - , - - - - - - - - - - - - { - "c": [ + + + + + + + + + + + + + + + + + number + date + timeofday + string + + + + + + + + + + + + + + + - { - "v": - } + + + - , - - + + + + - - + + + + - { "v": null } + + null + - - , - - ] - } - , + + + + + + + + + + + + + + + + Date(, , ) + + + + Date(, , , , , ) + + + + + + + + + + - - - - - + + - - { - "v": - } - , - - - - - - - - - - - - - "Date(, , )" - - - - "Date(, , , , , )" - - - - [ , , - - , - - ] - - - - "" - - - - "" - - - - - " - - - - - - " - - + + + - - "" - + + + \ No newline at end of file From fbbcd4d5391722d8cfd752f69330d9b383a65c3d Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 12 Sep 2022 23:04:23 +0200 Subject: [PATCH 014/110] [maven-release-plugin] prepare release client-3.1.55 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4c8983a3..52a7adcd 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.55-SNAPSHOT + 3.1.55 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.55 From 99e8d6aef3344deb73660aa242e73de8edefe779 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 12 Sep 2022 23:04:50 +0200 Subject: [PATCH 015/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 52a7adcd..493b7ba1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.55 + 3.1.56-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.55 + client-2.1.2 From 3f832808141ee76ffb6f143aa81dba1e8f2fdc7d Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 12 Sep 2022 23:25:15 +0200 Subject: [PATCH 016/110] [maven-release-plugin] prepare release client-3.1.56 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 493b7ba1..04288dc5 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.56-SNAPSHOT + 3.1.56 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.56 From 4375fec3924538aae299dc3a31dd8eab31b76e11 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 12 Sep 2022 23:25:19 +0200 Subject: [PATCH 017/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 04288dc5..6d7c44d8 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.56 + 3.1.57-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.56 + client-2.1.2 From a6698dfb6a1c1043dc7882399c29b6ec84c647af Mon Sep 17 00:00:00 2001 From: Martynas Date: Tue, 13 Sep 2022 00:53:22 +0200 Subject: [PATCH 018/110] SPARQLXMLResults2DataTable converter optimized and refactored using XSLT 3.0 JSON/XML instructions Support for booleans and numbers in RDFXML2DataTable --- .../xsl/converters/RDFXML2DataTable.xsl | 18 +- .../converters/SPARQLXMLResults2DataTable.xsl | 283 +++++++++--------- 2 files changed, 157 insertions(+), 144 deletions(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl index 93fd279f..9cdb79a8 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl @@ -156,7 +156,7 @@ exclude-result-prefixes="xs"> - null + @@ -175,6 +175,14 @@ exclude-result-prefixes="xs"> + + + + + + + + Date(, , ) @@ -185,12 +193,12 @@ exclude-result-prefixes="xs"> - - - + + + - + diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl index 6dd5de12..fbe28281 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl @@ -21,7 +21,7 @@ limitations under the License. ]> - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + string + string + number + date + timeofday + string - -{ - "cols": [ ], - "rows": [ - - - - ] -} - - - - - - { - "id": "", - "label": "", - "type": - " - string - string - number - date - timeofday - string" - } - , - - - - - - - - - { - "c": [ - - - - - - - - - { "v": null } - - - - , - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Date(, , ) + + + + Date(, , , , , ) + + + + + + + - ] - } - , - - - - - - - { - "v": - } - , - - - - - - - - - - - - - "Date(, , )" - - - - "Date(, , , , , )" - - - - [ , , - - , - - ] - - - - "" - - - - "" - + + + + + + + + + + + + + \ No newline at end of file From 4408120e83437209389762e48e4055a03410d7b4 Mon Sep 17 00:00:00 2001 From: Martynas Date: Tue, 13 Sep 2022 01:01:00 +0200 Subject: [PATCH 019/110] SNAPSHOT bump --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4c8983a3..bbefe12a 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.55-SNAPSHOT + 3.1.58-SNAPSHOT ${packaging.type} AtomGraph Web-Client From 5fa8747765b3c3380cb1a0945162b0a67796d2e4 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Tue, 13 Sep 2022 11:25:23 +0200 Subject: [PATCH 020/110] [maven-release-plugin] prepare release client-3.1.58 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index bbefe12a..e7f7ae70 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.58-SNAPSHOT + 3.1.58 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.58 From 30ed700ee28f74ef435e87e6c7f264efaf75bdef Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Tue, 13 Sep 2022 11:25:27 +0200 Subject: [PATCH 021/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e7f7ae70..2f53fd13 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.58 + 3.1.59-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.58 + client-2.1.2 From e81bc753fd3684943dbf33b56e448b585096478c Mon Sep 17 00:00:00 2001 From: Martynas Date: Tue, 13 Sep 2022 11:33:47 +0200 Subject: [PATCH 022/110] Minor XSLT optimization --- .../client/xsl/converters/SPARQLXMLResults2DataTable.xsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl index fbe28281..ac9b14b7 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl @@ -97,7 +97,7 @@ exclude-result-prefixes="#all"> - + string string From d4923f24e15b55e97927ca51d93b04ce1f4da8b4 Mon Sep 17 00:00:00 2001 From: Martynas Date: Tue, 13 Sep 2022 12:52:42 +0200 Subject: [PATCH 023/110] Fixed ac:DataTable output when $resource-ids are provided. Sort values by the order of $properties if provided. --- .../com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl index 9cdb79a8..2bd79018 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl @@ -65,7 +65,8 @@ exclude-result-prefixes="xs"> - + + @@ -138,7 +139,7 @@ exclude-result-prefixes="xs"> - + From 1c3c76510e569c4b0ded3271806b69bcb1cc13e5 Mon Sep 17 00:00:00 2001 From: Martynas Date: Tue, 13 Sep 2022 13:56:23 +0200 Subject: [PATCH 024/110] SNAPSHOT bump Fixed ordering by properties and output of null values --- pom.xml | 2 +- .../xsl/converters/RDFXML2DataTable.xsl | 61 ++++++++++++------- .../converters/SPARQLXMLResults2DataTable.xsl | 2 +- 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/pom.xml b/pom.xml index 2f53fd13..c60f9597 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.59-SNAPSHOT + 3.1.60-SNAPSHOT ${packaging.type} AtomGraph Web-Client diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl index 2bd79018..613d82b9 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl @@ -64,17 +64,34 @@ exclude-result-prefixes="xs"> - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -149,18 +166,18 @@ exclude-result-prefixes="xs"> - - - + + + - - - - - - - - + + + + + + + + diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl index ac9b14b7..7e1d7142 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl @@ -65,7 +65,7 @@ exclude-result-prefixes="#all"> - + From 9c564c399b70028567b5489de6d26cad11ca79d2 Mon Sep 17 00:00:00 2001 From: Martynas Date: Tue, 13 Sep 2022 14:52:49 +0200 Subject: [PATCH 025/110] SNAPSHOT bump Moved RDFXML2DataTable.xsl and SPARQLXMLResults2DataTable.xsl converters to LinkedDataHub --- pom.xml | 2 +- .../xsl/converters/RDFXML2DataTable.xsl | 232 ------------------ .../converters/SPARQLXMLResults2DataTable.xsl | 181 -------------- 3 files changed, 1 insertion(+), 414 deletions(-) delete mode 100644 src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl delete mode 100644 src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl diff --git a/pom.xml b/pom.xml index c60f9597..60e13f41 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.60-SNAPSHOT + 3.1.61-SNAPSHOT ${packaging.type} AtomGraph Web-Client diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl deleted file mode 100644 index 613d82b9..00000000 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2DataTable.xsl +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - number - date - timeofday - string - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Date(, , ) - - - - Date(, , , , , ) - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl deleted file mode 100644 index 7e1d7142..00000000 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/SPARQLXMLResults2DataTable.xsl +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string - string - number - date - timeofday - string - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Date(, , ) - - - - Date(, , , , , ) - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 03caf6cf81d3b566d4e407b5db1fe5d89522dd50 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Tue, 13 Sep 2022 15:36:48 +0200 Subject: [PATCH 026/110] [maven-release-plugin] prepare release client-3.1.61 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 60e13f41..82961833 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.61-SNAPSHOT + 3.1.61 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.61 From 679b2a19c4c7f7531fbdfd82fc8ab0cb7cef8f96 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Tue, 13 Sep 2022 15:36:52 +0200 Subject: [PATCH 027/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 82961833..5db4b3c9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.61 + 3.1.62-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.61 + client-2.1.2 From a18529a9a9f72b536fea6d73e388beae72eed0e7 Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 4 Nov 2022 18:52:00 +0100 Subject: [PATCH 028/110] Core bump Minor XSLT fixes --- pom.xml | 2 +- .../atomgraph/client/xsl/bootstrap/2.3.2/document.xsl | 2 +- .../client/xsl/bootstrap/2.3.2/imports/default.xsl | 11 ++++++----- .../com/atomgraph/client/xsl/imports/default.xsl | 4 ++-- src/main/webapp/static/css/bootstrap.css | 2 +- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 5db4b3c9..1576bb02 100644 --- a/pom.xml +++ b/pom.xml @@ -124,7 +124,7 @@ ${project.groupId} core - 3.1.14 + 3.1.15 diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/document.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/document.xsl index d40c17d9..68f3fae2 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/document.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/document.xsl @@ -88,7 +88,7 @@ exclude-result-prefixes="#all"> - This form uses RDF/POST encoding: http://www.lsrn.org/semweb/rdfpost.html + This form uses RDF/POST encoding: https://atomgraph.github.io/RDF-POST/ diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/default.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/default.xsl index 2a0cac23..31d3b8a8 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/default.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/imports/default.xsl @@ -70,7 +70,10 @@ exclude-result-prefixes="#all"> - + + + + @@ -83,11 +86,9 @@ exclude-result-prefixes="#all"> - + diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/imports/default.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/imports/default.xsl index 27f8e186..236c7d89 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/imports/default.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/imports/default.xsl @@ -83,7 +83,7 @@ exclude-result-prefixes="#all"> - + @@ -94,7 +94,7 @@ exclude-result-prefixes="#all"> - + diff --git a/src/main/webapp/static/css/bootstrap.css b/src/main/webapp/static/css/bootstrap.css index 5b7fe7e8..7beda8ab 100644 --- a/src/main/webapp/static/css/bootstrap.css +++ b/src/main/webapp/static/css/bootstrap.css @@ -99,7 +99,7 @@ sub { } img { - width: auto\9; + width: auto; height: auto; max-width: 100%; vertical-align: middle; From e89b628741ed675ddbe298800cde1da296c223e7 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Fri, 4 Nov 2022 18:53:34 +0100 Subject: [PATCH 029/110] [maven-release-plugin] prepare release client-3.1.62 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 1576bb02..a6ed2c52 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.62-SNAPSHOT + 3.1.62 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.62 From 21f365bb04a4241b472238f9272b66506899f45a Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Fri, 4 Nov 2022 18:53:38 +0100 Subject: [PATCH 030/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a6ed2c52..c511d0fd 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.62 + 3.1.63-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.62 + client-2.1.2 From d1ba9c17a160d7c273cf4ab1d0280c0c6ad5cc21 Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 4 Nov 2022 20:54:47 +0100 Subject: [PATCH 031/110] Core SNAPSHOT bump --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c511d0fd..627a6829 100644 --- a/pom.xml +++ b/pom.xml @@ -124,7 +124,7 @@ ${project.groupId} core - 3.1.15 + 3.1.16-SNAPSHOT From 255652b42a4730d9d7729def0fb8d65408b92e67 Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 4 Nov 2022 22:23:41 +0100 Subject: [PATCH 032/110] Core bump --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 627a6829..83c697e1 100644 --- a/pom.xml +++ b/pom.xml @@ -124,7 +124,7 @@ ${project.groupId} core - 3.1.16-SNAPSHOT + 3.1.16 From fef4e0a9e2efa249a532437691fb1222ce9e0239 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Fri, 4 Nov 2022 22:26:58 +0100 Subject: [PATCH 033/110] [maven-release-plugin] prepare release client-3.1.63 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 83c697e1..40fdd7c6 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.63-SNAPSHOT + 3.1.63 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.63 From 4fac8c1fda35dbe6bb3c1c2474a325def5ca13de Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Fri, 4 Nov 2022 22:27:02 +0100 Subject: [PATCH 034/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 40fdd7c6..5c5cbbd4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.63 + 3.1.64-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.63 + client-2.1.2 From 1f673c9591507c6619875e1d03a46d0fe2343d5e Mon Sep 17 00:00:00 2001 From: Martynas Date: Thu, 1 Dec 2022 14:59:38 +0100 Subject: [PATCH 035/110] Set systemId on the main StreamSource transformed in ModelXSLTWriterBase --- pom.xml | 2 +- .../client/writer/ModelXSLTWriterBase.java | 2 +- .../client/xsl/converters/RDFXML2SVG.xsl | 21 +++++++++---------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 83c697e1..5c5cbbd4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.63-SNAPSHOT + 3.1.64-SNAPSHOT ${packaging.type} AtomGraph Web-Client diff --git a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java index 9cfc9201..8f4e7014 100644 --- a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java +++ b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java @@ -141,7 +141,7 @@ public void writeTo(Model model, Class type, Type genericType, Annotation[] a xsltTrans.getUnderlyingController().setUnparsedTextURIResolver((UnparsedTextURIResolver)getDataManager()); xsltTrans.getUnderlyingController().setCurrentDateTime(DateTimeValue.fromZonedDateTime(ZonedDateTime.now())); // TO-DO: make TZ configurable xsltTrans.setStylesheetParameters(getParameters(headerMap)); - xsltTrans.transform(new StreamSource(new ByteArrayInputStream(baos.toByteArray())), out); + xsltTrans.transform(new StreamSource(new ByteArrayInputStream(baos.toByteArray()), getAbsolutePath().toString()), out); } catch (TransformerException | SaxonApiException ex) { diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2SVG.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2SVG.xsl index c0a126ec..61fce042 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2SVG.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2SVG.xsl @@ -1,19 +1,18 @@ From 6a02cac4a6be0628eaa0ef3d6b285344587ac333 Mon Sep 17 00:00:00 2001 From: Martynas Date: Thu, 1 Dec 2022 15:50:37 +0100 Subject: [PATCH 036/110] Don't set systemId anyway --- .../java/com/atomgraph/client/writer/ModelXSLTWriterBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java index 8f4e7014..9cfc9201 100644 --- a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java +++ b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java @@ -141,7 +141,7 @@ public void writeTo(Model model, Class type, Type genericType, Annotation[] a xsltTrans.getUnderlyingController().setUnparsedTextURIResolver((UnparsedTextURIResolver)getDataManager()); xsltTrans.getUnderlyingController().setCurrentDateTime(DateTimeValue.fromZonedDateTime(ZonedDateTime.now())); // TO-DO: make TZ configurable xsltTrans.setStylesheetParameters(getParameters(headerMap)); - xsltTrans.transform(new StreamSource(new ByteArrayInputStream(baos.toByteArray()), getAbsolutePath().toString()), out); + xsltTrans.transform(new StreamSource(new ByteArrayInputStream(baos.toByteArray())), out); } catch (TransformerException | SaxonApiException ex) { From dd970c87aefb22771fb0898565098eedc26943aa Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 2 Dec 2022 12:52:54 +0100 Subject: [PATCH 037/110] SNAPSHOT bump Impersonate Firefox during GET requests --- pom.xml | 2 +- .../com/atomgraph/client/model/impl/ProxyResourceBase.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5c5cbbd4..9236afc3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.64-SNAPSHOT + 3.1.65-SNAPSHOT ${packaging.type} AtomGraph Web-Client diff --git a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java index 091a8a88..bcbc5988 100644 --- a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java +++ b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java @@ -67,6 +67,8 @@ public class ProxyResourceBase implements Resource { private static final Logger log = LoggerFactory.getLogger(ProxyResourceBase.class); + private final static String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0"; // impersonate Firefox + private final Request request; private final HttpHeaders httpHeaders; private final MediaTypes mediaTypes; @@ -171,6 +173,7 @@ public Response get(WebTarget target) return get(getClient().target(cr.getLocation())); cr.getHeaders().putSingle(DatasetProvider.REQUEST_URI_HEADER, webTarget.getUri().toString()); // provide a base URI hint to ModelProvider + cr.getHeaders().putSingle(HttpHeaders.USER_AGENT, USER_AGENT); if (log.isDebugEnabled()) log.debug("GETing Model from URI: {}", webTarget.getUri()); From f9f8df30855eff3deb2e20e93970136b68d86b01 Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 2 Dec 2022 13:50:32 +0100 Subject: [PATCH 038/110] New ProxyResourceBase::getBuilder method makes it easier to customize the invocation in subclasses --- .../client/model/impl/ProxyResourceBase.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java index bcbc5988..5ceb6486 100644 --- a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java +++ b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java @@ -48,6 +48,7 @@ import javax.ws.rs.ProcessingException; import javax.ws.rs.client.Client; import javax.ws.rs.client.Entity; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.EntityTag; import javax.ws.rs.core.Variant; @@ -67,8 +68,6 @@ public class ProxyResourceBase implements Resource { private static final Logger log = LoggerFactory.getLogger(ProxyResourceBase.class); - private final static String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0"; // impersonate Firefox - private final Request request; private final HttpHeaders httpHeaders; private final MediaTypes mediaTypes; @@ -159,12 +158,22 @@ public Response get() { return get(getWebTarget()); } - + public Response get(WebTarget target) { - if (target == null) throw new NotFoundException("Resource URI not supplied"); // cannot throw Exception in constructor: https://github.com/eclipse-ee4j/jersey/issues/4436 + if (target == null) throw new NotFoundException("Resource URI not supplied"); - try (Response cr = target.request(getReadableMediaTypes()).get()) + return get(target, getBuilder(target)); + } + + public Invocation.Builder getBuilder(WebTarget target) + { + return target.request(getReadableMediaTypes()); + } + + public Response get(WebTarget target, Invocation.Builder builder) + { + try (Response cr = builder.get()) { // special case for http <-> https 301/303 redirection if ((cr.getStatusInfo().toEnum().equals(Status.SEE_OTHER) || cr.getStatusInfo().toEnum().equals(Status.MOVED_PERMANENTLY)) && @@ -173,7 +182,6 @@ public Response get(WebTarget target) return get(getClient().target(cr.getLocation())); cr.getHeaders().putSingle(DatasetProvider.REQUEST_URI_HEADER, webTarget.getUri().toString()); // provide a base URI hint to ModelProvider - cr.getHeaders().putSingle(HttpHeaders.USER_AGENT, USER_AGENT); if (log.isDebugEnabled()) log.debug("GETing Model from URI: {}", webTarget.getUri()); From 397d74db3dbf7a5229db3c228163414e0b87eec1 Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 2 Dec 2022 14:03:54 +0100 Subject: [PATCH 039/110] SNAPSHOT bump Throw NotFoundException if target == null --- pom.xml | 2 +- .../java/com/atomgraph/client/model/impl/ProxyResourceBase.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9236afc3..81d966d6 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.65-SNAPSHOT + 3.1.66-SNAPSHOT ${packaging.type} AtomGraph Web-Client diff --git a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java index 5ceb6486..4e6df39d 100644 --- a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java +++ b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java @@ -173,6 +173,8 @@ public Invocation.Builder getBuilder(WebTarget target) public Response get(WebTarget target, Invocation.Builder builder) { + if (target == null) throw new NotFoundException("Resource URI not supplied"); // cannot throw Exception in constructor: https://github.com/eclipse-ee4j/jersey/issues/4436 + try (Response cr = builder.get()) { // special case for http <-> https 301/303 redirection From 401aa593de495abb759046a2fc71f2cabf225f72 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 12 Dec 2022 10:58:01 +0100 Subject: [PATCH 040/110] [maven-release-plugin] prepare release client-3.1.62 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 1576bb02..a6ed2c52 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.62-SNAPSHOT + 3.1.62 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.62 From a1af412bb83b71196fa795da77505947ac0e5070 Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 12 Dec 2022 11:03:01 +0100 Subject: [PATCH 041/110] [maven-release-plugin] prepare release client-3.1.66 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 81d966d6..662c4b63 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.66-SNAPSHOT + 3.1.66 ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-2.1.2 + client-3.1.66 From dc723759ba3e3c491eb0d7168c8667544b2bd1cc Mon Sep 17 00:00:00 2001 From: Martynas Jusevicius Date: Mon, 12 Dec 2022 11:03:05 +0100 Subject: [PATCH 042/110] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 662c4b63..5238d090 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.66 + 3.1.67-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -41,7 +41,7 @@ https://github.com/AtomGraph/Web-Client scm:git:git://github.com/AtomGraph/Web-Client.git scm:git:git@github.com:AtomGraph/Web-Client.git - client-3.1.66 + client-2.1.2 From 5ed981ffd6fa7574ba6a77f252aa9a49a5326047 Mon Sep 17 00:00:00 2001 From: Martynas Date: Thu, 15 Dec 2022 13:38:52 +0100 Subject: [PATCH 043/110] javax.* replaced with jakarta.* Core bump Twirl bump Saxon bump Tomcat base image bump --- Dockerfile | 2 +- pom.xml | 12 ++--- .../com/atomgraph/client/Application.java | 14 ++--- .../java/com/atomgraph/client/MediaTypes.java | 4 +- .../mapper/ClientErrorExceptionMapper.java | 8 +-- .../client/mapper/ExceptionMapperBase.java | 18 +++---- .../mapper/NotFoundExceptionMapper.java | 8 +-- .../client/mapper/RiotExceptionMapper.java | 4 +- .../client/model/impl/ProxyResourceBase.java | 54 +++++++++---------- .../atomgraph/client/util/DataManager.java | 6 +-- .../client/util/DataManagerImpl.java | 12 ++--- .../atomgraph/client/util/XsltResolver.java | 4 +- .../client/writer/DatasetXSLTWriter.java | 10 ++-- .../client/writer/ModelXSLTWriter.java | 10 ++-- .../client/writer/ModelXSLTWriterBase.java | 18 +++---- .../client/writer/ResultSetXSLTWriter.java | 13 ++--- src/main/webapp/WEB-INF/web.xml | 6 ++- 17 files changed, 104 insertions(+), 99 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4465c72b..88340a20 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN mvn -Pstandalone clean install ### Deploy Web-Client webapp on Tomcat -FROM tomcat:9.0.59-jdk17-openjdk +FROM tomcat:10.1.4-jdk17 WORKDIR $CATALINA_HOME/webapps diff --git a/pom.xml b/pom.xml index 5238d090..2ed39ebe 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 3.1.67-SNAPSHOT + 4.0.0-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -79,13 +79,13 @@ junit junit - 4.13.1 + 4.13.2 test net.sf.saxon Saxon-HE - 11.1.1 + 11.4 @@ -106,13 +106,13 @@ jakarta.servlet jakarta.servlet-api - 4.0.3 + 5.0.0 provided ${project.groupId} twirl - 1.0.30 + 1.0.31-SNAPSHOT @@ -124,7 +124,7 @@ ${project.groupId} core - 3.1.16 + 4.0.1-SNAPSHOT diff --git a/src/main/java/com/atomgraph/client/Application.java b/src/main/java/com/atomgraph/client/Application.java index e86becc1..11029e2c 100644 --- a/src/main/java/com/atomgraph/client/Application.java +++ b/src/main/java/com/atomgraph/client/Application.java @@ -19,9 +19,9 @@ import org.apache.jena.ontology.OntDocumentManager; import org.apache.jena.util.FileManager; import org.apache.jena.util.LocationMapper; -import javax.annotation.PostConstruct; -import javax.servlet.ServletConfig; -import javax.ws.rs.core.Context; +import jakarta.annotation.PostConstruct; +import jakarta.servlet.ServletConfig; +import jakarta.ws.rs.core.Context; import org.apache.jena.riot.Lang; import org.apache.jena.riot.RDFFormat; import org.apache.jena.riot.RDFWriterRegistry; @@ -48,7 +48,7 @@ import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import org.slf4j.Logger; @@ -59,9 +59,9 @@ import com.atomgraph.core.riot.RDFLanguages; import com.atomgraph.core.riot.lang.RDFPostReaderFactory; import java.util.HashMap; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; import net.sf.saxon.s9api.Processor; import net.sf.saxon.s9api.SaxonApiException; import net.sf.saxon.s9api.XsltCompiler; diff --git a/src/main/java/com/atomgraph/client/MediaTypes.java b/src/main/java/com/atomgraph/client/MediaTypes.java index 81c5c0ba..5f2fc39e 100644 --- a/src/main/java/com/atomgraph/client/MediaTypes.java +++ b/src/main/java/com/atomgraph/client/MediaTypes.java @@ -20,7 +20,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; import org.apache.jena.query.Dataset; import org.apache.jena.query.ResultSet; import org.apache.jena.rdf.model.Model; @@ -63,7 +63,7 @@ public MediaTypes() this(READABLE, WRITABLE); } - public MediaTypes(Map> readable, Map> writable) + public MediaTypes(Map> readable, Map> writable) { super(readable, writable); } diff --git a/src/main/java/com/atomgraph/client/mapper/ClientErrorExceptionMapper.java b/src/main/java/com/atomgraph/client/mapper/ClientErrorExceptionMapper.java index 98c8ede2..fdb726e1 100644 --- a/src/main/java/com/atomgraph/client/mapper/ClientErrorExceptionMapper.java +++ b/src/main/java/com/atomgraph/client/mapper/ClientErrorExceptionMapper.java @@ -16,10 +16,10 @@ package com.atomgraph.client.mapper; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; -import javax.ws.rs.ClientErrorException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; +import jakarta.ws.rs.ClientErrorException; import org.apache.jena.rdf.model.Resource; /** diff --git a/src/main/java/com/atomgraph/client/mapper/ExceptionMapperBase.java b/src/main/java/com/atomgraph/client/mapper/ExceptionMapperBase.java index ce23166d..6851fd95 100644 --- a/src/main/java/com/atomgraph/client/mapper/ExceptionMapperBase.java +++ b/src/main/java/com/atomgraph/client/mapper/ExceptionMapperBase.java @@ -25,17 +25,17 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Request; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Variant; -import javax.ws.rs.ext.Provider; -import javax.ws.rs.ext.Providers; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.Request; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Variant; +import jakarta.ws.rs.ext.Provider; +import jakarta.ws.rs.ext.Providers; import com.atomgraph.client.vocabulary.HTTP; import com.atomgraph.core.util.ModelUtils; -import javax.inject.Inject; -import javax.ws.rs.core.EntityTag; -import javax.ws.rs.core.MediaType; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.EntityTag; +import jakarta.ws.rs.core.MediaType; /** * Abstract base class for ExceptionMappers that build responses with exceptions as RDF resources. diff --git a/src/main/java/com/atomgraph/client/mapper/NotFoundExceptionMapper.java b/src/main/java/com/atomgraph/client/mapper/NotFoundExceptionMapper.java index b84fce0c..8d678bef 100644 --- a/src/main/java/com/atomgraph/client/mapper/NotFoundExceptionMapper.java +++ b/src/main/java/com/atomgraph/client/mapper/NotFoundExceptionMapper.java @@ -16,11 +16,11 @@ */ package com.atomgraph.client.mapper; -import javax.ws.rs.NotFoundException; +import jakarta.ws.rs.NotFoundException; import org.apache.jena.rdf.model.ResourceFactory; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; /** * Maps one of Jena's remote loading 404 Not Found exceptions. diff --git a/src/main/java/com/atomgraph/client/mapper/RiotExceptionMapper.java b/src/main/java/com/atomgraph/client/mapper/RiotExceptionMapper.java index 26d62327..692c4fdd 100644 --- a/src/main/java/com/atomgraph/client/mapper/RiotExceptionMapper.java +++ b/src/main/java/com/atomgraph/client/mapper/RiotExceptionMapper.java @@ -15,8 +15,8 @@ */ package com.atomgraph.client.mapper; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; import org.apache.jena.rdf.model.ResourceFactory; import org.apache.jena.riot.RiotException; diff --git a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java index 4e6df39d..258896ea 100644 --- a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java +++ b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java @@ -19,19 +19,19 @@ import com.atomgraph.client.MediaTypes; import java.net.URI; import java.util.ArrayList; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Request; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Request; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; import com.atomgraph.core.exception.BadGatewayException; import com.atomgraph.core.io.DatasetProvider; import com.atomgraph.core.io.ResultSetProvider; @@ -42,16 +42,16 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.Entity; -import javax.ws.rs.client.Invocation; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.EntityTag; -import javax.ws.rs.core.Variant; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.NotFoundException; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.EntityTag; +import jakarta.ws.rs.core.Variant; import org.apache.jena.query.ResultSet; import org.apache.jena.query.ResultSetRewindable; import org.apache.jena.rdf.model.Model; @@ -101,7 +101,7 @@ public ProxyResourceBase(@Context UriInfo uriInfo, @Context Request request, @Co this.mediaTypes = mediaTypes; this.accept = accept; this.client = client; - List readableMediaTypesList = new ArrayList<>(); + List readableMediaTypesList = new ArrayList<>(); readableMediaTypesList.addAll(mediaTypes.getReadable(Model.class)); this.readableMediaTypes = readableMediaTypesList.toArray(MediaType[]::new); @@ -294,7 +294,7 @@ public Response post(Model model) if (log.isDebugEnabled()) log.debug("POSTing Dataset to URI: {}", getWebTarget().getUri()); return getWebTarget().request(). - accept(getMediaTypes().getReadable(Model.class).toArray(javax.ws.rs.core.MediaType[]::new)). + accept(getMediaTypes().getReadable(Model.class).toArray(jakarta.ws.rs.core.MediaType[]::new)). post(Entity.entity(model, com.atomgraph.core.MediaType.APPLICATION_NTRIPLES_TYPE)); } @@ -312,7 +312,7 @@ public Response put(Model model) if (log.isDebugEnabled()) log.debug("PUTting Dataset to URI: {}", getWebTarget().getUri()); return getWebTarget().request(). - accept(getMediaTypes().getReadable(Model.class).toArray(javax.ws.rs.core.MediaType[]::new)). + accept(getMediaTypes().getReadable(Model.class).toArray(jakarta.ws.rs.core.MediaType[]::new)). put(Entity.entity(model, com.atomgraph.core.MediaType.APPLICATION_NTRIPLES_TYPE)); } @@ -328,7 +328,7 @@ public Response delete() if (log.isDebugEnabled()) log.debug("DELETEing Dataset from URI: {}", getWebTarget().getUri()); return getWebTarget().request(). - accept(getMediaTypes().getReadable(Model.class).toArray(javax.ws.rs.core.MediaType[]::new)). + accept(getMediaTypes().getReadable(Model.class).toArray(jakarta.ws.rs.core.MediaType[]::new)). delete(Response.class); } diff --git a/src/main/java/com/atomgraph/client/util/DataManager.java b/src/main/java/com/atomgraph/client/util/DataManager.java index 1a8994ea..da548df1 100644 --- a/src/main/java/com/atomgraph/client/util/DataManager.java +++ b/src/main/java/com/atomgraph/client/util/DataManager.java @@ -16,8 +16,8 @@ package com.atomgraph.client.util; import java.io.IOException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import javax.xml.transform.Source; import javax.xml.transform.URIResolver; import net.sf.saxon.lib.UnparsedTextURIResolver; @@ -31,7 +31,7 @@ public interface DataManager extends com.atomgraph.core.util.jena.DataManager, URIResolver, UnparsedTextURIResolver { - javax.ws.rs.core.MediaType[] getAcceptedMediaTypes(); + jakarta.ws.rs.core.MediaType[] getAcceptedMediaTypes(); MediaType[] getAcceptedXMLMediaTypes(); diff --git a/src/main/java/com/atomgraph/client/util/DataManagerImpl.java b/src/main/java/com/atomgraph/client/util/DataManagerImpl.java index 64f76489..ebcd8085 100644 --- a/src/main/java/com/atomgraph/client/util/DataManagerImpl.java +++ b/src/main/java/com/atomgraph/client/util/DataManagerImpl.java @@ -31,9 +31,9 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import net.sf.saxon.Configuration; import net.sf.saxon.trans.XPathException; import org.apache.commons.io.IOUtils; @@ -51,7 +51,7 @@ public class DataManagerImpl extends com.atomgraph.core.util.jena.DataManagerImp private static final Logger log = LoggerFactory.getLogger(DataManagerImpl.class); - private final javax.ws.rs.core.MediaType[] acceptedTypes; + private final jakarta.ws.rs.core.MediaType[] acceptedTypes; private final MediaType[] acceptedXMLMediaTypes; private final boolean resolvingUncached; private final boolean resolvingMapped = true; @@ -67,7 +67,7 @@ public DataManagerImpl(LocationMapper mapper, Map modelCache, Lin acceptedTypeList.addAll(ldc.getMediaTypes().getReadable(ResultSet.class)); acceptedTypes = acceptedTypeList.toArray(MediaType[]::new); - List acceptableXMLMediaTypeList = new ArrayList(); + List acceptableXMLMediaTypeList = new ArrayList(); Map q1 = new HashMap<>(); q1.put("q", "1.0"); acceptableXMLMediaTypeList.add(new MediaType(com.atomgraph.core.MediaType.APPLICATION_SPARQL_RESULTS_XML_TYPE.getType(), @@ -237,7 +237,7 @@ public boolean isAcceptedMediaType(MediaType mediaType, MediaType[] mediaTypes) } @Override - public javax.ws.rs.core.MediaType[] getAcceptedMediaTypes() + public jakarta.ws.rs.core.MediaType[] getAcceptedMediaTypes() { return acceptedTypes; } diff --git a/src/main/java/com/atomgraph/client/util/XsltResolver.java b/src/main/java/com/atomgraph/client/util/XsltResolver.java index 0ca97da8..586b99f8 100644 --- a/src/main/java/com/atomgraph/client/util/XsltResolver.java +++ b/src/main/java/com/atomgraph/client/util/XsltResolver.java @@ -20,7 +20,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; import org.apache.jena.rdf.model.Model; import org.apache.jena.util.LocationMapper; @@ -39,7 +39,7 @@ public XsltResolver(LocationMapper mapper, Map modelCache, Linked { super(mapper, modelCache, ldc, cacheModelLoads, preemptiveAuth, resolvingUncached); - List acceptableXMLMediaTypeList = new ArrayList(); + List acceptableXMLMediaTypeList = new ArrayList(); acceptableXMLMediaTypeList.add(com.atomgraph.client.MediaType.TEXT_XSL_TYPE); acceptedXMLMediaTypes = acceptableXMLMediaTypeList.toArray(MediaType[]::new); } diff --git a/src/main/java/com/atomgraph/client/writer/DatasetXSLTWriter.java b/src/main/java/com/atomgraph/client/writer/DatasetXSLTWriter.java index f59119a1..2362236d 100644 --- a/src/main/java/com/atomgraph/client/writer/DatasetXSLTWriter.java +++ b/src/main/java/com/atomgraph/client/writer/DatasetXSLTWriter.java @@ -21,11 +21,11 @@ import java.io.*; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.ws.rs.Produces; -import javax.ws.rs.core.*; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; -import javax.inject.Singleton; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.*; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; +import jakarta.inject.Singleton; import net.sf.saxon.s9api.XsltExecutable; import org.apache.jena.query.Dataset; diff --git a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java index d8efdc3e..72965d90 100644 --- a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java +++ b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java @@ -18,11 +18,11 @@ import com.atomgraph.client.util.DataManager; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.inject.Singleton; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; +import jakarta.inject.Singleton; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import net.sf.saxon.s9api.XsltExecutable; import org.apache.jena.ontology.OntModelSpec; import org.apache.jena.rdf.model.Model; diff --git a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java index 9cfc9201..f467174a 100644 --- a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java +++ b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java @@ -37,15 +37,15 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Request; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Request; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; import javax.xml.transform.stream.StreamSource; diff --git a/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java b/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java index 4cc188b4..6b7b7d65 100644 --- a/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java +++ b/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java @@ -21,18 +21,18 @@ import java.io.*; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.MessageBodyWriter; import javax.xml.transform.Source; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; import javax.xml.transform.stream.StreamResult; import com.atomgraph.client.util.XSLTBuilder; -import javax.inject.Singleton; +import jakarta.inject.Singleton; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXTransformerFactory; import org.slf4j.Logger; @@ -124,4 +124,5 @@ public XSLTBuilder getXSLTBuilder(InputStream is, MultivaluedMap document(is). result(new StreamResult(os)); } + } diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 8c5f0d6b..2c41f952 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -1,5 +1,9 @@ - + AtomGraph Client Generic Linked Data client From 743250b14335bac369852fe9d77d69430c3a46a2 Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 16 Dec 2022 13:49:26 +0100 Subject: [PATCH 044/110] Fixed ModelXSLTWriterBase Removed XSLTBuilder --- README.md | 2 +- .../com/atomgraph/client/Application.java | 2 +- .../atomgraph/client/util/XSLTBuilder.java | 236 ------------------ .../client/writer/ModelXSLTWriterBase.java | 19 +- .../client/writer/ResultSetXSLTWriter.java | 55 ++-- 5 files changed, 40 insertions(+), 274 deletions(-) delete mode 100644 src/main/java/com/atomgraph/client/util/XSLTBuilder.java diff --git a/README.md b/README.md index d8c0ad5d..739cc548 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ AtomGraph Web-Client is a Linked Data web client. If you have a triplestore with and/or build an end-user application on it, or would like to explore Linked Open Data, Web-Client provides the components you need. Web-Client renders (X)HTML user interface by transforming ["plain" RDF/XML](https://jena.apache.org/documentation/io/rdf-output.html#rdfxml) (without nested resource descriptions) -using [XSLT 2.0](https://www.w3.org/TR/xslt20/) stylesheets. +using [XSLT 3.0](https://www.w3.org/TR/xslt30/) stylesheets. ![AtomGraph Web-Client screenshot](https://raw.github.com/AtomGraph/Web-Client/master/screenshot.png) diff --git a/src/main/java/com/atomgraph/client/Application.java b/src/main/java/com/atomgraph/client/Application.java index 11029e2c..1370b0e7 100644 --- a/src/main/java/com/atomgraph/client/Application.java +++ b/src/main/java/com/atomgraph/client/Application.java @@ -85,7 +85,7 @@ * Needs to register JAX-RS root resource classes and providers. * * @author Martynas Jusevičius {@literal } - * @see JAX-RS Application + * @see JAX-RS Application * @see Packaging the RESTful Web Service Application Using web.xml With Application Subclass */ public class Application extends ResourceConfig diff --git a/src/main/java/com/atomgraph/client/util/XSLTBuilder.java b/src/main/java/com/atomgraph/client/util/XSLTBuilder.java deleted file mode 100644 index a2454092..00000000 --- a/src/main/java/com/atomgraph/client/util/XSLTBuilder.java +++ /dev/null @@ -1,236 +0,0 @@ -/** - * Copyright 2012 Martynas Jusevičius - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package com.atomgraph.client.util; - -import java.io.File; -import java.io.InputStream; -import java.io.Reader; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import javax.xml.transform.*; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.sax.SAXTransformerFactory; -import javax.xml.transform.sax.TransformerHandler; -import javax.xml.transform.stream.StreamSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3c.dom.Node; - -/** - * Utility class that simplifies building of XSLT transformations. - * Uses builder pattern. - * - * @author Martynas Jusevičius {@literal } - */ -@Deprecated -public class XSLTBuilder -{ - - private static final Logger log = LoggerFactory.getLogger(XSLTBuilder.class) ; - - private final SAXTransformerFactory factory; - private final Map parameters = new HashMap<>(); - private final Map outputProperties = new HashMap<>(); - private Templates templates = null; - private URIResolver uriResolver = null; - private Source source = null; - private Result result = null; - - protected XSLTBuilder(SAXTransformerFactory factory) - { - if (factory == null) throw new IllegalStateException("SAXTransformerFactory cannot be null"); - - this.factory = factory; - } - - public static XSLTBuilder newInstance(SAXTransformerFactory factory) - { - return new XSLTBuilder(factory); - } - - public XSLTBuilder document(Source doc) - { - if (log.isTraceEnabled()) log.trace("Loading document Source with system ID: {}", doc.getSystemId()); - this.source = doc; - return this; - } - - public XSLTBuilder document(Node n) - { - document(new DOMSource(n)); - return this; - } - - public XSLTBuilder document(Node n, String systemId) - { - document(new DOMSource(n, systemId)); - return this; - } - - public XSLTBuilder document(File file) - { - document(new StreamSource(file)); - return this; - } - - public XSLTBuilder document(InputStream is) - { - document(new StreamSource(is)); - return this; - } - - public XSLTBuilder document(InputStream is, String systemId) - { - document(new StreamSource(is, systemId)); - return this; - } - - public XSLTBuilder document(Reader reader) - { - document(new StreamSource(reader)); - return this; - } - - public XSLTBuilder document(Reader reader, String systemId) - { - document(new StreamSource(reader, systemId)); - return this; - } - - public XSLTBuilder document(String systemId) - { - document(new StreamSource(systemId)); - return this; - } - - public XSLTBuilder stylesheet(File stylesheet) throws TransformerConfigurationException - { - return stylesheet(new StreamSource(stylesheet)); - } - - public XSLTBuilder stylesheet(Source stylesheet) throws TransformerConfigurationException - { - return stylesheet(factory.newTemplates(stylesheet)); - } - - public XSLTBuilder stylesheet(Templates templates) throws TransformerConfigurationException - { - this.templates = templates; - return this; - } - - public XSLTBuilder parameter(String name, Object value) - { - if (log.isTraceEnabled()) log.trace("Setting transformer parameter {} with value {}", name, value); - parameters.put(name, value); - return this; - } - - public XSLTBuilder resolver(URIResolver uriResolver) - { - if (log.isTraceEnabled()) log.trace("Setting URIResolver: {}", uriResolver); - this.uriResolver = uriResolver; - return this; - } - - public XSLTBuilder outputProperty(String name, String value) - { - if (log.isTraceEnabled()) log.trace("Setting transformer OutputProperty {} with value {}", name, value); - outputProperties.put(name, value); - return this; - } - - protected Transformer getTransformer(Templates templates, Result result, URIResolver uriResolver, Map parameters, Map outputProperties) throws TransformerConfigurationException - { - TransformerHandler handler = getSAXTransformerFactory().newTransformerHandler(templates); - handler.setResult(result); - - Transformer transformer = handler.getTransformer(); - transformer.setURIResolver(uriResolver); - - Iterator> paramIt = parameters.entrySet().iterator(); - while (paramIt.hasNext()) - { - Entry param = paramIt.next(); - transformer.setParameter(param.getKey(), param.getValue()); - } - - Iterator> propertyIt = outputProperties.entrySet().iterator(); - while (propertyIt.hasNext()) - { - Entry outputProperty = propertyIt.next(); - transformer.setOutputProperty(outputProperty.getKey(), outputProperty.getValue()); - } - - return transformer; - } - - protected Transformer getTransformer() throws TransformerConfigurationException - { - return getTransformer(getTemplates(), getResult(), getURIResolver(), getParameters(), getOutputProperties()); - } - - public void transform() throws TransformerException - { - getTransformer().transform(getSource(), getResult()); - } - - public XSLTBuilder result(Result result) throws TransformerConfigurationException - { - this.result = result; - return this; - } - - protected SAXTransformerFactory getSAXTransformerFactory() - { - return factory; - } - - protected Templates getTemplates() - { - return templates; - } - - protected Result getResult() - { - return result; - } - - protected URIResolver getURIResolver() - { - return uriResolver; - } - - protected Map getParameters() - { - return parameters; - } - - protected Map getOutputProperties() - { - return outputProperties; - } - - protected Source getSource() - { - return source; - } - -} \ No newline at end of file diff --git a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java index f467174a..4e912235 100644 --- a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java +++ b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java @@ -63,11 +63,12 @@ import org.apache.jena.ontology.ObjectProperty; import org.apache.jena.ontology.OntModelSpec; import org.apache.jena.rdf.model.Model; -import org.apache.jena.rdf.model.RDFWriterI; import org.apache.jena.rdf.model.Resource; import org.apache.jena.rdf.model.ResourceFactory; -import org.apache.jena.rdfxml.xmloutput.impl.Basic; +import org.apache.jena.riot.RDFFormat; import org.apache.jena.riot.RDFLanguages; +import org.apache.jena.riot.RDFWriter; +import org.apache.jena.riot.SysRIOT; import org.apache.jena.riot.system.Checker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -112,10 +113,16 @@ public void writeTo(Model model, Class type, Type genericType, Annotation[] a try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { - //RDFWriter writer = model.getWriter(RDFLanguages.RDFXML.getName()); - RDFWriterI writer = new Basic(); - writer.setProperty("allowBadURIs", true); // round-tripping RDF/POST with user input may contain invalid URIs - writer.write(model, baos, null); + Map properties = new HashMap<>() ; + properties.put("allowBadURIs", "true"); // round-tripping RDF/POST with user input may contain invalid URIs + org.apache.jena.sparql.util.Context cxt = new org.apache.jena.sparql.util.Context(); + cxt.set(SysRIOT.sysRdfWriterProperties, properties); + + RDFWriter.create(). + format(RDFFormat.RDFXML_PLAIN). + context(cxt). + source(model). + output(baos); Xslt30Transformer xsltTrans = getXsltExecutable().load30(); Serializer out = xsltTrans.newSerializer(); diff --git a/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java b/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java index 6b7b7d65..616da7e8 100644 --- a/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java +++ b/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java @@ -26,15 +26,17 @@ import jakarta.ws.rs.core.MultivaluedMap; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.MessageBodyWriter; -import javax.xml.transform.Source; import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; -import javax.xml.transform.stream.StreamResult; -import com.atomgraph.client.util.XSLTBuilder; import jakarta.inject.Singleton; +import static java.nio.charset.StandardCharsets.UTF_8; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXTransformerFactory; +import javax.xml.transform.stream.StreamSource; +import net.sf.saxon.s9api.SaxonApiException; +import net.sf.saxon.s9api.Serializer; +import net.sf.saxon.s9api.Xslt30Transformer; +import net.sf.saxon.s9api.XsltExecutable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,30 +46,30 @@ * * @author Martynas Jusevičius {@literal } * @see ResultSet - * @see MessageBodyWriter + * @see MessageBodyWriter */ @Singleton public class ResultSetXSLTWriter implements MessageBodyWriter { private static final Logger log = LoggerFactory.getLogger(ResultSetXSLTWriter.class); - private Source stylesheet = null; - private URIResolver resolver = null; + private final XsltExecutable xsltExec; + private final URIResolver resolver; /** * Constructs from stylesheet source and URI resolver * - * @param stylesheet the source of the XSLT transformation + * @param xsltExec XSLT executable * @param resolver URI resolver to be used in the transformation * @throws TransformerConfigurationException * @see Source * @see URIResolver */ - public ResultSetXSLTWriter(Source stylesheet, URIResolver resolver) throws TransformerConfigurationException + public ResultSetXSLTWriter(XsltExecutable xsltExec, URIResolver resolver) throws TransformerConfigurationException { - if (stylesheet == null) throw new IllegalArgumentException("XSLT stylesheet Source cannot be null"); + if (xsltExec == null) throw new IllegalArgumentException("XSLT stylesheet Source cannot be null"); if (resolver == null) throw new IllegalArgumentException("URIResolver cannot be null"); - this.stylesheet = stylesheet; + this.xsltExec = xsltExec; this.resolver = resolver; } @@ -89,12 +91,14 @@ public void writeTo(ResultSet results, Class type, Type genericType, Annotati try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { ResultSetFormatter.outputAsXML(baos, results); - - // create XSLTBuilder per request output to avoid document() caching - getXSLTBuilder(new ByteArrayInputStream(baos.toByteArray()), - headerMap, entityStream).transform(); + + Xslt30Transformer xsltTrans = getXsltExecutable().load30(); + Serializer out = xsltTrans.newSerializer(); + out.setOutputStream(entityStream); + out.setOutputProperty(Serializer.Property.ENCODING, UTF_8.name()); + xsltTrans.transform(new StreamSource(new ByteArrayInputStream(baos.toByteArray())), out); } - catch (TransformerException ex) + catch (SaxonApiException ex) { log.error("XSLT transformation failed", ex); throw new WebApplicationException(ex, Response.Status.INTERNAL_SERVER_ERROR); @@ -105,24 +109,15 @@ public SAXTransformerFactory getTransformerFactory() { return ((SAXTransformerFactory)TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null)); } - - public URIResolver getURIResolver() - { - return resolver; - } - public Source getStylesheet() + public XsltExecutable getXsltExecutable() { - return stylesheet; + return xsltExec; } - public XSLTBuilder getXSLTBuilder(InputStream is, MultivaluedMap headerMap, OutputStream os) throws TransformerConfigurationException + public URIResolver getURIResolver() { - return XSLTBuilder.newInstance(getTransformerFactory()). - stylesheet(getStylesheet()). - resolver(getURIResolver()). - document(is). - result(new StreamResult(os)); + return resolver; } - + } From 3b981eafbe710f291253927ffb6049f2f373ed89 Mon Sep 17 00:00:00 2001 From: Martynas Date: Sat, 31 Dec 2022 01:09:48 +0100 Subject: [PATCH 045/110] Refactored RDFXML2JSON-LD converter using XSLT 3.0 JSON instructions --- .../client/xsl/converters/RDFXML2JSON-LD.xsl | 215 ++++++++++-------- 1 file changed, 124 insertions(+), 91 deletions(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl index 4188e53e..d68527a4 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl @@ -20,14 +20,16 @@ limitations under the License. ]> - +xmlns:json="http://www.w3.org/2005/xpath-functions" +exclude-result-prefixes="#all" +> - + - - + + + + + + - - - - - - + + + + + + - - - - + + + + + + + + + + + - - - + @@ -76,153 +87,175 @@ exclude-result-prefixes="xs"> - + - + - - - - - - - - + + - + - - - + - + - + - - + + @type - + - - + + - - - - + + + + + + + + + + + + - + + + + + + + + + - - - - - - - - + + + + + - + + + + + + + + + - + + + + + + + + + - - + - + - + + + + + + + + + - + - - - - + + - + + + + + + + - - - + + + + - + - + + - + + + - + - + - + + + + - - - - - - - - - - - - - \ No newline at end of file From c1da4f81ad7760fc7c564a50c831073cd70b2d19 Mon Sep 17 00:00:00 2001 From: Martynas Date: Sat, 31 Dec 2022 01:10:59 +0100 Subject: [PATCH 046/110] Fixed RDF/XML link --- .../com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl index d68527a4..e357d037 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl @@ -36,7 +36,7 @@ exclude-result-prefixes="#all" An XSLT stylesheet transforming Jena's RDF/XML format to JSON-LD. Supports @context and prefixed names. - RDF/XML: http://www.w3.org/TR/REC-rdf-syntax/ + RDF/XML: https://www.w3.org/TR/rdf-syntax-grammar/ JSON-LD: https://www.w3.org/TR/json-ld11/ --> From fd07366fad2eabfc35be9b5c00bc35fa34a1fca5 Mon Sep 17 00:00:00 2001 From: Martynas Date: Sat, 31 Dec 2022 14:52:12 +0100 Subject: [PATCH 047/110] RDFXML2JSON-LD.xsl fixes --- .../client/xsl/converters/RDFXML2JSON-LD.xsl | 88 ++++++++++++------- 1 file changed, 58 insertions(+), 30 deletions(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl index e357d037..95165c29 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl @@ -1,6 +1,6 @@ - + - - - - + @@ -160,6 +157,51 @@ exclude-result-prefixes="#all" + + + + + + + + + + + + + + &rdf;XMLLiteral + + + + + + + + + + + + + + &rdf;XMLLiteral + + + + + + + + + + + + + + + + + @@ -208,37 +250,16 @@ exclude-result-prefixes="#all" - + - + - - - - - - - - - - - - - - - - - - - - - - + @@ -258,4 +279,11 @@ exclude-result-prefixes="#all" + + + + + + + \ No newline at end of file From 8fb5309a858b02c94f0d624f5452ac4553b14e5a Mon Sep 17 00:00:00 2001 From: Martynas Date: Sun, 1 Jan 2023 00:31:53 +0100 Subject: [PATCH 048/110] Removed XHTML as the serialization method --- .../com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl index 95165c29..58797a1c 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/converters/RDFXML2JSON-LD.xsl @@ -169,7 +169,7 @@ exclude-result-prefixes="#all" - + &rdf;XMLLiteral From ceff88b4b68ebe077aaaea325953e963d3b0bc05 Mon Sep 17 00:00:00 2001 From: Martynas Date: Mon, 2 Jan 2023 12:35:44 +0100 Subject: [PATCH 049/110] SNAPSHOT bump --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2ed39ebe..b72527b7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 4.0.0-SNAPSHOT + 4.0.1-SNAPSHOT ${packaging.type} AtomGraph Web-Client From c972c7c7a5f191e2e56dbc941792bdc3a3909814 Mon Sep 17 00:00:00 2001 From: Martynas Date: Tue, 3 Jan 2023 21:10:54 +0100 Subject: [PATCH 050/110] SNAPSHOT bump Core bump Twirl bump Removed exclusions --- pom.xml | 20 +++---------------- .../com/atomgraph/client/Application.java | 2 +- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/pom.xml b/pom.xml index b72527b7..7cde90b0 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.atomgraph client - 4.0.1-SNAPSHOT + 4.0.2-SNAPSHOT ${packaging.type} AtomGraph Web-Client @@ -112,26 +112,12 @@ ${project.groupId} twirl - 1.0.31-SNAPSHOT - - - - org.glassfish - jakarta.json - - + 1.0.32-SNAPSHOT ${project.groupId} core - 4.0.1-SNAPSHOT - - - - org.glassfish - jakarta.json - - + 4.0.3-SNAPSHOT - - - - diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/imports/sioc.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/imports/sioc.xsl index f15a9bb9..0804602b 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/imports/sioc.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/imports/sioc.xsl @@ -45,6 +45,4 @@ exclude-result-prefixes="#all"> - - \ No newline at end of file From 1330109972e2eddeb828cdcaffffb851890939c7 Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 23 Jun 2023 23:22:29 +0200 Subject: [PATCH 059/110] `XSLTWriterBase` as a base class for both `ModelXSLTWriter` and `ResultSetXSLTWriter`, with a common `transform` method Added `ResultSet` media types to the readable/writable lists Removed `$canvas-id` usages from `bs2:Map` mode Removed `DatasetXSLTWriter` class --- .../com/atomgraph/client/Application.java | 2 + .../java/com/atomgraph/client/MediaTypes.java | 7 +- .../client/model/impl/ProxyResourceBase.java | 5 +- .../client/writer/DatasetXSLTWriter.java | 71 ------ .../client/writer/ModelXSLTWriter.java | 68 +++++- .../client/writer/ResultSetXSLTWriter.java | 64 ++---- ...SLTWriterBase.java => XSLTWriterBase.java} | 116 ++++------ .../client/writer/function/Construct.java | 16 +- .../com/atomgraph/client/protege-dc.owl | 216 ------------------ .../client/xsl/bootstrap/2.3.2/container.xsl | 8 +- 10 files changed, 152 insertions(+), 421 deletions(-) delete mode 100644 src/main/java/com/atomgraph/client/writer/DatasetXSLTWriter.java rename src/main/java/com/atomgraph/client/writer/{ModelXSLTWriterBase.java => XSLTWriterBase.java} (72%) delete mode 100644 src/main/resources/com/atomgraph/client/protege-dc.owl diff --git a/src/main/java/com/atomgraph/client/Application.java b/src/main/java/com/atomgraph/client/Application.java index 771fd833..61aa680d 100644 --- a/src/main/java/com/atomgraph/client/Application.java +++ b/src/main/java/com/atomgraph/client/Application.java @@ -38,6 +38,7 @@ import com.atomgraph.client.util.XsltResolver; import com.atomgraph.client.vocabulary.AC; import com.atomgraph.client.writer.ModelXSLTWriter; +import com.atomgraph.client.writer.ResultSetXSLTWriter; import com.atomgraph.client.writer.function.Construct; import com.atomgraph.client.writer.function.ConstructForClass; import com.atomgraph.client.writer.function.UUID; @@ -194,6 +195,7 @@ public void init() register(ClientErrorExceptionMapper.class); register(BadGatewayExceptionMapper.class); register(new ModelXSLTWriter(getXsltExecutable(), getOntModelSpec(), getDataManager())); // writes (X)HTML responses + register(new ResultSetXSLTWriter(getXsltExecutable(), getOntModelSpec(), getDataManager())); // writes (X)HTML responses register(new AbstractBinder() { diff --git a/src/main/java/com/atomgraph/client/MediaTypes.java b/src/main/java/com/atomgraph/client/MediaTypes.java index 5f2fc39e..46370c01 100644 --- a/src/main/java/com/atomgraph/client/MediaTypes.java +++ b/src/main/java/com/atomgraph/client/MediaTypes.java @@ -54,8 +54,11 @@ public class MediaTypes extends com.atomgraph.core.MediaTypes writableModelTypes.add(0, html); // add HTML as writable MediaType writableModelTypes.add(1, xhtml); // add XHTML as writable MediaType WRITABLE.put(Model.class, Collections.unmodifiableList(writableModelTypes)); - - WRITABLE.put(ResultSet.class, coreTypes.getWritable(ResultSet.class)); + + List writablResultSetTypes = new ArrayList<>(coreTypes.getWritable(ResultSet.class)); + writablResultSetTypes.add(0, html); // add HTML as writable MediaType + writablResultSetTypes.add(1, xhtml); // add XHTML as writable MediaType + WRITABLE.put(ResultSet.class, Collections.unmodifiableList(writablResultSetTypes)); } public MediaTypes() diff --git a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java index 258896ea..5c11d672 100644 --- a/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java +++ b/src/main/java/com/atomgraph/client/model/impl/ProxyResourceBase.java @@ -103,6 +103,7 @@ public ProxyResourceBase(@Context UriInfo uriInfo, @Context Request request, @Co this.client = client; List readableMediaTypesList = new ArrayList<>(); readableMediaTypesList.addAll(mediaTypes.getReadable(Model.class)); + readableMediaTypesList.addAll(mediaTypes.getReadable(ResultSet.class)); this.readableMediaTypes = readableMediaTypesList.toArray(MediaType[]::new); if (uri != null) @@ -183,9 +184,9 @@ public Response get(WebTarget target, Invocation.Builder builder) (target.getUri().getScheme().equals("https") && cr.getLocation().getScheme().equals("http"))) ) return get(getClient().target(cr.getLocation())); - cr.getHeaders().putSingle(DatasetProvider.REQUEST_URI_HEADER, webTarget.getUri().toString()); // provide a base URI hint to ModelProvider + cr.getHeaders().putSingle(DatasetProvider.REQUEST_URI_HEADER, target.getUri().toString()); // provide a base URI hint to ModelProvider - if (log.isDebugEnabled()) log.debug("GETing Model from URI: {}", webTarget.getUri()); + if (log.isDebugEnabled()) log.debug("GETing Model from URI: {}", target.getUri()); Response response = getResponse(cr); diff --git a/src/main/java/com/atomgraph/client/writer/DatasetXSLTWriter.java b/src/main/java/com/atomgraph/client/writer/DatasetXSLTWriter.java deleted file mode 100644 index 1f9780e3..00000000 --- a/src/main/java/com/atomgraph/client/writer/DatasetXSLTWriter.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright 2012 Martynas Jusevičius - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package com.atomgraph.client.writer; - -import com.atomgraph.client.util.DataManager; -import org.apache.jena.ontology.OntModelSpec; -import java.io.*; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.*; -import jakarta.ws.rs.ext.MessageBodyWriter; -import jakarta.ws.rs.ext.Provider; -import jakarta.inject.Singleton; -import net.sf.saxon.s9api.XsltExecutable; -import org.apache.jena.query.Dataset; - -/** - * Transforms RDF with XSLT stylesheet and writes (X)HTML result to response. - * Needs to be registered in the JAX-RS application. - * - * @author Martynas Jusevičius {@literal } - * @see org.apache.jena.query.Dataset - * @see jakarta.ws.rs.ext.MessageBodyWriter - */ -@Provider -@Singleton -@Produces({MediaType.TEXT_HTML + ";charset=UTF-8", MediaType.APPLICATION_XHTML_XML + ";charset=UTF-8"}) -@Deprecated -public class DatasetXSLTWriter extends ModelXSLTWriterBase implements MessageBodyWriter -{ - - /** - * Constructs dataset writer from XSLT executable and ontology model specification. - * - * @param xsltExec compiled XSLT stylesheet - * @param ontModelSpec ontology model specification - * @param dataManager RDF data manager - */ - public DatasetXSLTWriter(XsltExecutable xsltExec, OntModelSpec ontModelSpec, DataManager dataManager) - { - super(xsltExec, ontModelSpec, dataManager); - } - - @Override - public void writeTo(Dataset dataset, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap headerMap, OutputStream entityStream) throws IOException - { - super.writeTo(dataset.getDefaultModel(), type, genericType, annotations, mediaType, headerMap, entityStream); - } - - @Override - public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) - { - return Dataset.class.isAssignableFrom(type); - } - -} \ No newline at end of file diff --git a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java index 02b7800f..794cf2cf 100644 --- a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java +++ b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java @@ -19,13 +19,30 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; import jakarta.inject.Singleton; +import jakarta.ws.rs.InternalServerErrorException; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; import jakarta.ws.rs.ext.MessageBodyWriter; import jakarta.ws.rs.ext.Provider; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.Map; +import javax.xml.transform.TransformerException; +import javax.xml.transform.stream.StreamSource; +import net.sf.saxon.s9api.SaxonApiException; import net.sf.saxon.s9api.XsltExecutable; import org.apache.jena.ontology.OntModelSpec; import org.apache.jena.rdf.model.Model; +import org.apache.jena.riot.RDFFormat; +import org.apache.jena.riot.RDFLanguages; +import org.apache.jena.riot.RDFWriter; +import org.apache.jena.riot.SysRIOT; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Transforms RDF with XSLT stylesheet and writes (X)HTML result to response. @@ -38,9 +55,11 @@ @Provider @Singleton @Produces({MediaType.TEXT_HTML + ";charset=UTF-8", MediaType.APPLICATION_XHTML_XML + ";charset=UTF-8"}) -public class ModelXSLTWriter extends ModelXSLTWriterBase implements MessageBodyWriter +public class ModelXSLTWriter extends XSLTWriterBase implements MessageBodyWriter { + private static final Logger log = LoggerFactory.getLogger(ModelXSLTWriter.class); + /** * Constructs model writer from XSLT executable and ontology model specification. * @@ -59,4 +78,51 @@ public boolean isWriteable(Class type, Type genericType, Annotation[] annotat return Model.class.isAssignableFrom(type); } + @Override + public long getSize(Model model, Class type, Type genericType, Annotation[] annotations, MediaType mediaType) + { + return -1; + } + + @Override + public void writeTo(Model model, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap headerMap, OutputStream entityStream) throws IOException + { + if (log.isTraceEnabled()) log.trace("Writing Model with HTTP headers: {} MediaType: {}", headerMap, mediaType); + + try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) + { + Map properties = new HashMap<>() ; + properties.put("allowBadURIs", "true"); // round-tripping RDF/POST with user input may contain invalid URIs + org.apache.jena.sparql.util.Context cxt = new org.apache.jena.sparql.util.Context(); + cxt.set(SysRIOT.sysRdfWriterProperties, properties); + + RDFWriter.create(). + format(RDFFormat.RDFXML_PLAIN). + context(cxt). + source(model). + output(baos); + + transform(baos, mediaType, headerMap, entityStream); + } + catch (TransformerException | SaxonApiException ex) + { + if (log.isErrorEnabled()) log.error("XSLT transformation failed", ex); + throw new InternalServerErrorException(ex); + } + } + + public static StreamSource getSource(Model model) throws IOException + { + if (model == null) throw new IllegalArgumentException("Model cannot be null"); + if (log.isDebugEnabled()) log.debug("Number of Model stmts read: {}", model.size()); + + try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) + { + model.write(stream, RDFLanguages.RDFXML.getName(), null); + + if (log.isDebugEnabled()) log.debug("RDF/XML bytes written: {}", stream.toByteArray().length); + return new StreamSource(new ByteArrayInputStream(stream.toByteArray())); + } + } + } diff --git a/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java b/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java index 616da7e8..e2895580 100644 --- a/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java +++ b/src/main/java/com/atomgraph/client/writer/ResultSetXSLTWriter.java @@ -16,6 +16,7 @@ */ package com.atomgraph.client.writer; +import com.atomgraph.client.util.DataManager; import org.apache.jena.query.ResultSet; import org.apache.jena.query.ResultSetFormatter; import java.io.*; @@ -24,19 +25,13 @@ import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MultivaluedMap; -import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.MessageBodyWriter; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.URIResolver; import jakarta.inject.Singleton; -import static java.nio.charset.StandardCharsets.UTF_8; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.sax.SAXTransformerFactory; -import javax.xml.transform.stream.StreamSource; +import jakarta.ws.rs.InternalServerErrorException; +import javax.xml.transform.TransformerException; import net.sf.saxon.s9api.SaxonApiException; -import net.sf.saxon.s9api.Serializer; -import net.sf.saxon.s9api.Xslt30Transformer; import net.sf.saxon.s9api.XsltExecutable; +import org.apache.jena.ontology.OntModelSpec; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,28 +44,20 @@ * @see MessageBodyWriter */ @Singleton -public class ResultSetXSLTWriter implements MessageBodyWriter +public class ResultSetXSLTWriter extends XSLTWriterBase implements MessageBodyWriter { private static final Logger log = LoggerFactory.getLogger(ResultSetXSLTWriter.class); - private final XsltExecutable xsltExec; - private final URIResolver resolver; - /** - * Constructs from stylesheet source and URI resolver + * Constructs model writer from XSLT executable and ontology model specification. * - * @param xsltExec XSLT executable - * @param resolver URI resolver to be used in the transformation - * @throws TransformerConfigurationException - * @see Source - * @see URIResolver + * @param xsltExec compiled XSLT stylesheet + * @param ontModelSpec ontology model specification + * @param dataManager RDF data manager */ - public ResultSetXSLTWriter(XsltExecutable xsltExec, URIResolver resolver) throws TransformerConfigurationException + public ResultSetXSLTWriter(XsltExecutable xsltExec, OntModelSpec ontModelSpec, DataManager dataManager) { - if (xsltExec == null) throw new IllegalArgumentException("XSLT stylesheet Source cannot be null"); - if (resolver == null) throw new IllegalArgumentException("URIResolver cannot be null"); - this.xsltExec = xsltExec; - this.resolver = resolver; + super(xsltExec, ontModelSpec, dataManager); } @Override @@ -91,33 +78,14 @@ public void writeTo(ResultSet results, Class type, Type genericType, Annotati try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { ResultSetFormatter.outputAsXML(baos, results); - - Xslt30Transformer xsltTrans = getXsltExecutable().load30(); - Serializer out = xsltTrans.newSerializer(); - out.setOutputStream(entityStream); - out.setOutputProperty(Serializer.Property.ENCODING, UTF_8.name()); - xsltTrans.transform(new StreamSource(new ByteArrayInputStream(baos.toByteArray())), out); + + transform(baos, mediaType, headerMap, entityStream); } - catch (SaxonApiException ex) + catch (TransformerException | SaxonApiException ex) { - log.error("XSLT transformation failed", ex); - throw new WebApplicationException(ex, Response.Status.INTERNAL_SERVER_ERROR); + if (log.isErrorEnabled()) log.error("XSLT transformation failed", ex); + throw new InternalServerErrorException(ex); } } - - public SAXTransformerFactory getTransformerFactory() - { - return ((SAXTransformerFactory)TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null)); - } - - public XsltExecutable getXsltExecutable() - { - return xsltExec; - } - - public URIResolver getURIResolver() - { - return resolver; - } } diff --git a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java b/src/main/java/com/atomgraph/client/writer/XSLTWriterBase.java similarity index 72% rename from src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java rename to src/main/java/com/atomgraph/client/writer/XSLTWriterBase.java index 4e912235..3fcc8e19 100644 --- a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriterBase.java +++ b/src/main/java/com/atomgraph/client/writer/XSLTWriterBase.java @@ -19,16 +19,8 @@ import com.atomgraph.client.vocabulary.AC; import com.atomgraph.client.vocabulary.LDT; import com.atomgraph.core.util.Link; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; import java.net.URI; import java.net.URISyntaxException; -import static java.nio.charset.StandardCharsets.UTF_8; -import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -38,17 +30,21 @@ import java.util.Set; import java.util.stream.Collectors; import jakarta.servlet.http.HttpServletRequest; -import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MultivaluedMap; import jakarta.ws.rs.core.Request; -import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.UriInfo; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; +import static java.nio.charset.StandardCharsets.UTF_8; +import java.time.ZonedDateTime; import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; import javax.xml.transform.stream.StreamSource; +import net.sf.saxon.lib.ResourceResolverWrappingURIResolver; import net.sf.saxon.lib.UnparsedTextURIResolver; import net.sf.saxon.s9api.QName; import net.sf.saxon.s9api.SaxonApiException; @@ -62,25 +58,21 @@ import org.apache.jena.iri.IRIFactory; import org.apache.jena.ontology.ObjectProperty; import org.apache.jena.ontology.OntModelSpec; -import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.Resource; import org.apache.jena.rdf.model.ResourceFactory; -import org.apache.jena.riot.RDFFormat; -import org.apache.jena.riot.RDFLanguages; -import org.apache.jena.riot.RDFWriter; -import org.apache.jena.riot.SysRIOT; import org.apache.jena.riot.system.Checker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * + * Base class for Model and ResultSet (X)HTML writers. + * * @author Martynas Jusevičius {@literal } */ -public abstract class ModelXSLTWriterBase +public abstract class XSLTWriterBase { - private static final Logger log = LoggerFactory.getLogger(ModelXSLTWriterBase.class); + private static final Logger log = LoggerFactory.getLogger(XSLTWriterBase.class); private static final Set NAMESPACES; static { @@ -97,7 +89,7 @@ public abstract class ModelXSLTWriterBase @Context private HttpHeaders httpHeaders; @Context private HttpServletRequest httpServletRequest; - public ModelXSLTWriterBase(XsltExecutable xsltExec, OntModelSpec ontModelSpec, DataManager dataManager) + public XSLTWriterBase(XsltExecutable xsltExec, OntModelSpec ontModelSpec, DataManager dataManager) { if (xsltExec == null) throw new IllegalArgumentException("XsltExecutable cannot be null"); if (ontModelSpec == null) throw new IllegalArgumentException("OntModelSpec cannot be null"); @@ -107,56 +99,42 @@ public ModelXSLTWriterBase(XsltExecutable xsltExec, OntModelSpec ontModelSpec, D this.dataManager = dataManager; } - public void writeTo(Model model, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap headerMap, OutputStream entityStream) throws IOException + public void transform(ByteArrayOutputStream baos, MediaType mediaType, MultivaluedMap headerMap, OutputStream entityStream) throws TransformerException, SaxonApiException { - if (log.isTraceEnabled()) log.trace("Writing Model with HTTP headers: {} MediaType: {}", headerMap, mediaType); - - try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) - { - Map properties = new HashMap<>() ; - properties.put("allowBadURIs", "true"); // round-tripping RDF/POST with user input may contain invalid URIs - org.apache.jena.sparql.util.Context cxt = new org.apache.jena.sparql.util.Context(); - cxt.set(SysRIOT.sysRdfWriterProperties, properties); - - RDFWriter.create(). - format(RDFFormat.RDFXML_PLAIN). - context(cxt). - source(model). - output(baos); - - Xslt30Transformer xsltTrans = getXsltExecutable().load30(); - Serializer out = xsltTrans.newSerializer(); - out.setOutputStream(entityStream); - out.setOutputProperty(Serializer.Property.ENCODING, UTF_8.name()); + transform(getXsltExecutable().load30(), getDataManager(), baos, mediaType, getParameters(headerMap), entityStream); + } + + public void transform(Xslt30Transformer xsltTrans, DataManager dataManager, ByteArrayOutputStream baos, MediaType mediaType, Map parameters, OutputStream entityStream) throws TransformerException, SaxonApiException + { + if (xsltTrans == null) throw new IllegalArgumentException("Xslt30Transformer cannot be null"); + if (dataManager == null) throw new IllegalArgumentException("DataManager cannot be null"); - if (mediaType.isCompatible(MediaType.TEXT_HTML_TYPE)) - { - out.setOutputProperty(Serializer.Property.METHOD, "html"); - out.setOutputProperty(Serializer.Property.MEDIA_TYPE, MediaType.TEXT_HTML); - out.setOutputProperty(Serializer.Property.DOCTYPE_SYSTEM, "http://www.w3.org/TR/html4/strict.dtd"); - out.setOutputProperty(Serializer.Property.DOCTYPE_PUBLIC, "-//W3C//DTD HTML 4.01//EN"); - } - if (mediaType.isCompatible(MediaType.APPLICATION_XHTML_XML_TYPE)) - { - out.setOutputProperty(Serializer.Property.METHOD, "xhtml"); - out.setOutputProperty(Serializer.Property.MEDIA_TYPE, MediaType.APPLICATION_XHTML_XML); - out.setOutputProperty(Serializer.Property.DOCTYPE_SYSTEM, "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"); - out.setOutputProperty(Serializer.Property.DOCTYPE_PUBLIC, "-//W3C//DTD XHTML 1.0 Strict//EN"); - } + Serializer out = xsltTrans.newSerializer(); + out.setOutputStream(entityStream); + out.setOutputProperty(Serializer.Property.ENCODING, UTF_8.name()); - xsltTrans.setURIResolver((URIResolver)getDataManager()); - xsltTrans.getUnderlyingController().setUnparsedTextURIResolver((UnparsedTextURIResolver)getDataManager()); - xsltTrans.getUnderlyingController().setCurrentDateTime(DateTimeValue.fromZonedDateTime(ZonedDateTime.now())); // TO-DO: make TZ configurable - xsltTrans.setStylesheetParameters(getParameters(headerMap)); - xsltTrans.transform(new StreamSource(new ByteArrayInputStream(baos.toByteArray())), out); + if (mediaType.isCompatible(MediaType.TEXT_HTML_TYPE)) + { + out.setOutputProperty(Serializer.Property.METHOD, "html"); + out.setOutputProperty(Serializer.Property.MEDIA_TYPE, MediaType.TEXT_HTML); + out.setOutputProperty(Serializer.Property.DOCTYPE_SYSTEM, "http://www.w3.org/TR/html4/strict.dtd"); + out.setOutputProperty(Serializer.Property.DOCTYPE_PUBLIC, "-//W3C//DTD HTML 4.01//EN"); } - catch (TransformerException | SaxonApiException ex) + if (mediaType.isCompatible(MediaType.APPLICATION_XHTML_XML_TYPE)) { - if (log.isErrorEnabled()) log.error("XSLT transformation failed", ex); - throw new WebApplicationException(ex, Response.Status.INTERNAL_SERVER_ERROR); // TO-DO: make Mapper + out.setOutputProperty(Serializer.Property.METHOD, "xhtml"); + out.setOutputProperty(Serializer.Property.MEDIA_TYPE, MediaType.APPLICATION_XHTML_XML); + out.setOutputProperty(Serializer.Property.DOCTYPE_SYSTEM, "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"); + out.setOutputProperty(Serializer.Property.DOCTYPE_PUBLIC, "-//W3C//DTD XHTML 1.0 Strict//EN"); } - } + xsltTrans.setResourceResolver(new ResourceResolverWrappingURIResolver((URIResolver)dataManager)); + xsltTrans.getUnderlyingController().setUnparsedTextURIResolver((UnparsedTextURIResolver)dataManager); + xsltTrans.getUnderlyingController().setCurrentDateTime(DateTimeValue.fromZonedDateTime(ZonedDateTime.now())); // TO-DO: make TZ configurable + if (parameters != null) xsltTrans.setStylesheetParameters(parameters); + xsltTrans.transform(new StreamSource(new ByteArrayInputStream(baos.toByteArray())), out); + } + public Map getParameters(MultivaluedMap headerMap) throws TransformerException { if (headerMap == null) throw new IllegalArgumentException("MultivaluedMap cannot be null"); @@ -239,21 +217,7 @@ public String getQuery() return null; } - - public static StreamSource getSource(Model model) throws IOException - { - if (model == null) throw new IllegalArgumentException("Model cannot be null"); - if (log.isDebugEnabled()) log.debug("Number of Model stmts read: {}", model.size()); - - try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) - { - model.write(stream, RDFLanguages.RDFXML.getName(), null); - if (log.isDebugEnabled()) log.debug("RDF/XML bytes written: {}", stream.toByteArray().length); - return new StreamSource(new ByteArrayInputStream(stream.toByteArray())); - } - } - public URI getContextURI() { return URI.create(getHttpServletRequest().getRequestURL().toString()). diff --git a/src/main/java/com/atomgraph/client/writer/function/Construct.java b/src/main/java/com/atomgraph/client/writer/function/Construct.java index d8a1061c..30579863 100644 --- a/src/main/java/com/atomgraph/client/writer/function/Construct.java +++ b/src/main/java/com/atomgraph/client/writer/function/Construct.java @@ -17,9 +17,11 @@ package com.atomgraph.client.writer.function; import com.atomgraph.client.vocabulary.AC; -import static com.atomgraph.client.writer.ModelXSLTWriterBase.getSource; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URISyntaxException; +import javax.xml.transform.stream.StreamSource; import net.sf.saxon.s9api.ExtensionFunction; import net.sf.saxon.s9api.ItemType; import net.sf.saxon.s9api.OccurrenceIndicator; @@ -32,6 +34,7 @@ import org.apache.jena.query.QueryExecution; import org.apache.jena.query.QueryFactory; import org.apache.jena.rdf.model.Model; +import org.apache.jena.riot.RDFLanguages; /** * ac:construct() XSLT function that constructs an instance from a given CONSTRUCT query. @@ -92,6 +95,17 @@ public Model getConstructedInstances(Query constructor) throws URISyntaxExceptio } } + public StreamSource getSource(Model model) throws IOException + { + if (model == null) throw new IllegalArgumentException("Model cannot be null"); + + try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) + { + model.write(stream, RDFLanguages.RDFXML.getName(), null); + return new StreamSource(new ByteArrayInputStream(stream.toByteArray())); + } + } + public Processor getProcessor() { return processor; diff --git a/src/main/resources/com/atomgraph/client/protege-dc.owl b/src/main/resources/com/atomgraph/client/protege-dc.owl deleted file mode 100644 index eba2b6ec..00000000 --- a/src/main/resources/com/atomgraph/client/protege-dc.owl +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - - - Title - A name given to the resource. - - Typically, a Title will be a name by which the resource is - formally known. - - - - - - - - Creator - An entity primarily responsible for making the content - of the resource. - Examples of a Creator include a person, an organisation, - or a service. Typically, the name of a Creator should - be used to indicate the entity. - - - - - - - Subject and Keywords - The topic of the content of the resource. - Typically, a Subject will be expressed as keywords, - key phrases or classification codes that describe a topic - of the resource. Recommended best practice is to select - a value from a controlled vocabulary or formal - classification scheme. - - - - - - - Description - An account of the content of the resource. - Description may include but is not limited to: an abstract, - table of contents, reference to a graphical representation - of content or a free-text account of the content. - - - - - - - Publisher - An entity responsible for making the resource available - Examples of a Publisher include a person, an organisation, - or a service. - Typically, the name of a Publisher should be used to - indicate the entity. - - - - - - - Contributor - An entity responsible for making contributions to the - content of the resource. - Examples of a Contributor include a person, an - organisation, or a service. Typically, the name of a - Contributor should be used to indicate the entity. - - - - - - - Date - A date associated with an event in the life cycle of the - resource. - Typically, Date will be associated with the creation or - availability of the resource. Recommended best practice - for encoding the date value is defined in a profile of - ISO 8601 [W3CDTF] and follows the YYYY-MM-DD format. - - - - - - - Resource Type - The nature or genre of the content of the resource. - Type includes terms describing general categories, functions, - genres, or aggregation levels for content. Recommended best - practice is to select a value from a controlled vocabulary - (for example, the DCMI Type Vocabulary [DCMITYPE]). To - describe the physical or digital manifestation of the - resource, use the Format element. - - - - - - - Format - The physical or digital manifestation of the resource. - Typically, Format may include the media-type or dimensions of - the resource. Format may be used to determine the software, - hardware or other equipment needed to display or operate the - resource. Examples of dimensions include size and duration. - Recommended best practice is to select a value from a - controlled vocabulary (for example, the list of Internet Media - Types [MIME] defining computer media formats). - - - - - - - Resource Identifier - An unambiguous reference to the resource within a given context. - Recommended best practice is to identify the resource by means - of a string or number conforming to a formal identification - system. - Example formal identification systems include the Uniform - Resource Identifier (URI) (including the Uniform Resource - Locator (URL)), the Digital Object Identifier (DOI) and the - International Standard Book Number (ISBN). - - - - - - - Source - A reference to a resource from which the present resource - is derived. - The present resource may be derived from the Source resource - in whole or in part. Recommended best practice is to reference - the resource by means of a string or number conforming to a - formal identification system. - - - - - - - Language - A language of the intellectual content of the resource. - Recommended best practice is to use RFC 3066 [RFC3066], - which, in conjunction with ISO 639 [ISO639], defines two- - and three-letter primary language tags with optional - subtags. Examples include "en" or "eng" for English, - "akk" for Akkadian, and "en-GB" for English used in the - United Kingdom. - - - - - - - Relation - A reference to a related resource. - - Recommended best practice is to reference the resource by means - of a string or number conforming to a formal identification - system. - - - - - - - - Coverage - The extent or scope of the content of the resource. - Coverage will typically include spatial location (a place name - or geographic coordinates), temporal period (a period label, - date, or date range) or jurisdiction (such as a named - administrative entity). - Recommended best practice is to select a value from a - controlled vocabulary (for example, the Thesaurus of Geographic - Names [TGN]) and that, where appropriate, named places or time - periods be used in preference to numeric identifiers such as - sets of coordinates or date ranges. - - - - - - - Rights Management - Information about rights held in and over the resource. - - Typically, a Rights element will contain a rights - management statement for the resource, or reference - a service providing such information. Rights information - often encompasses Intellectual Property Rights (IPR), - Copyright, and various Property Rights. - If the Rights element is absent, no assumptions can be made - about the status of these and other rights with respect to - the resource. - - - - \ No newline at end of file diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/container.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/container.xsl index 64ffee76..1e909c9a 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/container.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/container.xsl @@ -207,9 +207,9 @@ exclude-result-prefixes="#all"> - + -
+
@@ -222,7 +222,7 @@ exclude-result-prefixes="#all"> function initMap() { var latLng = new google.maps.LatLng(]]>, From 6ed45036e11c921ce3587e704abf3696813fbbfe Mon Sep 17 00:00:00 2001 From: Martynas Date: Fri, 23 Jun 2023 23:27:38 +0200 Subject: [PATCH 060/110] `ConstructForClass::getSource` method --- .../atomgraph/client/writer/ModelXSLTWriter.java | 2 +- .../writer/function/ConstructForClass.java | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java index 794cf2cf..a61f627d 100644 --- a/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java +++ b/src/main/java/com/atomgraph/client/writer/ModelXSLTWriter.java @@ -111,7 +111,7 @@ public void writeTo(Model model, Class type, Type genericType, Annotation[] a } } - public static StreamSource getSource(Model model) throws IOException + public StreamSource getSource(Model model) throws IOException { if (model == null) throw new IllegalArgumentException("Model cannot be null"); if (log.isDebugEnabled()) log.debug("Number of Model stmts read: {}", model.size()); diff --git a/src/main/java/com/atomgraph/client/writer/function/ConstructForClass.java b/src/main/java/com/atomgraph/client/writer/function/ConstructForClass.java index 86710309..bd9f1f81 100644 --- a/src/main/java/com/atomgraph/client/writer/function/ConstructForClass.java +++ b/src/main/java/com/atomgraph/client/writer/function/ConstructForClass.java @@ -18,8 +18,10 @@ import com.atomgraph.client.util.Constructor; import com.atomgraph.client.vocabulary.AC; import static com.atomgraph.client.writer.ModelXSLTWriter.checkURI; -import static com.atomgraph.client.writer.ModelXSLTWriter.getSource; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import javax.xml.transform.stream.StreamSource; import net.sf.saxon.s9api.ExtensionFunction; import net.sf.saxon.s9api.ItemType; import net.sf.saxon.s9api.OccurrenceIndicator; @@ -33,6 +35,7 @@ import org.apache.jena.ontology.OntModelSpec; import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.riot.RDFLanguages; /** * ac:construct() XSLT function that constructs instances for given classes from their constructors. @@ -100,6 +103,17 @@ public XdmValue call(XdmValue[] arguments) throws SaxonApiException } } + public StreamSource getSource(Model model) throws IOException + { + if (model == null) throw new IllegalArgumentException("Model cannot be null"); + + try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) + { + model.write(stream, RDFLanguages.RDFXML.getName(), null); + return new StreamSource(new ByteArrayInputStream(stream.toByteArray())); + } + } + public Processor getProcessor() { return processor; From bdc0ac7ceaea9f0561a314cde4d97e13d91c0520 Mon Sep 17 00:00:00 2001 From: Martynas Date: Tue, 27 Jun 2023 00:09:37 +0200 Subject: [PATCH 061/110] Refactored top-level XSLT templates to handle both rdf:RDF and srx:sparql documents Fixed bugs in the xhtml:Table mode for srx:sparql --- .../client/xsl/bootstrap/2.3.2/layout.xsl | 48 +++++++++++++------ .../atomgraph/client/xsl/imports/default.xsl | 6 +-- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/layout.xsl b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/layout.xsl index 890b6603..c689abb7 100644 --- a/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/layout.xsl +++ b/src/main/webapp/static/com/atomgraph/client/xsl/bootstrap/2.3.2/layout.xsl @@ -22,6 +22,7 @@ limitations under the License. + @@ -39,6 +40,7 @@ xmlns:ac="∾" xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:owl="&owl;" +xmlns:srx="&srx;" xmlns:http="&http;" xmlns:ldt="&ldt;" xmlns:dct="&dct;" @@ -103,22 +105,34 @@ exclude-result-prefixes="#all"> - - - - - - - + - + + + + + + + + + + + + + + + + + + + - + - + @@ -141,6 +155,12 @@ exclude-result-prefixes="#all"> + + + + + +