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 2020/07/02 11:34:45 UTC

[jena] branch master updated: JENA-1933: Add const Lang.SHACLC

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

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


The following commit(s) were added to refs/heads/master by this push:
     new bc99391  JENA-1933: Add const Lang.SHACLC
     new 3fb6aba  Merge pull request #771 from afs/lang-init
bc99391 is described below

commit bc99391a14d82cf98a3960e3fc0bcafce8a95975
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Wed Jul 1 23:05:12 2020 +0100

    JENA-1933: Add const Lang.SHACLC
    
    Tidy up formatting.
---
 .../src/main/java/org/apache/jena/riot/Lang.java   |  64 +++---
 .../java/org/apache/jena/riot/LangBuilder.java     |  37 ++--
 .../main/java/org/apache/jena/riot/RDFFormat.java  |  32 ++-
 .../java/org/apache/jena/riot/RDFLanguages.java    | 239 ++++++++++-----------
 .../org/apache/jena/riot/RDFParserRegistry.java    |  45 ++--
 .../java/org/apache/jena/shacl/compact/SHACLC.java |  10 +-
 6 files changed, 197 insertions(+), 230 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/riot/Lang.java b/jena-arq/src/main/java/org/apache/jena/riot/Lang.java
index 625e970..0c7568d 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/Lang.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/Lang.java
@@ -28,65 +28,65 @@ import org.apache.jena.atlas.web.ContentType ;
  *  A language has a name, some alternative names,
  *  a content type,  some alternative content types,
  *  and a list of associated file extensions.
- *  Names, content types and file extensions must be unique to one language. 
- *  To create a Lang constant, use {@link LangBuilder} and 
+ *  Names, content types and file extensions must be unique to one language.
+ *  To create a Lang constant, use {@link LangBuilder} and
  *  register with {@link RDFLanguages}.
  */
-public class Lang 
+public class Lang
 {
-    //  public static final Lang RDFXML = RDFLanguages.RDFXML ; 
-    //  public static final Lang NTRIPLES = RDFLanguages.NTriples ; 
-    //  public static final Lang N3 = RDFLanguages.N3 ; 
-    //  public static final Lang TURTLE = RDFLanguages.Turtle ; 
-    //  public static final Lang RDFJSON = RDFLanguages.RDFJSON ; 
-    //  public static final Lang NQUADS = RDFLanguages.NQuads ; 
-    //  public static final Lang TRIG = RDFLanguages.TriG ; 
-
     // To avoid an initialization circularity, these are set by RDFLanguages.
     static { RDFLanguages.init() ; }
 
     /** <a href="http://www.w3.org/TR/REC-rdf-syntax/">RDF/XML</a> */
     public static Lang RDFXML ;
-    
+
     /** <a href="http://www.w3.org/TR/turtle/">Turtle</a>*/
     public static Lang TURTLE ;
-    
+
     /** Alternative constant for {@link #TURTLE} */
     public static Lang TTL ;
-    
+
     /** N3 (treat as Turtle) */
     public static Lang N3 ;
-    
+
     /** <a href="http://www.w3.org/TR/n-triples/">N-Triples</a>*/
     public static Lang NTRIPLES ;
-    
+
     /** Alternative constant for {@link #NTRIPLES} */
     public static Lang NT ;
 
     /** <a href="http://www.w3.org/TR/json-ld/">JSON-LD</a>. */
     public static Lang JSONLD ;
-    
-    /** <a href="http://www.w3.org/TR/rdf-json/">RDF/JSON</a>.  This is not <a href="http://www.w3.org/TR/json-ld/">JSON-LD</a>. */
+
+    /**
+     * <a href="http://www.w3.org/TR/rdf-json/">RDF/JSON</a>.
+     *  This is not <a href="http://www.w3.org/TR/json-ld/">JSON-LD</a>.
+     *
+     *  @see #JSONLD
+     */
     public static Lang RDFJSON ;
-    
+
     /** <a href="http://www.w3.org/TR/trig/">TriG</a> */
     public static Lang TRIG ;
-    
+
     /** <a href="http://www.w3.org/TR/n-quads">N-Quads</a> */
     public static Lang NQUADS ;
-    
+
     /** Alternative constant {@link #NQUADS} */
     public static Lang NQ ;
 
-    //** The RDF syntax "RDF Thrift" : see http://jena.apache.org/documentation/io */ 
+    /** The RDF syntax <a href="https://jena.apache.org/documentation/io/rdf-binary.html">RDF Thrift</a> */
     public static Lang RDFTHRIFT ;
-    
+
+    /** <a href="https://w3c.github.io/shacl/shacl-compact-syntax/">SHACL Compact Syntax</a> (2020-07-01) */
+    public static Lang SHACLC;
+
     /** "CSV" - Used in various ways. */
     public static Lang CSV ;
 
     /** "TSV" - Used in various ways. */
     public static Lang TSV ;
-    
+
     /** <a href="http://www.hpl.hp.com/techreports/2004/HPL-2004-56.html">TriX</a> */
     public static Lang TRIX ;
 
@@ -126,15 +126,15 @@ public class Lang
         List<String> _fileExtensions = copy(fileExt) ;
         fileExtensions = Collections.unmodifiableList(_fileExtensions) ;
     }
-    
+
     static <T> List<T> copy(List<T> original) {
         List<T> x = new ArrayList<>() ;
         x.addAll(original) ;
         return x ;
     }
-    
+
     @Override
-    public int hashCode() { return label.hashCode() ; } 
+    public int hashCode() { return label.hashCode() ; }
 
     @Override
     public boolean equals(Object other) {
@@ -144,7 +144,7 @@ public class Lang
             return false ;
 
         Lang otherLang = (Lang)other ;
-        return 
+        return
             this.label == otherLang.label &&
             this.contentType.equals(otherLang.contentType) &&
             this.altContentTypes.equals(otherLang.altContentTypes) &&
@@ -153,8 +153,8 @@ public class Lang
 
     public String getName()                     { return label ; }
     public ContentType getContentType()         { return contentType ; }
-    
-    /** As an HTTP Content-Type field value */ 
+
+    /** As an HTTP Content-Type field value */
     public String getHeaderString()             { return contentType.toHeaderString() ; }
     public String getLabel()                    { return label ; }
     public List<String> getAltNames()           { return altLabels ; }
@@ -163,8 +163,8 @@ public class Lang
 
     @Override
     public String toString()  { return "Lang:"+label ; }
-    
-    public String toLongString() { 
+
+    public String toLongString() {
         String x = "Lang:" + label + " " + getContentType() ;
         if (getAltNames().size() > 0)
             x = x + " " + getAltNames() ;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/LangBuilder.java b/jena-arq/src/main/java/org/apache/jena/riot/LangBuilder.java
index f9024b2..499ff00 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/LangBuilder.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/LangBuilder.java
@@ -21,10 +21,8 @@ package org.apache.jena.riot;
 import java.util.ArrayList ;
 import java.util.List ;
 
-
-
 /** Builder for RDF languages (Syntaxes).
- * 
+ *
  *  Example usage:
  *  <pre>
  *  LangBuilder.create()
@@ -34,12 +32,11 @@ import java.util.List ;
  *             .addFileExtensions("ext1", "ext2")
  *             .build()
  *  </pre>
- * 
- * */
+ */
 
 public class LangBuilder {
     public String lang ;
-    public String officialContentType ; 
+    public String officialContentType ;
     public List<String> altNames = new ArrayList<>() ;
     public List<String> contentTypes = new ArrayList<>() ;
     public List<String> fileExtensions = new ArrayList<>() ;
@@ -49,8 +46,8 @@ public class LangBuilder {
     {
         return new LangBuilder() ;
     }
-    
-    /** Create a builder - convenience operation to 
+
+    /** Create a builder - convenience operation to
      * take the language name and content type
      * which should be set if at all possible.
      * @param langname
@@ -59,26 +56,26 @@ public class LangBuilder {
     public static LangBuilder create(String langname, String officialContentType)
     {
         return new LangBuilder()
-            .langName(langname)
-            .contentType(officialContentType) ;
+                    .langName(langname)
+                    .contentType(officialContentType) ;
     }
-    
+
     private LangBuilder() {}
-    
+
     /** Add alternative names */
     public LangBuilder addAltNames(String...x)
-    { 
+    {
         copy(x, altNames) ;
         return this ;
     }
-    
+
     /** Add alternative content types */
     public LangBuilder addAltContentTypes(String...x)
-    { 
+    {
         copy(x, contentTypes) ;
         return this ;
     }
-    
+
     /** Add file name extensions */
     public LangBuilder addFileExtensions(String...x)
     {
@@ -92,7 +89,7 @@ public class LangBuilder {
             if ( !dst.contains(str) )
                 dst.add(str) ;
     }
-    
+
     /** Construct the {@link Lang} */
     public Lang build()
     {
@@ -105,7 +102,7 @@ public class LangBuilder {
 
     private void error(String message)
     {
-        throw new RiotException(message) ; 
+        throw new RiotException(message) ;
     }
 
     public String getContentType()
@@ -114,7 +111,7 @@ public class LangBuilder {
     }
 
     /** Set the main content type for this language.
-     * If there is an officially registered, preferred type, this should be that.  
+     * If there is an officially registered, preferred type, this should be that.
      */
     public LangBuilder contentType(String officialContentType)
     {
@@ -122,7 +119,7 @@ public class LangBuilder {
         return this ;
     }
 
-    /** Set the language label.  A system wide, unique short name */ 
+    /** Set the language label. A system wide, unique short name */
     public LangBuilder langName(String langname)
     {
         this.lang = langname ;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFFormat.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFFormat.java
index ea3c2ba..d154f42 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFFormat.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFFormat.java
@@ -18,8 +18,6 @@
 
 package org.apache.jena.riot ;
 
-import static org.apache.jena.riot.RDFLanguages.THRIFT ;
-
 import java.util.Objects;
 
 /** Constants for writable formats */
@@ -47,36 +45,36 @@ public class RDFFormat {
     public static final RDFFormat        TURTLE         = TURTLE_PRETTY ;
     /** Turtle - short name */
     public static final RDFFormat        TTL            = TURTLE_PRETTY ;
-    /** Turtle - write in blocks of triples, with same subject, no nested object or RDF lists */ 
+    /** Turtle - write in blocks of triples, with same subject, no nested object or RDF lists */
     public static final RDFFormat        TURTLE_BLOCKS  = new RDFFormat(Lang.TURTLE, BLOCKS) ;
-    /** Turtle - one line per triple  */ 
+    /** Turtle - one line per triple  */
     public static final RDFFormat        TURTLE_FLAT    = new RDFFormat(Lang.TURTLE, FLAT) ;
 
-    /** N-Triples in UTF-8 */ 
+    /** N-Triples in UTF-8 */
     public static final RDFFormat        NTRIPLES_UTF8  = new RDFFormat(Lang.NTRIPLES, UTF8) ;
-    /** N-Triples - RDF 1.1 form - UTF-8 */ 
+    /** N-Triples - RDF 1.1 form - UTF-8 */
     public static final RDFFormat        NTRIPLES       = NTRIPLES_UTF8 ;
-    /** N-Triples - RDF 1.1 form - UTF-8 */ 
+    /** N-Triples - RDF 1.1 form - UTF-8 */
     public static final RDFFormat        NT             = NTRIPLES ;
-    /** N-Triples - Use ASCII */ 
+    /** N-Triples - Use ASCII */
     public static final RDFFormat        NTRIPLES_ASCII = new RDFFormat(Lang.NTRIPLES, ASCII) ;
 
-    /** N-Quads in UTF-8 */ 
+    /** N-Quads in UTF-8 */
     public static final RDFFormat        NQUADS_UTF8    = new RDFFormat(Lang.NQUADS, UTF8) ;
-    /** N-Quads - RDF 1.1 form - UTF-8 */ 
+    /** N-Quads - RDF 1.1 form - UTF-8 */
     public static final RDFFormat        NQUADS         = NQUADS_UTF8 ;
-    /** N-Quads - RDF 1.1 form - UTF-8 */ 
+    /** N-Quads - RDF 1.1 form - UTF-8 */
     public static final RDFFormat        NQ             = NQUADS ;
-    /** N-Quads - Use ASCII */ 
+    /** N-Quads - Use ASCII */
     public static final RDFFormat        NQUADS_ASCII   = new RDFFormat(Lang.NQUADS, ASCII) ;
 
     /** TriG - pretty form */
     public static final RDFFormat        TRIG_PRETTY    = new RDFFormat(Lang.TRIG, PRETTY) ;
     /** TriG - default form */
     public static final RDFFormat        TRIG           = TRIG_PRETTY ;
-    /** TriG - write in blocks of triples, with same subject, no nested object or RDF lists */ 
+    /** TriG - write in blocks of triples, with same subject, no nested object or RDF lists */
     public static final RDFFormat        TRIG_BLOCKS    = new RDFFormat(Lang.TRIG, BLOCKS) ;
-    /** TriG - one line per triple  */ 
+    /** TriG - one line per triple  */
     public static final RDFFormat        TRIG_FLAT      = new RDFFormat(Lang.TRIG, FLAT) ;
 
     //
@@ -94,7 +92,7 @@ public class RDFFormat {
         private JSONLD_FORMAT format ;
         private boolean prettyJson ;
 
-        JSONLDVariant(String name, boolean prettyJson, JSONLD_FORMAT format) { 
+        JSONLDVariant(String name, boolean prettyJson, JSONLD_FORMAT format) {
             super(name) ;
             this.format = format ;
             this.prettyJson = prettyJson ;
@@ -161,7 +159,7 @@ public class RDFFormat {
      * @see #RDF_THRIFT_VALUES
      */
 
-    public static final RDFFormat RDF_THRIFT            = new RDFFormat(THRIFT) ;
+    public static final RDFFormat RDF_THRIFT            = new RDFFormat(Lang.RDFTHRIFT) ;
     /**
      * A variant of an an RDFFormat that uses value encoding (e.g. integers,
      * doubles, decimals as binary). This does not preserve exact representation
@@ -173,7 +171,7 @@ public class RDFFormat {
      *
      * @see #RDF_THRIFT
      */
-    public static final RDFFormat RDF_THRIFT_VALUES     = new RDFFormat(THRIFT, ValueEncoding) ;
+    public static final RDFFormat RDF_THRIFT_VALUES     = new RDFFormat(Lang.RDFTHRIFT, ValueEncoding) ;
 
     /**
      * The "null" output format (a sink that prints nothing, usually quite
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
index c33d9de..90dba1b 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
@@ -18,30 +18,7 @@
 
 package org.apache.jena.riot;
 
-import static org.apache.jena.riot.WebContent.charsetASCII;
-import static org.apache.jena.riot.WebContent.charsetUTF8;
-import static org.apache.jena.riot.WebContent.contentTypeN3;
-import static org.apache.jena.riot.WebContent.contentTypeN3Alt1;
-import static org.apache.jena.riot.WebContent.contentTypeN3Alt2;
-import static org.apache.jena.riot.WebContent.contentTypeNQuads;
-import static org.apache.jena.riot.WebContent.contentTypeNQuadsAlt1;
-import static org.apache.jena.riot.WebContent.contentTypeNQuadsAlt2;
-import static org.apache.jena.riot.WebContent.contentTypeNTriples;
-import static org.apache.jena.riot.WebContent.contentTypeNTriplesAlt;
-import static org.apache.jena.riot.WebContent.contentTypeRDFJSON;
-import static org.apache.jena.riot.WebContent.contentTypeRDFThrift;
-import static org.apache.jena.riot.WebContent.contentTypeRDFXML;
-import static org.apache.jena.riot.WebContent.contentTypeTextCSV;
-import static org.apache.jena.riot.WebContent.contentTypeTextTSV;
-import static org.apache.jena.riot.WebContent.contentTypeTextPlain;
-import static org.apache.jena.riot.WebContent.contentTypeTriG;
-import static org.apache.jena.riot.WebContent.contentTypeTriGAlt1;
-import static org.apache.jena.riot.WebContent.contentTypeTriGAlt2;
-import static org.apache.jena.riot.WebContent.contentTypeTriX;
-import static org.apache.jena.riot.WebContent.contentTypeTriXxml;
-import static org.apache.jena.riot.WebContent.contentTypeTurtle;
-import static org.apache.jena.riot.WebContent.contentTypeTurtleAlt1;
-import static org.apache.jena.riot.WebContent.contentTypeTurtleAlt2;
+import static org.apache.jena.riot.WebContent.*;
 
 import java.util.*;
 
@@ -70,85 +47,87 @@ public class RDFLanguages
     public static final String strLangTSV        = "TSV";
     public static final String strLangTriX       = "TriX";
     public static final String strLangRDFTHRIFT  = "RDF-THRIFT";
-    
+
     /*
-     * ".owl" is not a formally registered file extension for OWL 
+     * ".owl" is not a formally registered file extension for OWL
      *  using RDF/XML. It was mentioned in OWL1 (when there was
      *  formally only one syntax for publishing RDF).
-     *   
+     *
      * OWL2 does not mention it.
-     * 
+     *
      * ".owx" is the OWL direct XML syntax.
      */
 
     /** <a href="http://www.w3.org/TR/rdf-syntax-grammar/">RDF/XML</a> */
-    public static final Lang RDFXML   = LangBuilder.create(strLangRDFXML, contentTypeRDFXML)
-                                                .addAltNames("RDFXML", "RDF/XML-ABBREV", "RDFXML-ABBREV")
-                                                .addFileExtensions("rdf", "owl", "xml")
-                                                .build() ;
-    
+    public static final Lang RDFXML     = LangBuilder.create(strLangRDFXML, contentTypeRDFXML)
+                                                     .addAltNames("RDFXML", "RDF/XML-ABBREV", "RDFXML-ABBREV")
+                                                     .addFileExtensions("rdf", "owl", "xml")
+                                                     .build() ;
+
     /** <a href="http://www.w3.org/TR/turtle/">Turtle</a>*/
-    public static final Lang TURTLE   = LangBuilder.create(strLangTurtle, contentTypeTurtle)
-                                                .addAltNames("TTL")
-                                                .addAltContentTypes(contentTypeTurtleAlt1, contentTypeTurtleAlt2)
-                                                .addFileExtensions("ttl")
-                                                .build() ;
+    public static final Lang TURTLE     = LangBuilder.create(strLangTurtle, contentTypeTurtle)
+                                                     .addAltNames("TTL")
+                                                     .addAltContentTypes(contentTypeTurtleAlt1, contentTypeTurtleAlt2)
+                                                     .addFileExtensions("ttl")
+                                                     .build() ;
+
     /** Alternative constant for {@link #TURTLE} */
-    public static final Lang TTL    = TURTLE ;
-    
+    public static final Lang TTL        = TURTLE ;
+
     /** N3 (treat as Turtle) */
-    public static final Lang N3   = LangBuilder.create(strLangN3, contentTypeN3)
-                                                .addAltContentTypes(contentTypeN3, contentTypeN3Alt1, contentTypeN3Alt2)
-                                                .addFileExtensions("n3")
-                                                .build() ;
-    
+    public static final Lang N3         = LangBuilder.create(strLangN3, contentTypeN3)
+                                                     .addAltContentTypes(contentTypeN3, contentTypeN3Alt1, contentTypeN3Alt2)
+                                                     .addFileExtensions("n3")
+                                                     .build() ;
+
     /** <a href="http://www.w3.org/TR/n-triples/">N-Triples</a>*/
-    public static final Lang NTRIPLES = LangBuilder.create(strLangNTriples, contentTypeNTriples)
-                                                .addAltNames("NT", "NTriples", "NTriple", "N-Triple", "N-Triples")
-                                                 // Remove? Causes more trouble than it's worth.
-                                                .addAltContentTypes(contentTypeNTriplesAlt)
-                                                .addFileExtensions("nt")
-                                                .build() ;
+    public static final Lang NTRIPLES   = LangBuilder.create(strLangNTriples, contentTypeNTriples)
+                                                     .addAltNames("NT", "NTriples", "NTriple", "N-Triple", "N-Triples")
+                                                     // Remove? Causes more trouble than it's worth.
+                                                     .addAltContentTypes(contentTypeNTriplesAlt)
+                                                     .addFileExtensions("nt")
+                                                     .build() ;
     /** Alternative constant for {@link #NTRIPLES} */
-    public static final Lang NT     = NTRIPLES ;
+    public static final Lang NT         = NTRIPLES ;
 
     /** <a href="http://www.w3.org/TR/json-ld/">JSON-LD</a>. */
-    public static final Lang JSONLD = LangBuilder.create(strLangJSONLD, "application/ld+json")
-                                                .addAltNames("JSONLD")
-                                                .addFileExtensions("jsonld")
-                                                .build() ;
-    
+    public static final Lang JSONLD     = LangBuilder.create(strLangJSONLD, "application/ld+json")
+                                                     .addAltNames("JSONLD")
+                                                     .addFileExtensions("jsonld")
+                                                     .build() ;
+
     /** <a href="http://www.w3.org/TR/rdf-json/">RDF/JSON</a>.  This is not <a href="http://www.w3.org/TR/json-ld/">JSON-LD</a>. */
-    public static final Lang RDFJSON  = LangBuilder.create(strLangRDFJSON, contentTypeRDFJSON)
-                                                .addAltNames("RDFJSON")
-                                                .addFileExtensions("rj")
-                                                .build() ;
-    
+    public static final Lang RDFJSON    = LangBuilder.create(strLangRDFJSON, contentTypeRDFJSON)
+                                                     .addAltNames("RDFJSON")
+                                                     .addFileExtensions("rj")
+                                                     .build() ;
+
     /** <a href="http://www.w3.org/TR/trig/">TriG</a> */
-    public static final Lang TRIG     = LangBuilder.create(strLangTriG, contentTypeTriG)
-                                                .addAltContentTypes(contentTypeTriGAlt1, contentTypeTriGAlt2)
-                                                .addFileExtensions("trig")
-                                                .build() ;
-    
+    public static final Lang TRIG       = LangBuilder.create(strLangTriG, contentTypeTriG)
+                                                     .addAltContentTypes(contentTypeTriGAlt1, contentTypeTriGAlt2)
+                                                     .addFileExtensions("trig")
+                                                     .build() ;
+
     /** <a href="http://www.w3.org/TR/n-quads">N-Quads</a> */
-    public static final Lang NQUADS   = LangBuilder.create(strLangNQuads, contentTypeNQuads)
-                                                .addAltNames("NQ", "NQuads", "NQuad", "N-Quad", "N-Quads")   
-                                                .addAltContentTypes(contentTypeNQuadsAlt1, contentTypeNQuadsAlt2)
-                                                .addFileExtensions("nq")
-                                                .build() ;
-    
+    public static final Lang NQUADS     = LangBuilder.create(strLangNQuads, contentTypeNQuads)
+                                                     .addAltNames("NQ", "NQuads", "NQuad", "N-Quad", "N-Quads")
+                                                     .addAltContentTypes(contentTypeNQuadsAlt1, contentTypeNQuadsAlt2)
+                                                     .addFileExtensions("nq")
+                                                     .build() ;
+
     /** Alternative constant {@link #NQUADS} */
-    public static final Lang NQ     = NQUADS ;
-    
-    /** The RDF syntax "RDF Thrift" : see http://jena.apache.org/documentation/io */ 
-    public static final Lang THRIFT     = LangBuilder.create(strLangRDFTHRIFT, contentTypeRDFThrift)
+    public static final Lang NQ         = NQUADS ;
+
+    /** The RDF syntax <a href="https://jena.apache.org/documentation/io/rdf-binary.html">RDF Thrift</a> */
+    public static final Lang RDFTHRIFT  = LangBuilder.create(strLangRDFTHRIFT, contentTypeRDFThrift)
                                                      .addAltNames("RDF_THRIFT", "RDFTHRIFT", "RDF/THRIFT", "TRDF")
                                                      .addFileExtensions("rt", "trdf")
                                                      .build() ;
-    
+    public static final Lang THRIFT     = RDFTHRIFT;
+
     /** Text */
     public static final Lang TEXT       = LangBuilder.create("text", contentTypeTextPlain)
-                                                     .addAltNames("TEXT")   
+                                                     .addAltNames("TEXT")
                                                      .addFileExtensions("txt")
                                                      .build() ;
 
@@ -159,21 +138,29 @@ public class RDFLanguages
                                                      // Extension "xml" is used for RDF/XML.
                                                      .addFileExtensions("trix")
                                                      .build() ;
-    
+
     /** The "null" language */
     public static final Lang RDFNULL    = LangBuilder.create("rdf/null", "null/rdf")
                                                      .addAltNames("NULL", "null")
                                                      .build() ;
-    
+
+    /** <a href="https://w3c.github.io/shacl/shacl-compact-syntax/">SHACL Compact Syntax</a> (2020-07-01) */
+    public static final Lang SHACLC     = LangBuilder.create("SHACLC", "text/shaclc")
+                                                     .addAltNames("shaclc")
+                                                     .addFileExtensions("shaclc", "shc")
+                                                     .build();
+
     // ---- Central registry
-    
+
     /** Mapping of colloquial name to language */
     private static Map<String, Lang> mapLabelToLang                    = new HashMap<>() ;
-    
+
     // For testing mainly.
-    public static Collection<Lang> getRegisteredLanguages()     { return Collections.unmodifiableCollection(mapLabelToLang.values()); }
-    
-    /** Mapping of content type (main and alternatives) to language */  
+    public static Collection<Lang> getRegisteredLanguages() {
+        return new HashSet<>(mapLabelToLang.values());
+    }
+
+    /** Mapping of content type (main and alternatives) to language */
     private static Map<String, Lang> mapContentTypeToLang              = new HashMap<>() ;
 
     /** Mapping of file extension to language */
@@ -182,29 +169,30 @@ public class RDFLanguages
     // ----------------------
     public static void init() {}
     static { init$() ; }
-    
+
     private static synchronized void init$() {
         initStandard() ;
-        // Needed to avoid a class initialization loop. 
-        Lang.RDFXML     = RDFLanguages.RDFXML ; 
+        // Needed to avoid a class initialization loop.
+        Lang.RDFXML     = RDFLanguages.RDFXML ;
         Lang.NTRIPLES   = RDFLanguages.NTRIPLES ;
         Lang.NT         = RDFLanguages.NT ;
-        Lang.N3         = RDFLanguages.N3 ; 
+        Lang.N3         = RDFLanguages.N3 ;
         Lang.TURTLE     = RDFLanguages.TURTLE ;
         Lang.TTL        = RDFLanguages.TTL ;
         Lang.JSONLD     = RDFLanguages.JSONLD ;
-        Lang.RDFJSON    = RDFLanguages.RDFJSON ; 
+        Lang.RDFJSON    = RDFLanguages.RDFJSON ;
         Lang.NQUADS     = RDFLanguages.NQUADS ;
         Lang.NQ         = RDFLanguages.NQ ;
         Lang.TRIG       = RDFLanguages.TRIG ;
         Lang.RDFTHRIFT  = RDFLanguages.THRIFT ;
         Lang.TRIX       = RDFLanguages.TRIX ;
         Lang.RDFNULL    = RDFLanguages.RDFNULL ;
-        
+        Lang.SHACLC     = RDFLanguages.SHACLC ;
+
         // Used for result sets, not RDF syntaxes.
-        
+
         Lang.CSV = LangBuilder.create(strLangCSV, contentTypeTextCSV)
-            .addAltNames("csv")   
+            .addAltNames("csv")
             .addFileExtensions("csv")
             .build() ;
         Lang.TSV = LangBuilder.create(strLangTSV, contentTypeTextTSV)
@@ -212,11 +200,11 @@ public class RDFLanguages
             .addFileExtensions("tsv")
             .build() ;
 
-        
+
    }
     // ----------------------
-    
-    /** Standard built-in languages */  
+
+    /** Standard built-in languages */
     private static void initStandard()
     {
         register(RDFXML) ;
@@ -230,7 +218,8 @@ public class RDFLanguages
         register(THRIFT) ;
         register(TRIX) ;
         register(RDFNULL) ;
-        
+        register(SHACLC) ;
+
         // Check for JSON-LD engine.
         String clsName = "com.github.jsonldjava.core.JsonLdProcessor" ;
         try {
@@ -245,10 +234,10 @@ public class RDFLanguages
 
     /** Register a language.
      * To create a {@link Lang} object use {@link LangBuilder}.
-     * See also 
+     * See also
      * {@link RDFParserRegistry#registerLang}
      * for registering a language and it's RDF parser factory.
-     * 
+     *
      * @see RDFParserRegistry
      */
     public static void register(Lang lang)
@@ -258,20 +247,20 @@ public class RDFLanguages
         // Expel previous registration.
         if ( isMimeTypeRegistered(lang) )
             unregister(lang);
-        
+
         checkRegistration(lang) ;
 
         mapLabelToLang.put(canonicalKey(lang.getLabel()),  lang) ;
-        
+
         for (String altName : lang.getAltNames() )
             mapLabelToLang.put(canonicalKey(altName), lang) ;
-        
+
         mapContentTypeToLang.put(canonicalKey(lang.getContentType().getContentTypeStr()), lang) ;
         for ( String ct : lang.getAltContentTypes() )
             mapContentTypeToLang.put(canonicalKey(ct), lang) ;
         for ( String ext : lang.getFileExtensions() )
         {
-            if ( ext.startsWith(".") ) 
+            if ( ext.startsWith(".") )
                 ext = ext.substring(1) ;
             mapFileExtToLang.put(canonicalKey(ext), lang) ;
         }
@@ -283,7 +272,7 @@ public class RDFLanguages
         String mimeType = canonicalKey(lang.getHeaderString());
         return mapContentTypeToLang.containsKey(mimeType);
     }
-    
+
     /** Make sure the registration does not overlap or interfere with an existing registration.  */
     private static void checkRegistration(Lang lang)
     {
@@ -295,8 +284,8 @@ public class RDFLanguages
             return ;
         if ( lang.equals(existingRegistration) )
             return ;
-        
-       
+
+
         // Is the content type already registered?
         if ( isMimeTypeRegistered(lang) )
         {
@@ -304,7 +293,7 @@ public class RDFLanguages
             error("Language overlap: " +lang+" and "+mapContentTypeToLang.get(contentType)+" on content type "+contentType) ;
             return;
         }
-        
+
         // Check for clashes.
         for (String altName : lang.getAltNames() )
             if ( mapLabelToLang.containsKey(altName) )
@@ -317,9 +306,9 @@ public class RDFLanguages
                 error("Language overlap: " +lang+" and "+mapFileExtToLang.get(ext)+" on file extension type "+ext) ;
     }
 
-    /** 
+    /**
      * Remove a registration of a language - this also removes all recorded mapping
-     * of content types and file extensions. 
+     * of content types and file extensions.
      */
     public static void unregister(Lang lang)
     {
@@ -327,14 +316,14 @@ public class RDFLanguages
             throw new IllegalArgumentException("null for language") ;
         mapLabelToLang.remove(canonicalKey(lang.getLabel())) ;
         mapContentTypeToLang.remove(canonicalKey(lang.getContentType().getContentTypeStr())) ;
-        
+
         for ( String ct : lang.getAltContentTypes() )
             mapContentTypeToLang.remove(canonicalKey(ct)) ;
         for ( String ext : lang.getFileExtensions() )
             mapFileExtToLang.remove(canonicalKey(ext)) ;
     }
-    
-    /** Is this language registered? */ 
+
+    /** Is this language registered? */
     public static boolean isRegistered(Lang lang)
     {
         if ( lang == null )
@@ -345,10 +334,10 @@ public class RDFLanguages
             return false ;
         return true ;
     }
-    
+
     /** return true if the language is registered as a triples language. */
     public static boolean isTriples(Lang lang) { return RDFParserRegistry.isTriples(lang) ; }
-    
+
     /** return true if the language is registered as a quads language. */
     public static boolean isQuads(Lang lang) { return RDFParserRegistry.isQuads(lang) ; }
 
@@ -378,7 +367,7 @@ public class RDFLanguages
         MediaType ct = MediaType.create(contentType) ;
         if ( ct.getCharset() != null )
             return ct.getCharset() ;
-        
+
         String mt = ct.getContentType() ;
         if ( contentTypeNTriples.equals(mt) )       return charsetUTF8 ;
         if ( contentTypeNTriplesAlt.equals(mt) )    return charsetASCII ;
@@ -388,7 +377,7 @@ public class RDFLanguages
         return charsetUTF8 ;
     }
 
-    
+
     /** Map a colloquial name (e.g. "Turtle") to a {@link Lang} */
     public static Lang shortnameToLang(String label)
     {
@@ -397,12 +386,12 @@ public class RDFLanguages
         String key = canonicalKey(label) ;
         return mapLabelToLang.get(key) ;
     }
-    
+
     /** Try to map a file extension to a {@link Lang}; return null on no registered mapping */
     public static Lang fileExtToLang(String ext)
     {
         if ( ext == null ) return null ;
-        if ( ext.startsWith(".") ) 
+        if ( ext.startsWith(".") )
             ext = ext.substring(1) ;
         ext = canonicalKey(ext) ;
         return mapFileExtToLang.get(ext) ;
@@ -410,10 +399,10 @@ public class RDFLanguages
 
     /** Try to map a resource name to a {@link Lang}; return null on no registered mapping */
     public static Lang resourceNameToLang(String resourceName) { return filenameToLang(resourceName) ; }
-    
+
     /** Try to map a resource name to a {@link Lang}; return the given default where there is no registered mapping */
     public static Lang resourceNameToLang(String resourceName, Lang dftLang) { return filenameToLang(resourceName, dftLang) ; }
-    
+
     /** Try to map a URI or file name to a {@link Lang}; return null on no registered mapping. */
     public static Lang filenameToLang(String filename)
     {
@@ -445,14 +434,14 @@ public class RDFLanguages
     {
         if ( langName == null )
             return null ;
-        
+
         Lang lang = shortnameToLang(langName) ;
         if ( lang != null )
             return lang ;
         lang = contentTypeToLang(langName) ;
         return lang ;
     }
-    
+
     static String canonicalKey(String x) { return x.toLowerCase(Locale.ROOT) ; }
 
     public static ContentType guessContentType(String resourceName)
@@ -467,12 +456,12 @@ public class RDFLanguages
 
     private static void error(String message)
     {
-        throw new RiotException(message) ; 
+        throw new RiotException(message) ;
     }
 
     public static boolean sameLang(Lang lang1, Lang lang2)
     {
-        if ( lang1 == null || lang2 == null ) return false ; 
+        if ( lang1 == null || lang2 == null ) return false ;
         if ( lang1 == lang2 ) return true ;
         return lang1.getLabel() == lang2.getLabel() ;
     }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserRegistry.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserRegistry.java
index 1fc6710..1bff3b0 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserRegistry.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserRegistry.java
@@ -18,17 +18,8 @@
 
 package org.apache.jena.riot;
 
-import static org.apache.jena.riot.RDFLanguages.JSONLD;
-import static org.apache.jena.riot.RDFLanguages.N3;
-import static org.apache.jena.riot.RDFLanguages.NQUADS;
-import static org.apache.jena.riot.RDFLanguages.NTRIPLES;
-import static org.apache.jena.riot.RDFLanguages.RDFJSON;
-import static org.apache.jena.riot.RDFLanguages.RDFNULL;
-import static org.apache.jena.riot.RDFLanguages.RDFXML;
-import static org.apache.jena.riot.RDFLanguages.THRIFT;
-import static org.apache.jena.riot.RDFLanguages.TRIG;
-import static org.apache.jena.riot.RDFLanguages.TRIX;
-import static org.apache.jena.riot.RDFLanguages.TURTLE;
+//import static org.apache.jena.riot.RDFLanguages.*;
+import static org.apache.jena.riot.Lang.*;
 
 import java.io.InputStream ;
 import java.io.Reader ;
@@ -58,9 +49,9 @@ public class RDFParserRegistry
     /** Map Jena I/O names to language */
     private static Map<String, Lang> mapJenaNameToLang                 = new HashMap<>() ;
 
-    /** map language to a parser factory */ 
+    /** map language to a parser factory */
     private static Map<Lang, ReaderRIOTFactory> langToParserFactory    = new HashMap<>() ;
-    
+
     /** Known triples languages */
     private static Set<Lang> langTriples  = new HashSet<>() ;
 
@@ -70,12 +61,12 @@ public class RDFParserRegistry
     /** General parser factory for parsers implemented by "Lang" */
     private static ReaderRIOTFactory parserFactory          = new ReaderRIOTLangFactory() ;
     // Others
-    private static ReaderRIOTFactory parserFactoryRDFXML    = new ReaderRIOTRDFXML.Factory(); 
+    private static ReaderRIOTFactory parserFactoryRDFXML    = new ReaderRIOTRDFXML.Factory();
     private static ReaderRIOTFactory parserFactoryJsonLD    = new ReaderRIOTFactoryJSONLD() ;
     private static ReaderRIOTFactory parserFactoryThrift    = new ReaderRIOTFactoryThrift() ;
     private static ReaderRIOTFactory parserFactoryTriX      = new ReaderTriX.ReaderRIOTFactoryTriX() ;
     private static ReaderRIOTFactory parserFactoryRDFNULL   = new ReaderRDFNULL.Factory() ;
-        
+
     private static boolean initialized = false ;
     static { init() ; }
     public static void init()
@@ -84,26 +75,26 @@ public class RDFParserRegistry
         initialized = true ;
         initStandard() ;
     }
-    
+
     private static void initStandard()
     {
         // Make sure the constants are initialized.
         RDFLanguages.init() ;
-        
+
         registerLangTriples(NTRIPLES,   parserFactory) ;
         registerLangTriples(N3,         parserFactory) ;
         registerLangTriples(TURTLE,     parserFactory) ;
         registerLangTriples(RDFJSON,    parserFactory) ;
         registerLangTriples(RDFXML,     parserFactoryRDFXML) ;
         registerLangTriples(JSONLD,     parserFactoryJsonLD) ;
-        registerLangTriples(THRIFT,     parserFactoryThrift) ;
+        registerLangTriples(RDFTHRIFT,  parserFactoryThrift) ;
         registerLangTriples(TRIX,       parserFactoryTriX) ;
         registerLangTriples(RDFNULL,    parserFactoryRDFNULL) ;
-        
+
         registerLangQuads(JSONLD,       parserFactoryJsonLD) ;
         registerLangQuads(NQUADS,       parserFactory) ;
         registerLangQuads(TRIG,         parserFactory) ;
-        registerLangQuads(THRIFT,       parserFactoryThrift) ;
+        registerLangQuads(RDFTHRIFT,    parserFactoryThrift) ;
         registerLangQuads(TRIX,         parserFactoryTriX) ;
         registerLangQuads(RDFNULL,      parserFactoryRDFNULL) ;
     }
@@ -116,7 +107,7 @@ public class RDFParserRegistry
         RDFLanguages.register(lang) ;
         langToParserFactory.put(lang, factory) ;
     }
-    
+
     /** Register a language and its parser factory.
      * To create a {@link Lang} object use {@link LangBuilder}.
      */
@@ -125,7 +116,7 @@ public class RDFParserRegistry
         langTriples.add(lang) ;
         registerLang(lang, factory) ;
     }
-    
+
     /** Register a language and its parser factory.
      * To create a {@link Lang} object use {@link LangBuilder}.
      */
@@ -141,7 +132,7 @@ public class RDFParserRegistry
         RDFLanguages.unregister(lang) ;
         langToParserFactory.remove(lang) ;
     }
-    
+
     /** Return the parser factory for the language, or null if not registered.
      * @deprecated To be removed or made package scoped. Use {@code RDFParser.create() ... .build()}
      */
@@ -156,12 +147,12 @@ public class RDFParserRegistry
 
     /** return true if the language is registered with the triples parser factories */
     public static boolean isTriples(Lang lang) { return langTriples.contains(lang) ; }
-    
+
     /** return true if the language is registered with the quads parser factories */
     public static boolean isQuads(Lang lang)   { return langQuads.contains(lang) ; }
 
     // Parser factories
-    
+
     private static class ReaderRIOTLangFactory implements ReaderRIOTFactory
     {
         @Override
@@ -211,14 +202,14 @@ public class RDFParserRegistry
             return new JsonLDReader(language, profile, profile.getErrorHandler());
         }
     }
- 
+
     private static class ReaderRIOTFactoryThrift implements ReaderRIOTFactory {
         @Override
         public ReaderRIOT create(Lang language, ParserProfile profile) {
             return new ReaderRDFThrift() ;
         }
     }
-    
+
     private static class ReaderRDFThrift implements ReaderRIOT {
         @Override
         public void read(InputStream in, String baseURI, ContentType ct, StreamRDF output, Context context) {
diff --git a/jena-shacl/src/main/java/org/apache/jena/shacl/compact/SHACLC.java b/jena-shacl/src/main/java/org/apache/jena/shacl/compact/SHACLC.java
index ee4a865..a603daf 100644
--- a/jena-shacl/src/main/java/org/apache/jena/shacl/compact/SHACLC.java
+++ b/jena-shacl/src/main/java/org/apache/jena/shacl/compact/SHACLC.java
@@ -32,15 +32,9 @@ import org.apache.jena.sparql.util.Context;
 /** SHACL Compact Syntax setup */
 public class SHACLC {
 
-    public static Lang langShacl = LangBuilder.create("SHACLC", "text/shaclc")
-        .addAltNames("shaclc")
-        .addFileExtensions("shaclc", "shc")
-        .build();
-
     public static void init() {
-         RDFLanguages.register(langShacl);
          ReaderRIOTFactory factory = (Lang language, ParserProfile profile)->new ReaderRIOTShaclc();
-         RDFParserRegistry.registerLangTriples(langShacl, factory);
+         RDFParserRegistry.registerLangTriples(Lang.SHACLC, factory);
     }
 
     static class ReaderRIOTShaclc implements ReaderRIOT {
@@ -56,6 +50,4 @@ public class SHACLC {
             StreamRDFOps.sendGraphToStream(g, output);
         }
     }
-
 }
-