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 <[email protected]>
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);
     }
 
     /**

Reply via email to