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); } /**
