CLEREZZA-1001: Using rdf:langString datatype where necessary
diff --git a/impl.sparql/src/main/java/org/apache/clerezza/commons/rdf/impl/sparql/SparqlClient.java b/impl.sparql/src/main/java/org/apache/clerezza/commons/rdf/impl/sparql/SparqlClient.java
index 4510907..90a2b96 100644
--- a/impl.sparql/src/main/java/org/apache/clerezza/commons/rdf/impl/sparql/SparqlClient.java
+++ b/impl.sparql/src/main/java/org/apache/clerezza/commons/rdf/impl/sparql/SparqlClient.java
@@ -98,6 +98,7 @@
         private String value;
         private Map<String, BlankNode> bNodeMap = new HashMap<>();
         private static final IRI XSD_STRING = new IRI("http://www.w3.org/2001/XMLSchema#string");
+        private static final IRI RDF_LANG_STRING = new IRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#langString");
 
         private RDFTerm getBNode(String value) {
             if (!bNodeMap.containsKey(value)) {
@@ -195,6 +196,9 @@
 
                                     @Override
                                     public IRI getDataType() {
+                                        if (language != null) {
+                                            return RDF_LANG_STRING;
+                                        }
                                         //TODO implement
                                         return XSD_STRING;
                                     }
diff --git a/impl.utils/src/main/java/org/apache/clerezza/commons/rdf/impl/utils/PlainLiteralImpl.java b/impl.utils/src/main/java/org/apache/clerezza/commons/rdf/impl/utils/PlainLiteralImpl.java
index 53bd93e..856cdf2 100644
--- a/impl.utils/src/main/java/org/apache/clerezza/commons/rdf/impl/utils/PlainLiteralImpl.java
+++ b/impl.utils/src/main/java/org/apache/clerezza/commons/rdf/impl/utils/PlainLiteralImpl.java
@@ -30,14 +30,11 @@
  */
 public class PlainLiteralImpl extends AbstractLiteral implements Literal, Serializable {
 
-    private String lexicalForm;
-    private Language language = null;
+    private final String lexicalForm;
+    private final Language language;
 
     public PlainLiteralImpl(String value) {
-        if (value == null) {
-            throw new IllegalArgumentException("The literal string cannot be null");
-        }
-        this.lexicalForm = value;
+        this(value, null);
     }
 
     public PlainLiteralImpl(String value, Language language) {
@@ -46,6 +43,11 @@
         }
         this.lexicalForm = value;
         this.language = language;
+        if (language == null) {
+            dataType = XSD_STRING;
+        } else {
+            dataType = RDF_LANG_STRING;
+        }
     }
 
     @Override
@@ -70,8 +72,10 @@
 
     @Override
     public IRI getDataType() {
-        return XSD_STRING;
+        return dataType;
     }
+    private final IRI dataType;
     private static final IRI XSD_STRING = new IRI("http://www.w3.org/2001/XMLSchema#string");
-    private static final int XSD_STRING_HASH = XSD_STRING.hashCode();
+    private static final IRI RDF_LANG_STRING = new IRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#langString");
+    //private static final int XSD_STRING_HASH = dataType.hashCode();
 }