You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2024/09/02 13:53:16 UTC

(jena) branch main updated (2317a90fc7 -> 68b7a64197)

This is an automated email from the ASF dual-hosted git repository.

andy pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git


    from 2317a90fc7 Bump ver.jts from 1.19.0 to 1.20.0
     new 8654c07f23 GH-2675: Call JenaSystem.init in RDFLinkHTTPBuilder
     new 84f651217a Rename symbol to RIOT.symTurtleMultilineLiterals
     new adbf870af6 Use Iter.filterDrop
     new 2a5b445281 Use the same pattern for RDF core datatypes
     new ecd06266cc Tidy up RDF constants
     new 68b7a64197 Internal renaming of URN regex constants

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../src/main/java/org/apache/jena/riot/RIOT.java   | 15 ++++-
 .../org/apache/jena/riot/writer/TurtleShell.java   |  2 +-
 .../jena/datatypes/xsd/impl/RDFDirLangString.java  | 33 +++++++---
 .../jena/datatypes/xsd/impl/RDFLangString.java     | 38 +++++++----
 .../apache/jena/datatypes/xsd/impl/RDFhtml.java    | 43 ++++++++----
 .../apache/jena/datatypes/xsd/impl/RDFjson.java    | 48 ++++++++++----
 .../jena/datatypes/xsd/impl/XMLLiteralType.java    |  9 +--
 .../org/apache/jena/irix/IRIProviderJenaIRI.java   | 19 +++---
 .../main/java/org/apache/jena/sys/JenaSystem.java  |  5 +-
 .../main/java/org/apache/jena/vocabulary/RDF.java  | 77 +++++++++-------------
 .../service/enhancer/impl/util/BindingUtils.java   |  4 +-
 .../apache/jena/rdflink/RDFLinkHTTPBuilder.java    |  4 ++
 12 files changed, 185 insertions(+), 112 deletions(-)


(jena) 05/06: Tidy up RDF constants

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit ecd06266cc36a33987ad920105155c60f2d18956
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun Sep 1 09:11:21 2024 +0100

    Tidy up RDF constants
---
 .../main/java/org/apache/jena/vocabulary/RDF.java  | 77 +++++++++-------------
 1 file changed, 32 insertions(+), 45 deletions(-)

diff --git a/jena-core/src/main/java/org/apache/jena/vocabulary/RDF.java b/jena-core/src/main/java/org/apache/jena/vocabulary/RDF.java
index e162a9b737..bc71d0d0c5 100644
--- a/jena-core/src/main/java/org/apache/jena/vocabulary/RDF.java
+++ b/jena-core/src/main/java/org/apache/jena/vocabulary/RDF.java
@@ -58,35 +58,39 @@ public class RDF {
         return ResourceFactory.createProperty(uri, local);
     }
 
-    public static Property li(int i) {
-        return property("_" + i);
-    }
-
     public static final Resource    Alt             = resource("Alt");
     public static final Resource    Bag             = resource("Bag");
     public static final Resource    Property        = resource("Property");
     public static final Resource    Seq             = resource("Seq");
+    public static Property li(int i) {
+        return property("_" + i);
+    }
+
     public static final Resource    Statement       = resource("Statement");
     public static final Resource    List            = resource("List");
     public static final Resource    nil             = resource("nil");
 
+    // rdfs:comment "A class representing a compound literal."
+    public static final Resource CompoundLiteral    = resource("CompoundLiteral");
+
+    public static final Property    first           = property("first");
+    public static final Property    rest            = property("rest");
+    public static final Property    subject         = property("subject");
+    public static final Property    predicate       = property("predicate");
+    public static final Property    object          = property("object");
+    public static final Property    type            = property("type");
+    public static final Property    value           = property("value");
     // RDF 1.1 - the datatypes of language strings
     public static final Resource    langString      = resource("langString");
-
-    // RDF 1.1 - rdf:HTML
-    public static final Resource    HTML            = resource("HTML");
-
+    // RDF 1.2 - the datatypes of language strings with text direction
+    public static final Resource    dirLangString   = resource("dirLangString");
     // rdf:XMLLiteral
     public static final Resource    xmlLiteral      = resource("XMLLiteral");
-
-    // rdf:dirLangString
-    public static final Resource    dirLangString   = resource("dirLangString");
-
-    // rdf:JSON
+    // RDF 1.2 - rdf:JSON
     public static final Resource    JSON            = resource("JSON");
+    // RDF 1.1 - rdf:HTML
+    public static final Resource    HTML            = resource("HTML");
 
-    // rdfs:comment "A class representing a compound literal."
-    public static final Resource CompoundLiteral    = resource("CompoundLiteral");
     /**
      * This property is used explicitly in facet restrictions.
      * Also, it can be used as a literal type
@@ -94,15 +98,8 @@ public class RDF {
      *
      * @see <a href="https://www.w3.org/TR/rdf-plain-literal">rdf:PlainLiteral: A Datatype for RDF Plain Literals (Second Edition)</a>
      */
-    public final static Resource    PlainLiteral    = resource("PlainLiteral");
+    public static final Resource    PlainLiteral    = resource("PlainLiteral");
 
-    public static final Property    first           = property("first");
-    public static final Property    rest            = property("rest");
-    public static final Property    subject         = property("subject");
-    public static final Property    predicate       = property("predicate");
-    public static final Property    object          = property("object");
-    public static final Property    type            = property("type");
-    public static final Property    value           = property("value");
     /**
      * This property is used in facet restrictions.
      * The facet {@code rdf:langRange} can be used to refer to a subset of strings containing the language tag.
@@ -122,29 +119,18 @@ public class RDF {
     // The constant "rtl" (right to left)
     public static final String dirRTL               = TextDirection.RTL.direction();
 
-    public static final RDFDatatype dtRDFHTML       = RDFhtml.rdfHTML;
     public static final RDFDatatype dtLangString    = RDFLangString.rdfLangString;
     public static final RDFDatatype dtDirLangString = RDFDirLangString.rdfDirLangString;
     public static final RDFDatatype dtXMLLiteral    = XMLLiteralType.rdfXMLLiteral;
-
     // Added to the RDF namespace December 2019
     // https://lists.w3.org/Archives/Public/semantic-web/2019Dec/0027.html
-
     // rdfs:comment "The datatype of RDF literals storing JSON content."
     public static final RDFDatatype dtRDFJSON       = RDFjson.rdfJSON;
+    public static final RDFDatatype dtRDFHTML       = RDFhtml.rdfHTML;
 
-    /** RDF constants are used during Jena initialization.
-     * <p>
-     * If that initialization is triggered by touching the RDF class,
-     * then the constants are null.
-     * <p>
-     * So for these cases, call this helper class: Init.function()
-     */
-    @Deprecated
-    public static class Init {
-
-        // JENA-1294
-        // Version that calculates the constant when called.
+    @Deprecated(forRemoval = true)
+    private static class Init {
+        // This should not be needed anymore.
         public static Resource Alt()                { return resource( "Alt" ); }
         public static Resource Bag()                { return resource( "Bag" ); }
         // Java8 bug : https://bugzilla.redhat.com/show_bug.cgi?id=1423421
@@ -176,17 +162,17 @@ public class RDF {
         public static Property language()           { return property( "language" ); }
         public static Property direction()          { return property( "direction" ); }
 
-        public static RDFDatatype dtRDFHTML()       { return RDFhtml.rdfHTML; }
         public static RDFDatatype dtLangString()    { return RDFLangString.rdfLangString; }
         public static RDFDatatype dtDirLangString() { return RDFDirLangString.rdfDirLangString; }
         public static RDFDatatype dtXMLLiteral()    { return XMLLiteralType.rdfXMLLiteral; }
         public static RDFDatatype dtRDFJSON()       { return RDFjson.rdfJSON; }
+        public static RDFDatatype dtRDFHTML()       { return RDFhtml.rdfHTML; }
     }
 
     /**
-        The same items of vocabulary, but at the Node level, parked inside a
-        nested class so that there's a simple way to refer to them.
-    */
+     * The main items of RDF vocabulary, but at the Node level, parked inside a nested
+     * class so that there's a simple way to refer to them.
+     */
     @SuppressWarnings("hiding")
     public static final class Nodes
     {
@@ -194,9 +180,11 @@ public class RDF {
         public static final Node Bag            = RDF.Bag.asNode();
         public static final Node Property       = RDF.Property.asNode();
         public static final Node Seq            = RDF.Seq.asNode();
+        public static Node li(int i)            { return RDF.li(i).asNode(); }
         public static final Node Statement      = RDF.Statement.asNode();
         public static final Node List           = RDF.List.asNode();
         public static final Node nil            = RDF.nil.asNode();
+        public static final Node CompoundLiteral = RDF.CompoundLiteral.asNode();
         public static final Node first          = RDF.first.asNode();
         public static final Node rest           = RDF.rest.asNode();
         public static final Node subject        = RDF.subject.asNode();
@@ -206,15 +194,14 @@ public class RDF {
         public static final Node value          = RDF.value.asNode();
         public static final Node langString     = RDF.langString.asNode();
         public static final Node dirLangString  = RDF.dirLangString.asNode();
-        public static final Node HTML           = RDF.HTML.asNode();
         public static final Node xmlLiteral     = RDF.xmlLiteral.asNode();
+        public static final Node HTML           = RDF.HTML.asNode();
         // Added to the RDF namespace December 2019
         // https://lists.w3.org/Archives/Public/semantic-web/2019Dec/0027.html
         public static final Node JSON           = RDF.JSON.asNode();
-        public static final Node CompoundLiteral = RDF.CompoundLiteral.asNode();
+        public static final Node langRange      = RDF.langRange.asNode();
         public static final Node language       = RDF.language.asNode();
         public static final Node direction      = RDF.direction.asNode();
         public static final Node PlainLiteral   = RDF.PlainLiteral.asNode();
-        public static final Node langRange      = RDF.langRange.asNode();
     }
 }


(jena) 03/06: Use Iter.filterDrop

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit adbf870af66f557e659de7da695ebd19f61451a8
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sat Aug 31 22:59:21 2024 +0100

    Use Iter.filterDrop
---
 .../apache/jena/sparql/service/enhancer/impl/util/BindingUtils.java   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/jena-extras/jena-serviceenhancer/src/main/java/org/apache/jena/sparql/service/enhancer/impl/util/BindingUtils.java b/jena-extras/jena-serviceenhancer/src/main/java/org/apache/jena/sparql/service/enhancer/impl/util/BindingUtils.java
index 5c7d32fc13..131d6e6665 100644
--- a/jena-extras/jena-serviceenhancer/src/main/java/org/apache/jena/sparql/service/enhancer/impl/util/BindingUtils.java
+++ b/jena-extras/jena-serviceenhancer/src/main/java/org/apache/jena/sparql/service/enhancer/impl/util/BindingUtils.java
@@ -52,12 +52,12 @@ public class BindingUtils {
 
     /** Return a new binding with all non-null-valued and non-excluded variables projected */
     public static Binding project(Binding binding, Iterator<Var> vars, Var exclusion) {
-        return project(binding, Iter.notFilter(vars, v -> Objects.equals(v, exclusion)));
+        return project(binding, Iter.filterDrop(vars, v -> Objects.equals(v, exclusion)));
     }
 
     /** Return a new binding with all non-null-valued and non-excluded variables projected */
     public static Binding project(Binding binding, Iterator<Var> vars, Set<Var> exclusions) {
-        return project(binding, Iter.notFilter(vars, exclusions::contains));
+        return project(binding, Iter.filterDrop(vars, exclusions::contains));
     }
 
     public static <C extends Collection<Var>> C addAll(C acc, Binding binding) {


(jena) 06/06: Internal renaming of URN regex constants

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 68b7a64197f614bd70b88cceaad500f1bc5ced7e
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun Sep 1 15:16:39 2024 +0100

    Internal renaming of URN regex constants
---
 .../java/org/apache/jena/irix/IRIProviderJenaIRI.java | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/jena-core/src/main/java/org/apache/jena/irix/IRIProviderJenaIRI.java b/jena-core/src/main/java/org/apache/jena/irix/IRIProviderJenaIRI.java
index fb97827fec..222e0e1893 100644
--- a/jena-core/src/main/java/org/apache/jena/irix/IRIProviderJenaIRI.java
+++ b/jena-core/src/main/java/org/apache/jena/irix/IRIProviderJenaIRI.java
@@ -30,7 +30,7 @@ import org.apache.jena.iri.*;
  */
 public class IRIProviderJenaIRI implements IRIProvider {
 
-    // Notes:
+    // Notes about jena-iri
     // jena-iri:IRI.create is silent.
     // jena-iri:IRI.construct throws errors.
     // jena-iri:IRI.resolve is the same as create
@@ -359,7 +359,7 @@ public class IRIProviderJenaIRI implements IRIProvider {
     private static String UNRESERVED = "-0-9a-z._~";
     // Or use \p{IsAlphabetic}
     private static String UCSCHAR = "\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF";
-            /*
+            /* Beyond 16 bits:
             / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD
             / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD
             / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD
@@ -376,12 +376,15 @@ public class IRIProviderJenaIRI implements IRIProvider {
     private static String PCHARS1 = UNRESERVED+SUB_DELIMS+":"+"@";
     private static String PCHAR = "(?:(?:["+PCHARS1+"]|"+PCT+"))";
 
-    private static String URN_COMP_X = "/\\?";
-    private static String URN_RQ_COMP_CHAR = PCHAR+URN_COMP_X;
-    private static String URN_R_COMP = "(?:\\?\\+["+URN_RQ_COMP_CHAR+"]+)?";
-    private static String URN_Q_COMP = "(?:\\?=["+URN_RQ_COMP_CHAR+"]+)?";
-    private static String URN_F_COMP = "(?:#["+PCHAR+"]*)?";
-    private static String URN_UUID_REGEXP = "^urn:uuid:"+UUID_BASE+URN_R_COMP+URN_Q_COMP+URN_F_COMP+"$";
+    // Elements of components.
+    private static String URN_COMPONENT_X = "/\\?";     // "/" and "?"
+    private static String URN_RQ_COMPONENT_CHAR = PCHAR+URN_COMPONENT_X;
+    // Optional components
+    private static String URN_R_COMPONENT = "(?:\\?\\+["+URN_RQ_COMPONENT_CHAR+"]+)?";
+    private static String URN_Q_COMPONENT = "(?:\\?=["+URN_RQ_COMPONENT_CHAR+"]+)?";
+    private static String URN_F_COMPONENT = "(?:#["+PCHAR+"]*)?";
+    // scheme , NID, uuid, optional URN_R_COMPONENT, optional URN_Q_COMPONENT, optional F_COMPONENT
+    private static String URN_UUID_REGEXP = "^urn:uuid:"+UUID_BASE+URN_R_COMPONENT+URN_Q_COMPONENT+URN_F_COMPONENT+"$";
 
     private static Pattern URN_UUID_PATTERN = Pattern.compile(URN_UUID_REGEXP, Pattern.CASE_INSENSITIVE);
 


(jena) 02/06: Rename symbol to RIOT.symTurtleMultilineLiterals

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 84f651217acb6543e5b62cc02dfd534f2bec6dcb
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sat Aug 31 22:56:08 2024 +0100

    Rename symbol to RIOT.symTurtleMultilineLiterals
---
 jena-arq/src/main/java/org/apache/jena/riot/RIOT.java     | 15 ++++++++++++---
 .../java/org/apache/jena/riot/writer/TurtleShell.java     |  2 +-
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java b/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java
index 5eec2619ee..f69d6aa453 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java
@@ -51,9 +51,6 @@ public class RIOT {
     /** The root package name for RIOT */
     public static final String PATH    = "org.apache.jena.riot" ;
 
-    /** Control of multiline literals */
-    public static final Symbol multilineLiterals = Symbol.create("riot.multiline_literals") ;
-
     /** The system-wide context, shared with ARQ and other modules. */
     private static Context systemGlobalContext = new Context();
 
@@ -158,4 +155,16 @@ public class RIOT {
      * Printing style. Whether to use a "wide" or "long" indentation style.
      */
     public static final Symbol symTurtleIndentStyle = SystemARQ.allocSymbol(TURTLE_SYMBOL_BASE, "indentStyle");
+
+    /**
+     * Print literals with newlines in multiple line form, using triple quotes.
+     */
+    public static final Symbol symTurtleMultilineLiterals = SystemARQ.allocSymbol(TURTLE_SYMBOL_BASE, "multiline_literals") ;
+
+    /**
+     * Control of multiline literals.
+     * @deprecated Use {@link #symTurtleMultilineLiterals}.
+     */
+    @Deprecated(forRemoval = true)
+    public static final Symbol multilineLiterals = symTurtleMultilineLiterals;
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleShell.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleShell.java
index bdb7827f58..73072a7eb7 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleShell.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleShell.java
@@ -77,7 +77,7 @@ public abstract class TurtleShell {
     }
 
     static public NodeFormatter createNodeFormatter(PrefixMap pmap, String baseURI, Context context) {
-        if ( context != null && context.isTrue(RIOT.multilineLiterals) )
+        if ( context != null && context.isTrue(RIOT.symTurtleMultilineLiterals) )
             return new NodeFormatterTTL_MultiLine(baseURI, pmap, NodeToLabel.createScopeByDocument());
         else
             return new NodeFormatterTTL(baseURI, pmap, NodeToLabel.createScopeByDocument());


(jena) 04/06: Use the same pattern for RDF core datatypes

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 2a5b445281ea87b070ccffc2bed4cce79b61dd92
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun Sep 1 09:10:49 2024 +0100

    Use the same pattern for RDF core datatypes
---
 .../jena/datatypes/xsd/impl/RDFDirLangString.java  | 33 ++++++++++-----
 .../jena/datatypes/xsd/impl/RDFLangString.java     | 38 +++++++++++------
 .../apache/jena/datatypes/xsd/impl/RDFhtml.java    | 43 +++++++++++++------
 .../apache/jena/datatypes/xsd/impl/RDFjson.java    | 48 ++++++++++++++++------
 .../jena/datatypes/xsd/impl/XMLLiteralType.java    |  9 ++--
 5 files changed, 119 insertions(+), 52 deletions(-)

diff --git a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFDirLangString.java b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFDirLangString.java
index 0676cd8984..fde1913b04 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFDirLangString.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFDirLangString.java
@@ -18,27 +18,40 @@
 
 package org.apache.jena.datatypes.xsd.impl;
 
+import java.util.Objects;
+
 import org.apache.jena.datatypes.BaseDatatype ;
 import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.graph.impl.LiteralLabel ;
+import org.apache.jena.vocabulary.RDF;
 
 /**
- * rdf:dirLangString (literal with language and initial text direction)
- * This covers the unusual case of "foo"^^rdf:langString or "foo"^^rdf:dirLangString.
- * When there is a language tag, there is a lexical form but it is in two parts lex@lang or lex@lang--ltr
+ * {@code rdf:dirLangString} - a literal with language and initial text direction.
+ * <p>
+ * This covers the unusual case of {@code "foo"^^rdf:dirLangString}.
  */
 
 public class RDFDirLangString extends BaseDatatype implements RDFDatatype {
 
-    /** Singleton instance */
-    // Include the string for the RDF namespace, do not use RDF.getURI() to avoid an initializer circularity.
-    public static final RDFDatatype rdfDirLangString = new RDFDirLangString("http://www.w3.org/1999/02/22-rdf-syntax-ns#dirLangString");
+    public static final String rdfDirLangStringURI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#dirLangString";
+
+    /**
+     * Singleton instance
+     * <p>
+     * Prefer {@link RDF#dtDirLangString} in applications.
+     */
+    public static final RDFDatatype rdfDirLangString = new RDFDirLangString();
 
     /**
-     * Private constructor.
+     * Test where an {@link RDFDatatype} is that for {@code rdf:dirLangString}.
      */
-    private RDFDirLangString(String uri) {
-        super(uri);
+    public static boolean isRDFDirLangString(RDFDatatype rdfDatatype) {
+        Objects.requireNonNull(rdfDatatype);
+        return rdfDirLangStringURI.equals(rdfDatatype.getURI());
+    }
+
+    private RDFDirLangString() {
+        super(rdfDirLangStringURI);
     }
 
     /**
@@ -49,7 +62,7 @@ public class RDFDirLangString extends BaseDatatype implements RDFDatatype {
         return isEqualByTerm(value1, value2) ;
     }
 
-    // This covers the unusual case of "foo"^^"rdf:langString" or "foo"^^rdf:dirLangString.
+    /** This covers the unusual case of "foo"^^rdf:dirLangString. */
     @Override
     public Object parse(String lexicalForm) { return lexicalForm ; }
 
diff --git a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFLangString.java b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFLangString.java
index 958991ca15..fe78888abc 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFLangString.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFLangString.java
@@ -18,26 +18,42 @@
 
 package org.apache.jena.datatypes.xsd.impl;
 
+import java.util.Objects;
+
 import org.apache.jena.datatypes.BaseDatatype ;
 import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.graph.impl.LiteralLabel ;
+import org.apache.jena.vocabulary.RDF;
 
-/** rdf:langString.
- * This covers the unusual case of "foo"^^rdf:langString
- * When there is a language tag, there is a lexical form but it is in two parts lex@lang
+/**
+ * {@code rdf:dirLangString} - a literal with language and initial text direction.
+ * <p>
+ * This covers the unusual case of {@code "foo"^^rdf:langString}.
+ * When there is a language tag, there is a lexical form but it is in two parts lex@lang.
  * This is not rdf:plainLiteral!
  */
 
 public class RDFLangString extends BaseDatatype implements RDFDatatype {
-    /** Singleton instance */
-    // Include the string for the RDF namespace, not use RDF.getURI(), to avoid an initializer circularity
-    public static final RDFDatatype rdfLangString = new RDFLangString("http://www.w3.org/1999/02/22-rdf-syntax-ns#langString");
+
+    public static final String rdfLangStringURI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString";
+
+    /**
+     * Singleton instance
+     * <p>
+     * Prefer {@link RDF#dtLangString} in applications.
+     */
+    public static final RDFDatatype rdfLangString = new RDFLangString();
 
     /**
-     * Private constructor.
+     * Test where an {@link RDFDatatype} is that for {@code rdf:langString}.
      */
-    private RDFLangString(String uri) {
-        super(uri);
+    public static boolean isRDFLangString(RDFDatatype rdfDatatype) {
+        Objects.requireNonNull(rdfDatatype);
+        return rdfLangStringURI.equals(rdfDatatype.getURI());
+    }
+
+    private RDFLangString() {
+        super(rdfLangStringURI);
     }
 
     /**
@@ -48,9 +64,7 @@ public class RDFLangString extends BaseDatatype implements RDFDatatype {
         return isEqualByTerm(value1, value2) ;
     }
 
-    // This covers the unusual case of "foo"^^"rdf:langString"
-    // When there is a language tag, there is a lexcial form but it is in two parts lex@lang
-    // This is not rdf:plainLiteral!
+    /** This covers the unusual case of "foo"^^rdf:langString. */
     @Override
     public Object parse(String lexicalForm) { return lexicalForm ; }
 
diff --git a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFhtml.java b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFhtml.java
index 94f4a985ed..5ca0945419 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFhtml.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFhtml.java
@@ -18,37 +18,54 @@
 
 package org.apache.jena.datatypes.xsd.impl;
 
+import java.util.Objects;
+
 import org.apache.jena.datatypes.BaseDatatype ;
 import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.graph.impl.LiteralLabel ;
+import org.apache.jena.vocabulary.RDF;
 
-/** rdf:html.
- * This only implements syntactic equality, not value equality (parsed HTML5, DOM normalized)    
+/**
+ * <a href="https://www.w3.org/TR/rdf-concepts/#section-html">rdf:HTML</a>.
+ * <p>
+ * This only implements syntactic equality, not value equality (parsed HTML5, DOM normalized)
  */
-
 public class RDFhtml extends BaseDatatype implements RDFDatatype {
-    /** Singleton instance */
-    // Include the string for the RDF namespace, not use RDF.getURI(), to avoid an initializer circularity
-    public static final RDFDatatype rdfHTML = new RDFhtml("http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML");
-    
+
+    public static String RDFhtmlURI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML";
+
+    /**
+     * Singleton instance
+     * <p>
+     * Prefer {@link RDF#dtRDFHTML} in applications.
+     */
+    public static final RDFDatatype rdfHTML = new RDFhtml();
+
     /**
-     * Private constructor.
+     * Test where an {@link RDFDatatype} is that for {@code rdf:HTML}.
      */
-    private RDFhtml(String uri) {
-        super(uri);
+    public static boolean isXMLLiteral(RDFDatatype rdfDatatype) {
+        Objects.requireNonNull(rdfDatatype);
+        return RDFhtmlURI.equals(rdfDatatype.getURI());
+    }
+
+    private RDFhtml() {
+        // Include the string for the RDF namespace.
+        // Do not use RDF.dtRDFHTML.getURI() to avoid an initializer circularity
+        super(RDFhtmlURI);
     }
 
     /**
-     * Compares two instances of values of the given datatype. 
+     * Compares two instances of values of the given datatype.
      */
     @Override
     public boolean isEqual(LiteralLabel value1, LiteralLabel value2) {
         return isEqualByTerm(value1, value2) ;
     }
-    
+
     @Override
     public Object parse(String lexicalForm) { return lexicalForm ; }
-    
+
     @Override
     public String unparse(Object value) { return value.toString(); }
 }
diff --git a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFjson.java b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFjson.java
index d2ee6a4a1d..6df2a4bb88 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFjson.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/RDFjson.java
@@ -18,37 +18,59 @@
 
 package org.apache.jena.datatypes.xsd.impl;
 
+import java.util.Objects;
+
 import org.apache.jena.datatypes.BaseDatatype ;
 import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.graph.impl.LiteralLabel ;
+import org.apache.jena.vocabulary.RDF;
 
-/** rdf:json.
- * This only implements syntactic equality, not value equality.    
+/**
+ * <a href="https://www.w3.org/TR/rdf-concepts/#section-json">rdf:JSON</a>.
+ * <p>
+ * This only implements syntactic equality, not value equality.
  */
-
 public class RDFjson extends BaseDatatype implements RDFDatatype {
-    /** Singleton instance */
-    // Include the string for the RDF namespace, not use RDF.getURI(), to avoid an initializer circularity
-    public static final RDFDatatype rdfJSON = new RDFjson("http://www.w3.org/1999/02/22-rdf-syntax-ns#JSON");
-    
+
+    public static final String rdfJsonURI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#JSON";
+
+    /**
+     * Singleton instance.
+     * <p>
+     * Prefer {@link RDF#dtRDFJSON} in applications.
+     */
+    public static final RDFDatatype rdfJSON = new RDFjson();
+
     /**
-     * Private constructor.
+     * @deprecated Prefer {@link #rdfJsonURI}.
      */
-    private RDFjson(String uri) {
-        super(uri);
+    @Deprecated
+    public static String RDFjson = rdfJsonURI;
+
+    /**
+     * Test where an {@link RDFDatatype} is that for {@code rdf:XMLLiteral}.
+     */
+    public static boolean isRDFjson(RDFDatatype rdfDatatype) {
+        Objects.requireNonNull(rdfDatatype);
+        return rdfJsonURI.equals(rdfDatatype.getURI());
+    }
+
+    private RDFjson() {
+        // Include the string for the RDF namespace, not use RDF.getURI(), to avoid an initializer circularity
+        super(rdfJsonURI);
     }
 
     /**
-     * Compares two instances of values of the given datatype. 
+     * Compares two instances of values of the given datatype.
      */
     @Override
     public boolean isEqual(LiteralLabel value1, LiteralLabel value2) {
         return isEqualByTerm(value1, value2) ;
     }
-    
+
     @Override
     public Object parse(String lexicalForm) { return lexicalForm ; }
-    
+
     @Override
     public String unparse(Object value) { return value.toString(); }
 }
diff --git a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XMLLiteralType.java b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XMLLiteralType.java
index 741f4d0a68..6f2a3d89d0 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XMLLiteralType.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XMLLiteralType.java
@@ -62,18 +62,19 @@ import org.xml.sax.SAXParseException;
 public class XMLLiteralType extends BaseDatatype implements RDFDatatype {
 
     public static String XMLLiteralTypeURI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral";
+
     /**
      * Singleton instance of the rdf:XMLLIteral datatype.
      * Prefer {@link RDF#dtXMLLiteral} in applications.
      */
-    public static final RDFDatatype rdfXMLLiteral = new XMLLiteralType(XMLLiteralTypeURI);
+    public static final RDFDatatype rdfXMLLiteral = new XMLLiteralType();
 
     /**
      * Singleton instance (legacy name)
      * @deprecated Prefer the constant {@link #rdfXMLLiteral} or {@link RDF#dtXMLLiteral}
      */
     @Deprecated
-    public static final RDFDatatype theXMLLiteralType = new XMLLiteralType(XMLLiteralTypeURI);
+    public static final RDFDatatype theXMLLiteralType = rdfXMLLiteral;
 
     private static final String  xmlWrapperTagName  = "xml-literal-fragment";
     private static final String  xmlWrapperTagStart = "<"+xmlWrapperTagName+">";
@@ -87,8 +88,8 @@ public class XMLLiteralType extends BaseDatatype implements RDFDatatype {
         return XMLLiteralTypeURI.equals(rdfDatatype.getURI());
     }
 
-    private XMLLiteralType(String uri) {
-        super(uri);
+    private XMLLiteralType() {
+        super(XMLLiteralTypeURI);
     }
 
     /**


(jena) 01/06: GH-2675: Call JenaSystem.init in RDFLinkHTTPBuilder

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 8654c07f23a892c03a7367981d814c3c8b094f62
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sat Aug 31 22:55:28 2024 +0100

    GH-2675: Call JenaSystem.init in RDFLinkHTTPBuilder
---
 jena-core/src/main/java/org/apache/jena/sys/JenaSystem.java          | 5 ++++-
 .../src/main/java/org/apache/jena/rdflink/RDFLinkHTTPBuilder.java    | 4 ++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/jena-core/src/main/java/org/apache/jena/sys/JenaSystem.java b/jena-core/src/main/java/org/apache/jena/sys/JenaSystem.java
index 6852cb6e30..09871f83b9 100644
--- a/jena-core/src/main/java/org/apache/jena/sys/JenaSystem.java
+++ b/jena-core/src/main/java/org/apache/jena/sys/JenaSystem.java
@@ -77,17 +77,20 @@ public class JenaSystem {
     }
 
     public static void init() {
+        // Once jena is initialized, all calls are an immediate return.
         if ( initialized )
             return ;
+        // Overlapping attempts to perform initialization will block on the synchronized.
         synchronized(JenaSystem.class) {
             if ( initialized )
                 return ;
-            initialized = true;
             setup();
             if ( DEBUG_INIT )
                 singleton.debug(DEBUG_INIT);
             singleton.initialize();
             singleton.debug(false);
+            // Last so overlapping initialization waits on the synchronized
+            initialized = true;
         }
     }
 
diff --git a/jena-rdfconnection/src/main/java/org/apache/jena/rdflink/RDFLinkHTTPBuilder.java b/jena-rdfconnection/src/main/java/org/apache/jena/rdflink/RDFLinkHTTPBuilder.java
index a11ad05795..8db4740a58 100644
--- a/jena-rdfconnection/src/main/java/org/apache/jena/rdflink/RDFLinkHTTPBuilder.java
+++ b/jena-rdfconnection/src/main/java/org/apache/jena/rdflink/RDFLinkHTTPBuilder.java
@@ -30,9 +30,13 @@ import org.apache.jena.sparql.core.Transactional;
 import org.apache.jena.sparql.core.TransactionalLock;
 import org.apache.jena.sparql.exec.http.QuerySendMode;
 import org.apache.jena.sparql.exec.http.UpdateSendMode;
+import org.apache.jena.sys.JenaSystem;
 
 /** Builder class for {@link RDFLinkHTTP} */
 public class RDFLinkHTTPBuilder {
+
+    static { JenaSystem.init(); }
+
     /*package*/ static String SameAsDestination  = "";
 
     protected Transactional txnLifecycle  = TransactionalLock.createMRPlusSW();