diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/BaseSchemaDVFactory.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/BaseSchemaDVFactory.java
index e522bad..d08a401 100644
--- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/BaseSchemaDVFactory.java
+++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/BaseSchemaDVFactory.java
@@ -40,6 +40,8 @@
 public abstract class BaseSchemaDVFactory extends SchemaDVFactory {
 
     static final String URI_SCHEMAFORSCHEMA = "http://www.w3.org/2001/XMLSchema";
+    static final String DATETIME = "dateTime";
+    static final String DURATION = "duration";
 
     protected XSDeclarationPool fDeclPool = null;
 
@@ -52,11 +54,9 @@
         final String BOOLEAN           = "boolean";
         final String BYTE              = "byte";
         final String DATE              = "date";
-        final String DATETIME          = "dateTime";
         final String DAY               = "gDay";
         final String DECIMAL           = "decimal";
         final String DOUBLE            = "double";
-        final String DURATION          = "duration";
         final String ENTITY            = "ENTITY";
         final String ENTITIES          = "ENTITIES";
         final String FLOAT             = "float";
diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/DateTimeStampDV.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/DateTimeStampDV.java
new file mode 100644
index 0000000..312566b
--- /dev/null
+++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/DateTimeStampDV.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.ext.xerces.impl.dv.xs;
+
+import org.apache.jena.ext.xerces.impl.dv.InvalidDatatypeValueException;
+import org.apache.jena.ext.xerces.impl.dv.ValidationContext;
+
+/**
+ * Validator for &lt;dateTimeStamp&gt; datatype (W3C Schema Datatypes)
+ */
+public class DateTimeStampDV extends DateTimeDV {
+
+   private final String invalidDateTimeStampMessage = "%s is an invalid dateTimeStamp data type value. The timezone is missing.";
+
+   @Override
+   public Object getActualValue(String content, ValidationContext context) throws InvalidDatatypeValueException {
+      try{
+         return parse(content);
+      } catch(Exception ex){
+         throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{content, "dateTimeStamp"});
+      }
+   }
+
+   /**
+    * Parses, validates and computes normalized version of dateTime object
+    *
+    * @param str    The lexical representation of dateTime object CCYY-MM-DDThh:mm:ss.sss
+    *               including the time zone Z or (-),(+)hh:mm
+    * @return normalized dateTime representation
+    * @exception SchemaDateTimeException Invalid lexical representation
+    */
+   protected DateTimeData parse(String str) throws SchemaDateTimeException {
+      DateTimeData dateTimeData = super.parse( str );
+      if (dateTimeData.hasTimeZone()) {
+         String errorMessage = String.format( invalidDateTimeStampMessage, str );
+         throw new SchemaDateTimeException( errorMessage );
+      }
+      return dateTimeData;
+   }
+}
diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/ExtendedSchemaDVFactoryImpl.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/ExtendedSchemaDVFactoryImpl.java
index 67845a5..1535ec0 100644
--- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/ExtendedSchemaDVFactoryImpl.java
+++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/ExtendedSchemaDVFactoryImpl.java
@@ -22,7 +22,7 @@
 
 /**
  * A special factory to create/return built-in schema DVs and create user-defined DVs
- * that includes anyAtomicType, yearMonthDuration and dayTimeDuration
+ * that includes anyAtomicType, yearMonthDuration, dayTimeDuration and dateTimeStamp
  * 
  * {@literal @xerces.internal} 
  *
@@ -40,9 +40,9 @@
     // create all built-in types
     static void createBuiltInTypes() {
         final String ANYATOMICTYPE     = "anyAtomicType";
-        final String DURATION          = "duration";
         final String YEARMONTHDURATION = "yearMonthDuration";
         final String DAYTIMEDURATION   = "dayTimeDuration";
+        final String DATETIMESTAMP     = "dateTimeStamp";
 
     	createBuiltInTypes(fBuiltInTypes, XSSimpleTypeDecl.fAnyAtomicType);
 
@@ -53,6 +53,9 @@
         XSSimpleTypeDecl durationDV = (XSSimpleTypeDecl)fBuiltInTypes.get(DURATION);
         fBuiltInTypes.put(YEARMONTHDURATION, new XSSimpleTypeDecl(durationDV, YEARMONTHDURATION, XSSimpleTypeDecl.DV_YEARMONTHDURATION, XSSimpleType.ORDERED_PARTIAL, false, false, false, true, XSSimpleTypeDecl.YEARMONTHDURATION_DT));
         fBuiltInTypes.put(DAYTIMEDURATION, new XSSimpleTypeDecl(durationDV, DAYTIMEDURATION, XSSimpleTypeDecl.DV_DAYTIMEDURATION, XSSimpleType.ORDERED_PARTIAL, false, false, false, true, XSSimpleTypeDecl.DAYTIMEDURATION_DT));
+
+        XSSimpleTypeDecl dateTimeDV = (XSSimpleTypeDecl) fBuiltInTypes.get( DATETIME );
+        fBuiltInTypes.put( DATETIMESTAMP, new XSSimpleTypeDecl(dateTimeDV, DATETIMESTAMP, XSSimpleTypeDecl.DV_DATETIMESTAMP, XSSimpleType.ORDERED_PARTIAL, false, false, false, true, XSSimpleTypeDecl.DATETIMESTAMP_DT) );
     } //createBuiltInTypes()
 
     /**
diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/XSSimpleTypeDecl.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/XSSimpleTypeDecl.java
index 5d4d493..2b7ffd3 100644
--- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/XSSimpleTypeDecl.java
+++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/XSSimpleTypeDecl.java
@@ -79,6 +79,7 @@
     protected static final short DV_YEARMONTHDURATION = DV_NOTATION + 7;
     protected static final short DV_DAYTIMEDURATION	= DV_NOTATION + 8;
     protected static final short DV_ANYATOMICTYPE = DV_NOTATION + 9;
+    protected static final short DV_DATETIMESTAMP = DV_NOTATION + 10;
 
     private static final TypeValidator[] gDVs = {
         new AnySimpleDV(),
@@ -110,7 +111,8 @@
         new UnionDV(),
         new YearMonthDurationDV(),  // XML Schema 1.1 type
         new DayTimeDurationDV(),    // XML Schema 1.1 type
-        new AnyAtomicDV()           // XML Schema 1.1 type
+        new AnyAtomicDV(),          // XML Schema 1.1 type
+        new DateTimeStampDV()       // XML Schema 1.1 type
     };
 
     static final short NORMALIZE_NONE = 0;
@@ -170,6 +172,7 @@
     public static final short DAYTIMEDURATION_DT        = 47;   
     public static final short PRECISIONDECIMAL_DT       = 48;
     public static final short ANYATOMICTYPE_DT          = 49;
+    public static final short DATETIMESTAMP_DT          = 50;
 
     // DOM Level 3 TypeInfo Derivation Method constants
     static final int DERIVATION_ANY = 0;
