Add missing DV for XSD DateTimeStamp data type
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 <dateTimeStamp> 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;