From dc89c675ee67b257d94509755585e5b8409db24a Mon Sep 17 00:00:00 2001 From: Ostrzyciel Date: Sun, 17 Nov 2024 14:41:44 +0100 Subject: [PATCH] GH-2828: Remove validation for XML-only datatypes Issue: #2828 Remove the code for validating datatypes that according to the RDF 1.1 spec SHOULD NOT be used: QName, ENTITY, ID, IDREF, NOTATION, ENTITIES, NMTOKENS, IDREFS. Also remove code for validating XSD lists and unions. --- .../jena/datatypes/xsd/XSDDatatype.java | 137 +--- .../ext/xerces/impl/dv/SchemaDVFactory.java | 31 - .../jena/ext/xerces/impl/dv/XSSimpleType.java | 28 +- .../ext/xerces/impl/dv/xs/BaseDVFactory.java | 38 - .../impl/dv/xs/BaseSchemaDVFactory.java | 99 +-- .../jena/ext/xerces/impl/dv/xs/EntityDV.java | 57 -- .../ext/xerces/impl/dv/xs/FullDVFactory.java | 36 - .../jena/ext/xerces/impl/dv/xs/IDDV.java | 56 -- .../jena/ext/xerces/impl/dv/xs/IDREFDV.java | 55 -- .../jena/ext/xerces/impl/dv/xs/ListDV.java | 146 ---- .../jena/ext/xerces/impl/dv/xs/QNameDV.java | 116 --- .../jena/ext/xerces/impl/dv/xs/UnionDV.java | 47 -- .../xerces/impl/dv/xs/XSSimpleTypeDecl.java | 732 ++---------------- .../impl/dv/xs/XSSimpleTypeDelegate.java | 20 - .../ext/xerces/xs/XSSimpleTypeDefinition.java | 22 - 15 files changed, 120 insertions(+), 1500 deletions(-) delete mode 100644 jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/EntityDV.java delete mode 100644 jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/IDDV.java delete mode 100644 jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/IDREFDV.java delete mode 100644 jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/ListDV.java delete mode 100644 jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/QNameDV.java delete mode 100644 jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/UnionDV.java diff --git a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDDatatype.java b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDDatatype.java index b9ddf313665..17bea0ff94f 100644 --- a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDDatatype.java +++ b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDDatatype.java @@ -112,9 +112,6 @@ public class XSDDatatype extends BaseDatatype { public static final XSDDatatype XSDnormalizedString = new XSDBaseStringType("normalizedString", String.class); /** Datatype representing xsd:anyURI */ - // If you see this, remove commented lines. - // Merely temporary during switch over and testing. - //public static final XSDDatatype XSDanyURI = new XSDDatatype("anyURI", URI.class); public static final XSDDatatype XSDanyURI = new XSDPlainType("anyURI", URI.class); /** Datatype representing xsd:token */ @@ -123,10 +120,11 @@ public class XSDDatatype extends BaseDatatype { /** Datatype representing xsd:Name */ public static final XSDDatatype XSDName = new XSDBaseStringType("Name"); - /** Datatype representing xsd:QName */ - // If you see this, remove commented lines. - // Merely temporary during switch over and testing. - // public static final XSDDatatype XSDQName = new XSDDatatype("QName"); + /** + * Datatype representing xsd:QName + * @deprecated will be removed in Jena 6 + */ + @Deprecated(forRemoval = true) public static final XSDDatatype XSDQName = new XSDPlainType("QName"); /** Datatype representing xsd:language */ @@ -135,25 +133,35 @@ public class XSDDatatype extends BaseDatatype { /** Datatype representing xsd:NMTOKEN */ public static final XSDDatatype XSDNMTOKEN = new XSDBaseStringType("NMTOKEN"); - /** Datatype representing xsd:ENTITY */ + /** + * Datatype representing xsd:ENTITY + * @deprecated will be removed in Jena 6 + */ + @Deprecated(forRemoval = true) public static final XSDDatatype XSDENTITY = new XSDBaseStringType("ENTITY"); - /** Datatype representing xsd:ID */ + /** + * Datatype representing xsd:ID + * @deprecated will be removed in Jena 6 + */ + @Deprecated(forRemoval = true) public static final XSDDatatype XSDID = new XSDBaseStringType("ID"); /** Datatype representing xsd:NCName */ public static final XSDDatatype XSDNCName = new XSDBaseStringType("NCName"); - /** Datatype representing xsd:IDREF */ - // If you see this, remove commented lines. - // Merely temporary during switch over and testing. - //public static final XSDDatatype XSDIDREF = new XSDDatatype("IDREF"); + /** + * Datatype representing xsd:IDREF + * @deprecated will be removed in Jena 6 + */ + @Deprecated(forRemoval = true) public static final XSDDatatype XSDIDREF = new XSDPlainType("IDREF"); - /** Datatype representing xsd:NOTATION */ - // If you see this, remove commented lines. - // Merely temporary during switch over and testing. - //public static final XSDDatatype XSDNOTATION = new XSDDatatype("NOTATION"); + /** + * Datatype representing xsd:NOTATION + * @deprecated will be removed in Jena 6 + */ + @Deprecated(forRemoval = true) public static final XSDDatatype XSDNOTATION = new XSDPlainType("NOTATION"); /** Datatype representing xsd:hexBinary */ @@ -198,17 +206,6 @@ public class XSDDatatype extends BaseDatatype { /** Datatype representing xsd:gMonthDay */ public static final XSDDatatype XSDgMonthDay = new XSDMonthDayType("gMonthDay"); - // The following are list rather than simple types and are omitted for now - -// /** Datatype representing xsd:ENTITIES */ -// public static final XSDDatatype XSDENTITIES = new XSDBaseStringType("ENTITIES"); -// -// /** Datatype representing xsd:NMTOKENS */ -// public static final XSDDatatype XSDNMTOKENS = new XSDBaseStringType("NMTOKENS"); -// -// /** Datatype representing xsd:IDREFS */ -// public static final XSDDatatype XSDIDREFS = new XSDBaseStringType("IDREFS"); - //======================================================================= // local variables @@ -311,83 +308,6 @@ public Object extendedTypeDefinition() { return typeDeclaration; } - // The following code parses an external XSD file for XSD datatype definitions. - // See an example "testing/xsd/daml+oil-ex-dt.xsd" and TestTypeLiterals.testUserDefined. - // It calls into Xerces internal XM parsing, which is problematic if switching to the - // JDK built-in XML parser in Java9 and later. - -// /** -// * Create and register a set of types specified in a user schema file. -// * We use the (illegal) DAML+OIL approach that the uriref of the type -// * is the url of the schema file with fragment ID corresponding the -// * the name of the type. -// * -// * @param uri the absolute uri of the schema file to be loaded -// * @param reader the Reader stream onto the file (useful if you wish to load a cached copy of the schema file) -// * @param encoding the encoding of the source file (can be null) -// * @param tm the type mapper into which to load the definitions -// * @return a List of strings giving the uri's of the newly defined datatypes -// * @throws DatatypeFormatException if there is a problem during load (not that we use Xerces -// * in default mode for load which may provide diagnostic output direct to stderr) -// */ -// public static List loadUserDefined(String uri, Reader reader, String encoding, TypeMapper tm) throws DatatypeFormatException { -// return loadUserDefined(new XMLInputSource(null, uri, uri, reader, encoding), tm); -// } -// -// /** -// * Create and register a set of types specified in a user schema file. -// * We use the (illegal) DAML+OIL approach that the uriref of the type -// * is the url of the schema file with fragment ID corresponding the -// * the name of the type. -// * -// * @param uri the absolute uri of the schema file to be loaded, this should be a resolvable URL -// * @param encoding the encoding of the source file (can be null) -// * @param tm the type mapper into which to load the definitions -// * @return a List of strings giving the uri's of the newly defined datatypes -// * @throws DatatypeFormatException if there is a problem during load (not that we use Xerces -// * in default mode for load which may provide diagnostic output direct to stderr) -// */ -// public static List loadUserDefined(String uri, String encoding, TypeMapper tm) throws DatatypeFormatException { -// return loadUserDefined(new XMLInputSource(null, uri, uri), tm); -// } -// -// /** -// * Internal implementation of loadUserDefined -// * -// * @param uri the absolute uri of the schema file to be loaded -// * @param reader the Reader stream onto the file (useful if you wish to load a cached copy of the schema file) -// * @param encoding the encoding of the source file (can be null) -// * @param tm the type mapper into which to load the definitions -// * @return a List of strings giving the uri's of the newly defined datatypes -// * @throws DatatypeFormatException if there is a problem during load (not that we use Xerces -// * in default mode for load which may provide diagnostic output direct to stderr) -// */ -// private static List loadUserDefined(XMLInputSource source, TypeMapper tm) throws DatatypeFormatException { -// XMLGrammarPreparser parser = new XMLGrammarPreparser(); -// parser.registerPreparser(XMLGrammarDescription.XML_SCHEMA, null); -// try { -// XSGrammar xsg = (XSGrammar) parser.preparseGrammar(XMLGrammarDescription.XML_SCHEMA, source); -// org.apache.xerces.xs.XSModel xsm = xsg.toXSModel(); -// XSNamedMap map = xsm.getComponents(XSTypeDefinition.SIMPLE_TYPE); -// int numDefs = map.getLength(); -// ArrayList names = new ArrayList<>(numDefs); -// for (int i = 0; i < numDefs; i++) { -// XSSimpleType xstype = (XSSimpleType) map.item(i); -// // Filter built in types - only needed for 2.6.0 -// if ( ! XSD.equals(xstype.getNamespace()) ) { -// //xstype.derivedFrom() -// XSDDatatype definedType = new XSDGenericType(xstype, source.getSystemId()); -// tm.registerDatatype(definedType); -// names.add(definedType.getURI()); -// } -// } -// return names; -// } catch (Exception e) { -// e.printStackTrace(); // Temp -// throw new DatatypeFormatException(e.toString()); -// } -// } - /** * Convert a validated xerces data value into the corresponding java data value. * This function is currently the most blatently xerces-version dependent part @@ -596,6 +516,9 @@ public static void loadXSDSimpleTypes(TypeMapper tm) { tm.registerDatatype(XSDtoken); tm.registerDatatype(XSDName); tm.registerDatatype(XSDlanguage); + + // According to the RDF 1.1 spec, these datatypes SHOULD NOT be used in RDF. + // Jena will not do any special handling or validation of these datatypes. tm.registerDatatype(XSDQName); tm.registerDatatype(XSDNMTOKEN); tm.registerDatatype(XSDID); @@ -603,10 +526,6 @@ public static void loadXSDSimpleTypes(TypeMapper tm) { tm.registerDatatype(XSDNCName); tm.registerDatatype(XSDNOTATION); tm.registerDatatype(XSDIDREF); - -// tm.registerDatatype(XSDIDREFS); -// tm.registerDatatype(XSDENTITIES); -// tm.registerDatatype(XSDNMTOKENS); } /** diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/SchemaDVFactory.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/SchemaDVFactory.java index e041b41f183..3f917ca18cd 100644 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/SchemaDVFactory.java +++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/SchemaDVFactory.java @@ -91,35 +91,4 @@ protected SchemaDVFactory() {} public abstract XSSimpleType createTypeRestriction(String name, String targetNamespace, short finalSet, XSSimpleType base, XSObjectList annotations); - - /** - * Create a new simple type which is derived by list from another simple - * type. - * - * @param name name of the new type, could be null - * @param targetNamespace target namespace of the new type, could be null - * @param finalSet value of "final" - * @param itemType item type of the list type - * @param annotations set of annotations - * @return the newly created simple type - */ - public abstract XSSimpleType createTypeList(String name, String targetNamespace, - short finalSet, XSSimpleType itemType, - XSObjectList annotations); - - /** - * Create a new simple type which is derived by union from a list of other - * simple types. - * - * @param name name of the new type, could be null - * @param targetNamespace target namespace of the new type, could be null - * @param finalSet value of "final" - * @param memberTypes member types of the union type - * @param annotations set of annotations - * @return the newly created simple type - */ - public abstract XSSimpleType createTypeUnion(String name, String targetNamespace, - short finalSet, XSSimpleType[] memberTypes, - XSObjectList annotations); - } diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/XSSimpleType.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/XSSimpleType.java index 154ec0e3946..17855cd4674 100644 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/XSSimpleType.java +++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/XSSimpleType.java @@ -51,6 +51,8 @@ public interface XSSimpleType extends XSSimpleTypeDefinition { * see * XML Schema Part 2: Datatypes */ + /** "anySimpleType" type */ + public static final short PRIMITIVE_ANYSIMPLETYPE = 0; /** "string" type */ public static final short PRIMITIVE_STRING = 1; /** "boolean" type */ @@ -85,22 +87,10 @@ public interface XSSimpleType extends XSSimpleTypeDefinition { public static final short PRIMITIVE_BASE64BINARY = 16; /** "anyURI" type */ public static final short PRIMITIVE_ANYURI = 17; - /** "QName" type */ - public static final short PRIMITIVE_QNAME = 18; /** "precisionDecimal" type */ - public static final short PRIMITIVE_PRECISIONDECIMAL = 19; + public static final short PRIMITIVE_PRECISIONDECIMAL = 18; /** "NOTATION" type */ - public static final short PRIMITIVE_NOTATION = 20; - - /** - * return an ID representing the built-in primitive base type. - * REVISIT: This method is (currently) for internal use only. - * the constants returned from this method are not finalized yet. - * the names and values might change in the further. - * - * @return an ID representing the built-in primitive base type - */ - public short getPrimitiveKind(); + public static final short PRIMITIVE_NOTATION = 19; /** * validate a given string against this simple type. @@ -180,16 +170,6 @@ public void applyFacets(XSFacets facets, short presentFacet, short fixedFacet, V */ //public short compare(Object value1, Object value2); - /** - * Check whether this type is or is derived from ID. - * REVISIT: this method makes ID special, which is not a good design. - * but since ID is not a primitive, there doesn't seem to be a - * clean way of doing it except to define special method like this. - * - * @return whether this simple type is or is derived from ID. - */ - public boolean isIDType(); - /** * Return the whitespace corresponding to this datatype. * diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/BaseDVFactory.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/BaseDVFactory.java index 87c73709b06..fc44a6251e3 100644 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/BaseDVFactory.java +++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/BaseDVFactory.java @@ -86,44 +86,6 @@ public XSSimpleType createTypeRestriction(String name, String targetNamespace, return new XSSimpleTypeDecl((XSSimpleTypeDecl)base, name, targetNamespace, finalSet, false, annotations); } - /** - * Create a new simple type which is derived by list from another simple - * type. - * - * @param name name of the new type, could be null - * @param targetNamespace target namespace of the new type, could be null - * @param finalSet value of "final" - * @param itemType item type of the list type - * @param annotations set of annotations - * @return the newly created simple type - */ - public XSSimpleType createTypeList(String name, String targetNamespace, - short finalSet, XSSimpleType itemType, - XSObjectList annotations) { - return new XSSimpleTypeDecl(name, targetNamespace, finalSet, (XSSimpleTypeDecl)itemType, false, annotations); - } - - /** - * Create a new simple type which is derived by union from a list of other - * simple types. - * - * @param name name of the new type, could be null - * @param targetNamespace target namespace of the new type, could be null - * @param finalSet value of "final" - * @param memberTypes member types of the union type - * @param annotations set of annotations - * @return the newly created simple type - */ - public XSSimpleType createTypeUnion(String name, String targetNamespace, - short finalSet, XSSimpleType[] memberTypes, - XSObjectList annotations) { - int typeNum = memberTypes.length; - XSSimpleTypeDecl[] mtypes = new XSSimpleTypeDecl[typeNum]; - System.arraycopy(memberTypes, 0, mtypes, 0, typeNum); - - return new XSSimpleTypeDecl(name, targetNamespace, finalSet, mtypes, annotations); - } - // create all built-in types static void createBuiltInTypes(SymbolHash types) { // base schema simple type names 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 d08a40113be..92a051f6e3f 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 @@ -57,13 +57,8 @@ protected static void createBuiltInTypes(SymbolHash builtInTypes, XSSimpleTypeDe final String DAY = "gDay"; final String DECIMAL = "decimal"; final String DOUBLE = "double"; - final String ENTITY = "ENTITY"; - final String ENTITIES = "ENTITIES"; final String FLOAT = "float"; final String HEXBINARY = "hexBinary"; - final String ID = "ID"; - final String IDREF = "IDREF"; - final String IDREFS = "IDREFS"; final String INT = "int"; final String INTEGER = "integer"; final String LONG = "long"; @@ -73,14 +68,11 @@ protected static void createBuiltInTypes(SymbolHash builtInTypes, XSSimpleTypeDe final String MONTHDAY = "gMonthDay"; final String NCNAME = "NCName"; final String NMTOKEN = "NMTOKEN"; - final String NMTOKENS = "NMTOKENS"; final String LANGUAGE = "language"; final String NONNEGATIVEINTEGER= "nonNegativeInteger"; final String NONPOSITIVEINTEGER= "nonPositiveInteger"; final String NORMALIZEDSTRING = "normalizedString"; - final String NOTATION = "NOTATION"; final String POSITIVEINTEGER = "positiveInteger"; - final String QNAME = "QName"; final String SHORT = "short"; final String STRING = "string"; final String TIME = "time"; @@ -92,6 +84,15 @@ protected static void createBuiltInTypes(SymbolHash builtInTypes, XSSimpleTypeDe final String YEAR = "gYear"; final String YEARMONTH = "gYearMonth"; + // These SHOULD NOT be used in RDF 1.1 + // Only kept here because this is used by the respective datatype registrations in XSDDatatype. + // TODO: remove this in Jena 6 together with the datatype registrations. + final String ENTITY = "ENTITY"; + final String ID = "ID"; + final String IDREF = "IDREF"; + final String NOTATION = "NOTATION"; + final String QNAME = "QName"; + final XSFacets facets = new XSFacets(); builtInTypes.put(ANYSIMPLETYPE, XSSimpleTypeDecl.fAnySimpleType); @@ -187,7 +188,6 @@ protected static void createBuiltInTypes(SymbolHash builtInTypes, XSSimpleTypeDe builtInTypes.put(FLOAT, new XSSimpleTypeDecl(baseAtomicType, FLOAT, XSSimpleTypeDecl.DV_FLOAT, XSSimpleType.ORDERED_PARTIAL, true, true, true, true, XSConstants.FLOAT_DT)); builtInTypes.put(DOUBLE, new XSSimpleTypeDecl(baseAtomicType, DOUBLE, XSSimpleTypeDecl.DV_DOUBLE, XSSimpleType.ORDERED_PARTIAL, true, true, true, true, XSConstants.DOUBLE_DT)); builtInTypes.put(HEXBINARY, new XSSimpleTypeDecl(baseAtomicType, HEXBINARY, XSSimpleTypeDecl.DV_HEXBINARY, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.HEXBINARY_DT)); - builtInTypes.put(NOTATION, new XSSimpleTypeDecl(baseAtomicType, NOTATION, XSSimpleTypeDecl.DV_NOTATION, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.NOTATION_DT)); facets.whiteSpace = XSSimpleType.WS_REPLACE; XSSimpleTypeDecl normalizedDV = new XSSimpleTypeDecl(stringDV, NORMALIZEDSTRING , URI_SCHEMAFORSCHEMA, (short)0, false, null, XSConstants.NORMALIZEDSTRING_DT); @@ -215,37 +215,20 @@ protected static void createBuiltInTypes(SymbolHash builtInTypes, XSSimpleTypeDe ncnameDV.applyFacets1(facets, XSSimpleType.FACET_WHITESPACE, (short)0, XSSimpleTypeDecl.SPECIAL_PATTERN_NCNAME); builtInTypes.put(NCNAME, ncnameDV); - builtInTypes.put(QNAME, new XSSimpleTypeDecl(baseAtomicType, QNAME, XSSimpleTypeDecl.DV_QNAME, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.QNAME_DT)); - - builtInTypes.put(ID, new XSSimpleTypeDecl(ncnameDV, ID, XSSimpleTypeDecl.DV_ID, XSSimpleType.ORDERED_FALSE, false, false, false , true, XSConstants.ID_DT)); - XSSimpleTypeDecl idrefDV = new XSSimpleTypeDecl(ncnameDV, IDREF , XSSimpleTypeDecl.DV_IDREF, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.IDREF_DT); - builtInTypes.put(IDREF, idrefDV); - - facets.minLength = 1; - XSSimpleTypeDecl tempDV = new XSSimpleTypeDecl(null, URI_SCHEMAFORSCHEMA, (short)0, idrefDV, true, null); - XSSimpleTypeDecl idrefsDV = new XSSimpleTypeDecl(tempDV, IDREFS, URI_SCHEMAFORSCHEMA, (short)0, false, null); - idrefsDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short)0); - builtInTypes.put(IDREFS, idrefsDV); - - XSSimpleTypeDecl entityDV = new XSSimpleTypeDecl(ncnameDV, ENTITY , XSSimpleTypeDecl.DV_ENTITY, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.ENTITY_DT); - builtInTypes.put(ENTITY, entityDV); - - facets.minLength = 1; - tempDV = new XSSimpleTypeDecl(null, URI_SCHEMAFORSCHEMA, (short)0, entityDV, true, null); - XSSimpleTypeDecl entitiesDV = new XSSimpleTypeDecl(tempDV, ENTITIES, URI_SCHEMAFORSCHEMA, (short)0, false, null); - entitiesDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short)0); - builtInTypes.put(ENTITIES, entitiesDV); - facets.whiteSpace = XSSimpleType.WS_COLLAPSE; XSSimpleTypeDecl nmtokenDV = new XSSimpleTypeDecl(tokenDV, NMTOKEN, URI_SCHEMAFORSCHEMA, (short)0, false, null, XSConstants.NMTOKEN_DT); nmtokenDV.applyFacets1(facets, XSSimpleType.FACET_WHITESPACE, (short)0, XSSimpleTypeDecl.SPECIAL_PATTERN_NMTOKEN); builtInTypes.put(NMTOKEN, nmtokenDV); - facets.minLength = 1; - tempDV = new XSSimpleTypeDecl(null, URI_SCHEMAFORSCHEMA, (short)0, nmtokenDV, true, null); - XSSimpleTypeDecl nmtokensDV = new XSSimpleTypeDecl(tempDV, NMTOKENS, URI_SCHEMAFORSCHEMA, (short)0, false, null); - nmtokensDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short)0); - builtInTypes.put(NMTOKENS, nmtokensDV); + // Dummy registrations for XML datatypes that SHOULD NOT be used in RDF 1.1. + // We don't do any validation on them. + // Only kept here because this is used by the respective datatype registrations in XSDDatatype. + // TODO: remove this in Jena 6 together with the datatype registrations. + builtInTypes.put(ENTITY, XSSimpleTypeDecl.fAnySimpleType); + builtInTypes.put(ID, XSSimpleTypeDecl.fAnySimpleType); + builtInTypes.put(IDREF, XSSimpleTypeDecl.fAnySimpleType); + builtInTypes.put(NOTATION, XSSimpleTypeDecl.fAnySimpleType); + builtInTypes.put(QNAME, XSSimpleTypeDecl.fAnySimpleType); } //createBuiltInTypes() /** @@ -269,52 +252,6 @@ public XSSimpleType createTypeRestriction(String name, String targetNamespace, return new XSSimpleTypeDecl((XSSimpleTypeDecl)base, name, targetNamespace, finalSet, false, annotations); } - /** - * Create a new simple type which is derived by list from another simple - * type. - * - * @param name name of the new type, could be null - * @param targetNamespace target namespace of the new type, could be null - * @param finalSet value of "final" - * @param itemType item type of the list type - * @param annotations set of annotations - * @return the newly created simple type - */ - public XSSimpleType createTypeList(String name, String targetNamespace, - short finalSet, XSSimpleType itemType, - XSObjectList annotations) { - if (fDeclPool != null) { - XSSimpleTypeDecl st= fDeclPool.getSimpleTypeDecl(); - return st.setListValues(name, targetNamespace, finalSet, (XSSimpleTypeDecl)itemType, annotations); - } - return new XSSimpleTypeDecl(name, targetNamespace, finalSet, (XSSimpleTypeDecl)itemType, false, annotations); - } - - /** - * Create a new simple type which is derived by union from a list of other - * simple types. - * - * @param name name of the new type, could be null - * @param targetNamespace target namespace of the new type, could be null - * @param finalSet value of "final" - * @param memberTypes member types of the union type - * @param annotations set of annotations - * @return the newly created simple type - */ - public XSSimpleType createTypeUnion(String name, String targetNamespace, - short finalSet, XSSimpleType[] memberTypes, - XSObjectList annotations) { - int typeNum = memberTypes.length; - XSSimpleTypeDecl[] mtypes = new XSSimpleTypeDecl[typeNum]; - System.arraycopy(memberTypes, 0, mtypes, 0, typeNum); - - if (fDeclPool != null) { - XSSimpleTypeDecl st= fDeclPool.getSimpleTypeDecl(); - return st.setUnionValues(name, targetNamespace, finalSet, mtypes, annotations); - } - return new XSSimpleTypeDecl(name, targetNamespace, finalSet, mtypes, annotations); - } - public void setDeclPool (XSDeclarationPool declPool){ fDeclPool = declPool; } diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/EntityDV.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/EntityDV.java deleted file mode 100644 index b5acac18042..00000000000 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/EntityDV.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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; -import org.apache.jena.ext.xerces.util.XercesXMLChar; - -/** - * Represent the schema type "entity" - * - * {@literal @xerces.internal} - * - * @author Neeraj Bajaj, Sun Microsystems, inc. - * @author Sandy Gao, IBM - * - * @version $Id: EntityDV.java 446745 2006-09-15 21:43:58Z mrglavas $ - */ -public class EntityDV extends TypeValidator { - - @Override - public short getAllowedFacets(){ - return (XSSimpleTypeDecl.FACET_LENGTH | XSSimpleTypeDecl.FACET_MINLENGTH | XSSimpleTypeDecl.FACET_MAXLENGTH | XSSimpleTypeDecl.FACET_PATTERN | XSSimpleTypeDecl.FACET_ENUMERATION | XSSimpleTypeDecl.FACET_WHITESPACE ); - } - - @Override - public Object getActualValue(String content, ValidationContext context) throws InvalidDatatypeValueException { - if (!XercesXMLChar.isValidNCName(content)) { - throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{content, "NCName"}); - } - - return content; - } - - @Override - public void checkExtraRules(Object value, ValidationContext context) throws InvalidDatatypeValueException { - if (!context.isEntityUnparsed((String)value)) { - throw new InvalidDatatypeValueException("UndeclaredEntity", new Object[]{value}); - } - } - -} // class EntityDV diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/FullDVFactory.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/FullDVFactory.java index 5d7c1994e63..071af6c532b 100644 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/FullDVFactory.java +++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/FullDVFactory.java @@ -78,21 +78,13 @@ static void createBuiltInTypes(SymbolHash types) { // full schema simple type names final String DOUBLE = "double"; final String DURATION = "duration"; - final String ENTITY = "ENTITY"; - final String ENTITIES = "ENTITIES"; final String FLOAT = "float"; final String HEXBINARY = "hexBinary"; - final String ID = "ID"; - final String IDREF = "IDREF"; - final String IDREFS = "IDREFS"; final String NAME = "Name"; final String NCNAME = "NCName"; final String NMTOKEN = "NMTOKEN"; - final String NMTOKENS = "NMTOKENS"; final String LANGUAGE = "language"; final String NORMALIZEDSTRING = "normalizedString"; - final String NOTATION = "NOTATION"; - final String QNAME = "QName"; final String STRING = "string"; final String TOKEN = "token"; @@ -105,8 +97,6 @@ static void createBuiltInTypes(SymbolHash types) { types.put(DOUBLE, new XSSimpleTypeDecl(anySimpleType, DOUBLE, XSSimpleTypeDecl.DV_DOUBLE, XSSimpleType.ORDERED_PARTIAL, true, true, true, true, XSConstants.DOUBLE_DT)); types.put(DURATION, new XSSimpleTypeDecl(anySimpleType, DURATION, XSSimpleTypeDecl.DV_DURATION, XSSimpleType.ORDERED_PARTIAL, false, false, false, true, XSConstants.DURATION_DT)); types.put(HEXBINARY, new XSSimpleTypeDecl(anySimpleType, HEXBINARY, XSSimpleTypeDecl.DV_HEXBINARY, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.HEXBINARY_DT)); - types.put(QNAME, new XSSimpleTypeDecl(anySimpleType, QNAME, XSSimpleTypeDecl.DV_QNAME, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.QNAME_DT)); - types.put(NOTATION, new XSSimpleTypeDecl(anySimpleType, NOTATION, XSSimpleTypeDecl.DV_NOTATION, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.NOTATION_DT)); facets.whiteSpace = XSSimpleType.WS_REPLACE; XSSimpleTypeDecl normalizedDV = new XSSimpleTypeDecl(stringDV, NORMALIZEDSTRING , URI_SCHEMAFORSCHEMA, (short)0, false, null, XSConstants.NORMALIZEDSTRING_DT); @@ -134,36 +124,10 @@ static void createBuiltInTypes(SymbolHash types) { ncnameDV.applyFacets1(facets, XSSimpleType.FACET_WHITESPACE, (short)0, XSSimpleTypeDecl.SPECIAL_PATTERN_NCNAME); types.put(NCNAME, ncnameDV); - types.put(ID, new XSSimpleTypeDecl(ncnameDV, ID, XSSimpleTypeDecl.DV_ID, XSSimpleType.ORDERED_FALSE, false, false, false , true, XSConstants.ID_DT)); - XSSimpleTypeDecl idrefDV = new XSSimpleTypeDecl(ncnameDV, IDREF , XSSimpleTypeDecl.DV_IDREF, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.IDREF_DT); - types.put(IDREF, idrefDV); - - facets.minLength = 1; - XSSimpleTypeDecl tempDV = new XSSimpleTypeDecl(null, URI_SCHEMAFORSCHEMA, (short)0, idrefDV, true, null); - XSSimpleTypeDecl idrefsDV = new XSSimpleTypeDecl(tempDV, IDREFS, URI_SCHEMAFORSCHEMA, (short)0, false, null); - idrefsDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short)0); - types.put(IDREFS, idrefsDV); - - XSSimpleTypeDecl entityDV = new XSSimpleTypeDecl(ncnameDV, ENTITY , XSSimpleTypeDecl.DV_ENTITY, XSSimpleType.ORDERED_FALSE, false, false, false, true, XSConstants.ENTITY_DT); - types.put(ENTITY, entityDV); - - facets.minLength = 1; - tempDV = new XSSimpleTypeDecl(null, URI_SCHEMAFORSCHEMA, (short)0, entityDV, true, null); - XSSimpleTypeDecl entitiesDV = new XSSimpleTypeDecl(tempDV, ENTITIES, URI_SCHEMAFORSCHEMA, (short)0, false, null); - entitiesDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short)0); - types.put(ENTITIES, entitiesDV); - - facets.whiteSpace = XSSimpleType.WS_COLLAPSE; XSSimpleTypeDecl nmtokenDV = new XSSimpleTypeDecl(tokenDV, NMTOKEN, URI_SCHEMAFORSCHEMA, (short)0, false, null, XSConstants.NMTOKEN_DT); nmtokenDV.applyFacets1(facets, XSSimpleType.FACET_WHITESPACE, (short)0, XSSimpleTypeDecl.SPECIAL_PATTERN_NMTOKEN); types.put(NMTOKEN, nmtokenDV); - - facets.minLength = 1; - tempDV = new XSSimpleTypeDecl(null, URI_SCHEMAFORSCHEMA, (short)0, nmtokenDV, true, null); - XSSimpleTypeDecl nmtokensDV = new XSSimpleTypeDecl(tempDV, NMTOKENS, URI_SCHEMAFORSCHEMA, (short)0, false, null); - nmtokensDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short)0); - types.put(NMTOKENS, nmtokensDV); }//createBuiltInTypes(SymbolHash) }//XFormsDVFactory diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/IDDV.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/IDDV.java deleted file mode 100644 index 7c9a813c471..00000000000 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/IDDV.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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; -import org.apache.jena.ext.xerces.util.XercesXMLChar; - -/** - * Represent the schema type "ID" - * - * {@literal @xerces.internal} - * - * @author Neeraj Bajaj, Sun Microsystems, inc. - * @author Sandy Gao, IBM - * - * @version $Id: IDDV.java 699892 2008-09-28 21:08:27Z mrglavas $ - */ -public class IDDV extends TypeValidator{ - - @Override - public short getAllowedFacets(){ - return (XSSimpleTypeDecl.FACET_LENGTH | XSSimpleTypeDecl.FACET_MINLENGTH | XSSimpleTypeDecl.FACET_MAXLENGTH | XSSimpleTypeDecl.FACET_PATTERN | XSSimpleTypeDecl.FACET_ENUMERATION | XSSimpleTypeDecl.FACET_WHITESPACE ); - } - - @Override - public Object getActualValue(String content, ValidationContext context) throws InvalidDatatypeValueException { - if (!XercesXMLChar.isValidNCName(content)) { - throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{content, "NCName"}); - } - return content; - } - - @Override - public void checkExtraRules(Object value, ValidationContext context) throws InvalidDatatypeValueException { - String content = (String)value; - if (context.isIdDeclared(content)) - throw new InvalidDatatypeValueException("cvc-id.2", new Object[]{content}); - context.addId(content); - } -} // class IDDV diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/IDREFDV.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/IDREFDV.java deleted file mode 100644 index 3fbe01a7242..00000000000 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/IDREFDV.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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; -import org.apache.jena.ext.xerces.util.XercesXMLChar; - -/** - * Represent the schema type "IDREF" - * - * {@literal @xerces.internal} - * - * @author Neeraj Bajaj, Sun Microsystems, inc. - * @author Sandy Gao, IBM - * - * @version $Id: IDREFDV.java 446745 2006-09-15 21:43:58Z mrglavas $ - */ -public class IDREFDV extends TypeValidator{ - - @Override - public short getAllowedFacets(){ - return (XSSimpleTypeDecl.FACET_LENGTH | XSSimpleTypeDecl.FACET_MINLENGTH | XSSimpleTypeDecl.FACET_MAXLENGTH | XSSimpleTypeDecl.FACET_PATTERN | XSSimpleTypeDecl.FACET_ENUMERATION | XSSimpleTypeDecl.FACET_WHITESPACE ); - } - - @Override - public Object getActualValue(String content, ValidationContext context) throws InvalidDatatypeValueException { - if (!XercesXMLChar.isValidNCName(content)) { - throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{content, "NCName"}); - } - return content; - } - - @Override - public void checkExtraRules(Object value, ValidationContext context) throws InvalidDatatypeValueException { - context.addIdRef((String)value); - } - -}//IDREF class - diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/ListDV.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/ListDV.java deleted file mode 100644 index 6b87112cda8..00000000000 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/ListDV.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * 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 java.util.AbstractList; - -import org.apache.jena.ext.xerces.impl.dv.InvalidDatatypeValueException; -import org.apache.jena.ext.xerces.impl.dv.ValidationContext; -import org.apache.jena.ext.xerces.xs.datatypes.ObjectList; - -/** - * Represent the schema list types - * - * {@literal @xerces.internal} - * - * @author Neeraj Bajaj, Sun Microsystems, inc. - * @author Sandy Gao, IBM - * - * @version $Id: ListDV.java 725840 2008-12-11 22:19:06Z mrglavas $ - */ -public class ListDV extends TypeValidator{ - - @Override - public short getAllowedFacets(){ - return (XSSimpleTypeDecl.FACET_LENGTH | XSSimpleTypeDecl.FACET_MINLENGTH | XSSimpleTypeDecl.FACET_MAXLENGTH | XSSimpleTypeDecl.FACET_PATTERN | XSSimpleTypeDecl.FACET_ENUMERATION | XSSimpleTypeDecl.FACET_WHITESPACE ); - } - - // this method should never be called: XSSimpleTypeDecl is responsible for - // calling the item type for the convertion - @Override - public Object getActualValue(String content, ValidationContext context) throws InvalidDatatypeValueException{ - return content; - } - - // length of a list type is the number of items in the list - @Override - public int getDataLength(Object value) { - return ((ListData)value).getLength(); - } - - final static class ListData extends AbstractList implements ObjectList { - final Object[] data; - private String canonical; - public ListData(Object[] data) { - this.data = data; - } - @Override - public synchronized String toString() { - if (canonical == null) { - int len = data.length; - StringBuffer buf = new StringBuffer(); - if (len > 0) { - buf.append(data[0].toString()); - } - for (int i = 1; i < len; i++) { - buf.append(' '); - buf.append(data[i].toString()); - } - canonical = buf.toString(); - } - return canonical; - } - @Override - public int getLength() { - return data.length; - } - @Override - public boolean equals(Object obj) { - if (!(obj instanceof ListData)) - return false; - Object[] odata = ((ListData)obj).data; - - int count = data.length; - if (count != odata.length) - return false; - - for (int i = 0 ; i < count ; i++) { - if (!data[i].equals(odata[i])) - return false; - }//end of loop - - //everything went fine. - return true; - } - - @Override - public int hashCode() { - int hash = 0; - for (int i = 0; i < data.length; ++i) { - hash ^= data[i].hashCode(); - } - return hash; - } - - @Override - public boolean contains(Object item) { - for (int i = 0;i < data.length; i++) { - if (item == data[i]) { - return true; - } - } - return false; - } - - @Override - public Object item(int index) { - if (index < 0 || index >= data.length) { - return null; - } - return data[index]; - } - - /* - * List methods - */ - - @Override - public Object get(int index) { - if (index >= 0 && index < data.length) { - return data[index]; - } - throw new IndexOutOfBoundsException("Index: " + index); - } - - @Override - public int size() { - return getLength(); - } - } -} // class ListDV - diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/QNameDV.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/QNameDV.java deleted file mode 100644 index 38e6e8c4146..00000000000 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/QNameDV.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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; -import org.apache.jena.ext.xerces.xni.QName; -import org.apache.jena.ext.xerces.xs.datatypes.XSQName; -import org.apache.jena.ext.xerces.util.XercesXMLChar; - -/** - * Represent the schema type "QName" and "NOTATION" - * - * {@literal @xerces.internal} - * - * @author Neeraj Bajaj, Sun Microsystems, inc. - * @author Sandy Gao, IBM - * - * @version $Id: QNameDV.java 701915 2008-10-06 02:39:42Z mrglavas $ - */ -public class QNameDV extends TypeValidator { - - private static final String EMPTY_STRING = "".intern(); - - @Override - public short getAllowedFacets() { - return (XSSimpleTypeDecl.FACET_LENGTH | XSSimpleTypeDecl.FACET_MINLENGTH | XSSimpleTypeDecl.FACET_MAXLENGTH | XSSimpleTypeDecl.FACET_PATTERN | XSSimpleTypeDecl.FACET_ENUMERATION | XSSimpleTypeDecl.FACET_WHITESPACE); - } - - @Override - public Object getActualValue(String content, ValidationContext context) - throws InvalidDatatypeValueException { - - // "prefix:localpart" or "localpart" - // get prefix and local part out of content - String prefix, localpart; - int colonptr = content.indexOf(":"); - if (colonptr > 0) { - prefix = context.getSymbol(content.substring(0,colonptr)); - localpart = content.substring(colonptr+1); - } else { - prefix = EMPTY_STRING; - localpart = content; - } - - // both prefix (if any) a nd localpart must be valid NCName - if (prefix.length() > 0 && !XercesXMLChar.isValidNCName(prefix)) - throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{content, "QName"}); - - if(!XercesXMLChar.isValidNCName(localpart)) - throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{content, "QName"}); - - // resove prefix to a uri, report an error if failed - String uri = context.getURI(prefix); - if (prefix.length() > 0 && uri == null) - throw new InvalidDatatypeValueException("UndeclaredPrefix", new Object[]{content, prefix}); - - return new XQName(prefix, context.getSymbol(localpart), context.getSymbol(content), uri); - - } - - // REVISIT: qname and notation shouldn't support length facets. - // now we just return the length of the rawname - @Override - public int getDataLength(Object value) { - return ((XQName)value).rawname.length(); - } - - /** - * represent QName data - */ - private static final class XQName extends QName implements XSQName { - /** Constructs a QName with the specified values. */ - public XQName(String prefix, String localpart, String rawname, String uri) { - setValues(prefix, localpart, rawname, uri); - } // (String,String,String,String) - - /** Returns true if the two objects are equal. */ - @Override - public boolean equals(Object object) { - if (object instanceof QName) { - QName qname = (QName)object; - return uri == qname.uri && localpart == qname.localpart; - } - return false; - } // equals(Object):boolean - - @Override - public String toString() { - return rawname; - } - @Override - public javax.xml.namespace.QName getJAXPQName() { - return new javax.xml.namespace.QName(uri, localpart, prefix); - } - @Override - public QName getXNIQName() { - return this; - } - } -} // class QNameDVDV diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/UnionDV.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/UnionDV.java deleted file mode 100644 index 7f3c1330e0a..00000000000 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/UnionDV.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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; - -/** - * Represent the schema union types - * - * {@literal @xerces.internal} - * - * @author Neeraj Bajaj, Sun Microsystems, inc. - * @author Sandy Gao, IBM - * - * @version $Id: UnionDV.java 446745 2006-09-15 21:43:58Z mrglavas $ - */ -public class UnionDV extends TypeValidator{ - - @Override - public short getAllowedFacets(){ - return (XSSimpleTypeDecl.FACET_PATTERN | XSSimpleTypeDecl.FACET_ENUMERATION ); - } - - // this method should never be called: XSSimpleTypeDecl is responsible for - // calling the member types for the convertion - @Override - public Object getActualValue(String content, ValidationContext context) throws InvalidDatatypeValueException{ - return content; - } - -} // class UnionDV 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 0d23e1368b5..49b655e7748 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 @@ -20,7 +20,6 @@ import java.math.BigInteger; import java.util.AbstractList; import java.util.Locale; -import java.util.StringTokenizer; import java.util.Vector; import org.apache.jena.ext.xerces.impl.Constants; @@ -48,6 +47,7 @@ @SuppressWarnings({"unchecked", "rawtypes"}) public class XSSimpleTypeDecl implements XSSimpleType, TypeInfo { + protected static final short DV_ANYSIMPLETYPE = PRIMITIVE_ANYSIMPLETYPE; protected static final short DV_STRING = PRIMITIVE_STRING; protected static final short DV_BOOLEAN = PRIMITIVE_BOOLEAN; protected static final short DV_DECIMAL = PRIMITIVE_DECIMAL; @@ -65,21 +65,13 @@ public class XSSimpleTypeDecl implements XSSimpleType, TypeInfo { protected static final short DV_HEXBINARY = PRIMITIVE_HEXBINARY; protected static final short DV_BASE64BINARY = PRIMITIVE_BASE64BINARY; protected static final short DV_ANYURI = PRIMITIVE_ANYURI; - protected static final short DV_QNAME = PRIMITIVE_QNAME; protected static final short DV_PRECISIONDECIMAL = PRIMITIVE_PRECISIONDECIMAL; - protected static final short DV_NOTATION = PRIMITIVE_NOTATION; - - protected static final short DV_ANYSIMPLETYPE = 0; - protected static final short DV_ID = DV_NOTATION + 1; - protected static final short DV_IDREF = DV_NOTATION + 2; - protected static final short DV_ENTITY = DV_NOTATION + 3; - protected static final short DV_INTEGER = DV_NOTATION + 4; - protected static final short DV_LIST = DV_NOTATION + 5; - protected static final short DV_UNION = DV_NOTATION + 6; - 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; + + protected static final short DV_INTEGER = DV_PRECISIONDECIMAL + 1; + protected static final short DV_YEARMONTHDURATION = DV_PRECISIONDECIMAL + 2; + protected static final short DV_DAYTIMEDURATION = DV_PRECISIONDECIMAL + 3; + protected static final short DV_ANYATOMICTYPE = DV_PRECISIONDECIMAL + 4; + protected static final short DV_DATETIMESTAMP = DV_PRECISIONDECIMAL + 5; private static final TypeValidator[] gDVs = { new AnySimpleDV(), @@ -100,15 +92,8 @@ public class XSSimpleTypeDecl implements XSSimpleType, TypeInfo { new HexBinaryDV(), new Base64BinaryDV(), new AnyURIDV(), - new QNameDV(), new PrecisionDecimalDV(), // XML Schema 1.1 type - new QNameDV(), // NOTATION -- use the same one as qname - new IDDV(), - new IDREFDV(), - new EntityDV(), new IntegerDV(), - new ListDV(), - new UnionDV(), new YearMonthDurationDV(), // XML Schema 1.1 type new DayTimeDurationDV(), // XML Schema 1.1 type new AnyAtomicDV(), // XML Schema 1.1 type @@ -137,15 +122,8 @@ public class XSSimpleTypeDecl implements XSSimpleType, TypeInfo { NORMALIZE_TRIM, //HexBinaryDV(), NORMALIZE_NONE, //Base64BinaryDV(), // Base64 know how to deal with spaces NORMALIZE_TRIM, //AnyURIDV(), - NORMALIZE_TRIM, //QNameDV(), NORMALIZE_TRIM, //PrecisionDecimalDV() (Schema 1.1) - NORMALIZE_TRIM, //QNameDV(), // notation - NORMALIZE_TRIM, //IDDV(), - NORMALIZE_TRIM, //IDREFDV(), - NORMALIZE_TRIM, //EntityDV(), NORMALIZE_TRIM, //IntegerDV(), - NORMALIZE_FULL, //ListDV(), - NORMALIZE_NONE, //UnionDV(), NORMALIZE_TRIM, //YearMonthDurationDV() (Schema 1.1) NORMALIZE_TRIM, //DayTimeDurationDV() (Schema 1.1) NORMALIZE_NONE, //AnyAtomicDV() (Schema 1.1) @@ -178,8 +156,6 @@ public class XSSimpleTypeDecl implements XSSimpleType, TypeInfo { static final int DERIVATION_ANY = 0; static final int DERIVATION_RESTRICTION = 1; static final int DERIVATION_EXTENSION = 2; - static final int DERIVATION_UNION = 4; - static final int DERIVATION_LIST = 8; static final ValidationContext fEmptyContext = new ValidationContext() { @Override @@ -367,16 +343,6 @@ protected XSSimpleTypeDecl(XSSimpleTypeDecl base, String name, String uri, short fVariety = fBase.fVariety; fValidationDV = fBase.fValidationDV; - switch (fVariety) { - case VARIETY_ATOMIC: - break; - case VARIETY_LIST: - fItemType = fBase.fItemType; - break; - case VARIETY_UNION: - fMemberTypes = fBase.fMemberTypes; - break; - } // always inherit facets from the base. // in case a type is created, but applyFacets is not called @@ -420,59 +386,6 @@ protected XSSimpleTypeDecl(XSSimpleTypeDecl base, String name, String uri, short fBuiltInKind = base.fBuiltInKind; } - //Create a new simple type for list. - protected XSSimpleTypeDecl(String name, String uri, short finalSet, XSSimpleTypeDecl itemType, boolean isImmutable, - XSObjectList annotations) { - fBase = fAnySimpleType; - fTypeName = name; - fTargetNamespace = uri; - fFinalSet = finalSet; - fAnnotations = annotations; - - fVariety = VARIETY_LIST; - fItemType = itemType; - fValidationDV = DV_LIST; - fFacetsDefined = FACET_WHITESPACE; - fFixedFacet = FACET_WHITESPACE; - fWhiteSpace = WS_COLLAPSE; - - //setting fundamental facets - calcFundamentalFacets(); - fIsImmutable = isImmutable; - - // Values of this type are lists - fBuiltInKind = XSConstants.LIST_DT; - } - - //Create a new simple type for union. - protected XSSimpleTypeDecl(String name, String uri, short finalSet, XSSimpleTypeDecl[] memberTypes, - XSObjectList annotations) { - fBase = fAnySimpleType; - fTypeName = name; - fTargetNamespace = uri; - fFinalSet = finalSet; - fAnnotations = annotations; - - fVariety = VARIETY_UNION; - fMemberTypes = memberTypes; - fValidationDV = DV_UNION; - // even for union, we set whitespace to something - // this will never be used, but we can use fFacetsDefined to check - // whether applyFacets() is allwwed: it's not allowed - // if fFacetsDefined != 0 - fFacetsDefined = FACET_WHITESPACE; - fWhiteSpace = WS_COLLAPSE; - - //setting fundamental facets - calcFundamentalFacets(); - // none of the schema-defined types are unions, so just set - // fIsImmutable to false. - fIsImmutable = false; - - // No value can be of this type, so it's unavailable. - fBuiltInKind = XSConstants.UNAVAILABLE_DT; - } - //set values for restriction. protected XSSimpleTypeDecl setRestrictionValues(XSSimpleTypeDecl base, String name, String uri, short finalSet, XSObjectList annotations) { @@ -487,16 +400,6 @@ protected XSSimpleTypeDecl setRestrictionValues(XSSimpleTypeDecl base, String na fVariety = fBase.fVariety; fValidationDV = fBase.fValidationDV; - switch (fVariety) { - case VARIETY_ATOMIC: - break; - case VARIETY_LIST: - fItemType = fBase.fItemType; - break; - case VARIETY_UNION: - fMemberTypes = fBase.fMemberTypes; - break; - } // always inherit facets from the base. // in case a type is created, but applyFacets is not called @@ -527,65 +430,6 @@ protected XSSimpleTypeDecl setRestrictionValues(XSSimpleTypeDecl base, String na return this; } - //set values for list. - protected XSSimpleTypeDecl setListValues(String name, String uri, short finalSet, XSSimpleTypeDecl itemType, - XSObjectList annotations) { - //decline to do anything if the object is immutable. - if(fIsImmutable) return null; - fBase = fAnySimpleType; - fAnonymous = false; - fTypeName = name; - fTargetNamespace = uri; - fFinalSet = finalSet; - fAnnotations = annotations; - - fVariety = VARIETY_LIST; - fItemType = itemType; - fValidationDV = DV_LIST; - fFacetsDefined = FACET_WHITESPACE; - fFixedFacet = FACET_WHITESPACE; - fWhiteSpace = WS_COLLAPSE; - - //setting fundamental facets - calcFundamentalFacets(); - - // Values of this type are lists - fBuiltInKind = XSConstants.LIST_DT; - - return this; - } - - //set values for union. - protected XSSimpleTypeDecl setUnionValues(String name, String uri, short finalSet, XSSimpleTypeDecl[] memberTypes, - XSObjectList annotations) { - //decline to do anything if the object is immutable. - if(fIsImmutable) return null; - fBase = fAnySimpleType; - fAnonymous = false; - fTypeName = name; - fTargetNamespace = uri; - fFinalSet = finalSet; - fAnnotations = annotations; - - fVariety = VARIETY_UNION; - fMemberTypes = memberTypes; - fValidationDV = DV_UNION; - // even for union, we set whitespace to something - // this will never be used, but we can use fFacetsDefined to check - // whether applyFacets() is allwwed: it's not allowed - // if fFacetsDefined != 0 - fFacetsDefined = FACET_WHITESPACE; - fWhiteSpace = WS_COLLAPSE; - - //setting fundamental facets - calcFundamentalFacets(); - - // No value can be of this type, so it's unavailable. - fBuiltInKind = XSConstants.UNAVAILABLE_DT; - - return this; - } - @Override public short getType () { return XSConstants.TYPE_DEFINITION; @@ -638,51 +482,10 @@ public short getVariety(){ } @Override - public boolean isIDType(){ - switch (fVariety) { - case VARIETY_ATOMIC: - return fValidationDV == DV_ID; - case VARIETY_LIST: - return fItemType.isIDType(); - case VARIETY_UNION: - for (int i = 0; i < fMemberTypes.length; i++) { - if (fMemberTypes[i].isIDType()) - return true; - } - } - return false; - } - - @Override - public short getWhitespace() throws DatatypeException{ - if (fVariety == VARIETY_UNION) { - throw new DatatypeException("dt-whitespace", new Object[]{fTypeName}); - } + public short getWhitespace() { return fWhiteSpace; } - @Override - public short getPrimitiveKind() { - if (fVariety == VARIETY_ATOMIC && fValidationDV != DV_ANYSIMPLETYPE) { - if (fValidationDV == DV_ID || fValidationDV == DV_IDREF || fValidationDV == DV_ENTITY) { - return DV_STRING; - } - else if (fValidationDV == DV_INTEGER) { - return DV_DECIMAL; - } - else if (Constants.SCHEMA_1_1_SUPPORT && (fValidationDV == DV_YEARMONTHDURATION || fValidationDV == DV_DAYTIMEDURATION)) { - return DV_DURATION; - } - else { - return fValidationDV; - } - } - else { - // REVISIT: error situation. runtime exception? - return (short)0; - } - } - /** * Returns the closest built-in type category this type represents or * derived from. For example, if this simple type is a built-in derived @@ -713,37 +516,6 @@ public XSSimpleTypeDefinition getPrimitiveType() { } } - /** - * If variety is list the item type definition (an atomic or - * union simple type definition) is available, otherwise - * null. - */ - @Override - public XSSimpleTypeDefinition getItemType() { - if (fVariety == VARIETY_LIST) { - return fItemType; - } - else { - // REVISIT: error situation. runtime exception? - return null; - } - } - - /** - * If variety is union the list of member type definitions (a - * non-empty sequence of simple type definitions) is available, - * otherwise an empty XSObjectList. - */ - @Override - public XSObjectList getMemberTypes() { - if (fVariety == VARIETY_UNION) { - return new XSObjectListImpl(fMemberTypes, fMemberTypes.length); - } - else { - return XSObjectListImpl.EMPTY_LIST; - } - } - /** * If is chosen */ @@ -1658,35 +1430,6 @@ private void checkFacets(ValidatedInfo validatedInfo) throws InvalidDatatypeValu short type = validatedInfo.actualValueType; ShortList itemType = validatedInfo.itemValueTypes; - // For QName and NOTATION types, we don't check length facets - if (fValidationDV != DV_QNAME && fValidationDV != DV_NOTATION) { - int length = fDVs[fValidationDV].getDataLength(ob); - - // maxLength - if ( (fFacetsDefined & FACET_MAXLENGTH) != 0 ) { - if ( length > fMaxLength ) { - throw new InvalidDatatypeValueException("cvc-maxLength-valid", - new Object[]{content, Integer.toString(length), Integer.toString(fMaxLength), fTypeName}); - } - } - - //minLength - if ( (fFacetsDefined & FACET_MINLENGTH) != 0 ) { - if ( length < fMinLength ) { - throw new InvalidDatatypeValueException("cvc-minLength-valid", - new Object[]{content, Integer.toString(length), Integer.toString(fMinLength), fTypeName}); - } - } - - //length - if ( (fFacetsDefined & FACET_LENGTH) != 0 ) { - if ( length != fLength ) { - throw new InvalidDatatypeValueException("cvc-length-valid", - new Object[]{content, Integer.toString(length), Integer.toString(fLength), fTypeName}); - } - } - } - //enumeration if ( ((fFacetsDefined & FACET_ENUMERATION) != 0 ) ) { boolean present = false; @@ -1794,44 +1537,8 @@ private void checkFacets(ValidatedInfo validatedInfo) throws InvalidDatatypeValu } private void checkExtraRules(ValidationContext context, ValidatedInfo validatedInfo) throws InvalidDatatypeValueException { - Object ob = validatedInfo.actualValue; - - if (fVariety == VARIETY_ATOMIC) { - - fDVs[fValidationDV].checkExtraRules(ob, context); - - } else if (fVariety == VARIETY_LIST) { - - ListDV.ListData values = (ListDV.ListData)ob; - XSSimpleType memberType = validatedInfo.memberType; - int len = values.getLength(); - try { - if (fItemType.fVariety == VARIETY_UNION) { - XSSimpleTypeDecl[] memberTypes = (XSSimpleTypeDecl[])validatedInfo.memberTypes; - for (int i = len-1; i >= 0; i--) { - validatedInfo.actualValue = values.item(i); - validatedInfo.memberType = memberTypes[i]; - fItemType.checkExtraRules(context, validatedInfo); - } - } else { // (fVariety == VARIETY_ATOMIC) - for (int i = len-1; i >= 0; i--) { - validatedInfo.actualValue = values.item(i); - fItemType.checkExtraRules(context, validatedInfo); - } - } - } - finally { - validatedInfo.actualValue = values; - validatedInfo.memberType = memberType; - } - - } else { // (fVariety == VARIETY_UNION) - - ((XSSimpleTypeDecl)validatedInfo.memberType).checkExtraRules(context, validatedInfo); - - } - + fDVs[fValidationDV].checkExtraRules(ob, context); }// checkExtraRules() //we can still return object for internal use. @@ -1839,140 +1546,55 @@ private Object getActualValue(Object content, ValidationContext context, ValidatedInfo validatedInfo, boolean needNormalize) throws InvalidDatatypeValueException{ - String nvalue; - if (needNormalize) { - nvalue = normalize(content, fWhiteSpace); - } else { - nvalue = content.toString(); - } - if ( (fFacetsDefined & FACET_PATTERN ) != 0 ) { - RegularExpression regex; - for (int idx = fPattern.size()-1; idx >= 0; idx--) { - regex = (RegularExpression)fPattern.elementAt(idx); - if (!regex.matches(nvalue)){ - throw new InvalidDatatypeValueException("cvc-pattern-valid", - new Object[]{content, - fPatternStr.elementAt(idx), - - fTypeName}); - } + String nvalue; + if (needNormalize) { + nvalue = normalize(content, fWhiteSpace); + } else { + nvalue = content.toString(); + } + if ( (fFacetsDefined & FACET_PATTERN ) != 0 ) { + RegularExpression regex; + for (int idx = fPattern.size()-1; idx >= 0; idx--) { + regex = (RegularExpression)fPattern.elementAt(idx); + if (!regex.matches(nvalue)){ + throw new InvalidDatatypeValueException("cvc-pattern-valid", + new Object[]{content, + fPatternStr.elementAt(idx), + + fTypeName}); } } + } - if (fVariety == VARIETY_ATOMIC) { - - // validate special kinds of token, in place of old pattern matching - if (fPatternType != SPECIAL_PATTERN_NONE) { + // validate special kinds of token, in place of old pattern matching + if (fPatternType != SPECIAL_PATTERN_NONE) { - boolean seenErr = false; - if (fPatternType == SPECIAL_PATTERN_NMTOKEN) { - // PATTERN "\\c+" - seenErr = !XercesXMLChar.isValidNmtoken(nvalue); - } - else if (fPatternType == SPECIAL_PATTERN_NAME) { - // PATTERN "\\i\\c*" - seenErr = !XercesXMLChar.isValidName(nvalue); - } - else if (fPatternType == SPECIAL_PATTERN_NCNAME) { - // PATTERN "[\\i-[:]][\\c-[:]]*" - seenErr = !XercesXMLChar.isValidNCName(nvalue); - } - if (seenErr) { - throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", - new Object[]{nvalue, SPECIAL_PATTERN_STRING[fPatternType]}); - } + boolean seenErr = false; + if (fPatternType == SPECIAL_PATTERN_NMTOKEN) { + // PATTERN "\\c+" + seenErr = !XercesXMLChar.isValidNmtoken(nvalue); } - - validatedInfo.normalizedValue = nvalue; - Object avalue = fDVs[fValidationDV].getActualValue(nvalue, context); - validatedInfo.actualValue = avalue; - validatedInfo.actualValueType = fBuiltInKind; - validatedInfo.actualType = this; - - return avalue; - - } else if (fVariety == VARIETY_LIST) { - - StringTokenizer parsedList = new StringTokenizer(nvalue, " "); - int countOfTokens = parsedList.countTokens() ; - Object[] avalue = new Object[countOfTokens]; - boolean isUnion = fItemType.getVariety() == VARIETY_UNION; - short[] itemTypes = new short[isUnion ? countOfTokens : 1]; - if (!isUnion) - itemTypes[0] = fItemType.fBuiltInKind; - XSSimpleTypeDecl[] memberTypes = new XSSimpleTypeDecl[countOfTokens]; - for(int i = 0 ; i < countOfTokens ; i ++){ - // we can't call fItemType.validate(), otherwise checkExtraRules() - // will be called twice: once in fItemType.validate, once in - // validate method of this type. - // so we take two steps to get the actual value: - // 1. fItemType.getActualValue() - // 2. fItemType.chekcFacets() - avalue[i] = fItemType.getActualValue(parsedList.nextToken(), context, validatedInfo, false); - if (context.needFacetChecking() && - (fItemType.fFacetsDefined != 0 && fItemType.fFacetsDefined != FACET_WHITESPACE)) { - fItemType.checkFacets(validatedInfo); - } - memberTypes[i] = (XSSimpleTypeDecl)validatedInfo.memberType; - if (isUnion) - itemTypes[i] = memberTypes[i].fBuiltInKind; + else if (fPatternType == SPECIAL_PATTERN_NAME) { + // PATTERN "\\i\\c*" + seenErr = !XercesXMLChar.isValidName(nvalue); } - - ListDV.ListData v = new ListDV.ListData(avalue); - validatedInfo.actualValue = v; - validatedInfo.actualValueType = isUnion ? XSConstants.LISTOFUNION_DT : XSConstants.LIST_DT; - validatedInfo.memberType = null; - validatedInfo.memberTypes = memberTypes; - validatedInfo.itemValueTypes = new ShortListImpl(itemTypes, itemTypes.length); - validatedInfo.normalizedValue = nvalue; - // Need to set it here or it will become the item type - validatedInfo.actualType = this; - - return v; - - } else { // (fVariety == VARIETY_UNION) - final Object _content = (fMemberTypes.length > 1 && content != null) ? content.toString() : content; - for (int i = 0; i < fMemberTypes.length; i++) { - try { - // we can't call fMemberType[i].validate(), otherwise checkExtraRules() - // will be called twice: once in fMemberType[i].validate, once in - // validate method of this type. - // so we take two steps to get the actual value: - // 1. fMemberType[i].getActualValue() - // 2. fMemberType[i].chekcFacets() - Object aValue = fMemberTypes[i].getActualValue(_content, context, validatedInfo, true); - if (context.needFacetChecking() && - (fMemberTypes[i].fFacetsDefined != 0 && fMemberTypes[i].fFacetsDefined != FACET_WHITESPACE)) { - fMemberTypes[i].checkFacets(validatedInfo); - } - validatedInfo.memberType = fMemberTypes[i]; - // Need to set it here or it will become the member type - validatedInfo.actualType = this; - return aValue; - } catch(InvalidDatatypeValueException invalidValue) { - } + else if (fPatternType == SPECIAL_PATTERN_NCNAME) { + // PATTERN "[\\i-[:]][\\c-[:]]*" + seenErr = !XercesXMLChar.isValidNCName(nvalue); } - StringBuffer typesBuffer = new StringBuffer(); - XSSimpleTypeDecl decl; - for(int i = 0;i < fMemberTypes.length; i++) { - if(i != 0) - typesBuffer.append(" | "); - decl = fMemberTypes[i]; - if(decl.fTargetNamespace != null) { - typesBuffer.append('{'); - typesBuffer.append(decl.fTargetNamespace); - typesBuffer.append('}'); - } - typesBuffer.append(decl.fTypeName); - if(decl.fEnumeration != null) { - typesBuffer.append(" : "); - decl.appendEnumString(typesBuffer); - } + if (seenErr) { + throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", + new Object[]{nvalue, SPECIAL_PATTERN_STRING[fPatternType]}); } - throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", - new Object[]{content, fTypeName, typesBuffer.toString()}); } + validatedInfo.normalizedValue = nvalue; + Object avalue = fDVs[fValidationDV].getActualValue(nvalue, context); + validatedInfo.actualValue = avalue; + validatedInfo.actualValueType = fBuiltInKind; + validatedInfo.actualType = this; + + return avalue; }//getActualValue() @Override @@ -2417,110 +2039,22 @@ private void calcFundamentalFacets() { } private void setOrdered(){ - // When {variety} is atomic, {value} is inherited from {value} of {base type definition}. For all "primitive" types {value} is as specified in the table in Fundamental Facets (C.1). - if(fVariety == VARIETY_ATOMIC){ - this.fOrdered = fBase.fOrdered; - } - - // When {variety} is list, {value} is false. - else if(fVariety == VARIETY_LIST){ - this.fOrdered = ORDERED_FALSE; - } - - // When {variety} is union, the {value} is partial unless one of the following: - // 1. If every member of {member type definitions} is derived from a common ancestor other than the simple ur-type, then {value} is the same as that ancestor's ordered facet. - // 2. If every member of {member type definitions} has a {value} of false for the ordered facet, then {value} is false. - else if(fVariety == VARIETY_UNION){ - int length = fMemberTypes.length; - // REVISIT: is the length possible to be 0? - if (length == 0) { - this.fOrdered = ORDERED_PARTIAL; - return; - } - // we need to process the first member type before entering the loop - short ancestorId = getPrimitiveDV(fMemberTypes[0].fValidationDV); - boolean commonAnc = ancestorId != DV_ANYSIMPLETYPE; - boolean allFalse = fMemberTypes[0].fOrdered == ORDERED_FALSE; - // for the other member types, check whether the value is false - // and whether they have the same ancestor as the first one - for (int i = 1; i < fMemberTypes.length && (commonAnc || allFalse); i++) { - if (commonAnc) - commonAnc = ancestorId == getPrimitiveDV(fMemberTypes[i].fValidationDV); - if (allFalse) - allFalse = fMemberTypes[i].fOrdered == ORDERED_FALSE; - } - if (commonAnc) { - // REVISIT: all member types should have the same ordered value - // just use the first one. Can we assume this? - this.fOrdered = fMemberTypes[0].fOrdered; - } else if (allFalse) { - this.fOrdered = ORDERED_FALSE; - } else { - this.fOrdered = ORDERED_PARTIAL; - } - } - + this.fOrdered = fBase.fOrdered; }//setOrdered private void setNumeric(){ - if(fVariety == VARIETY_ATOMIC){ - this.fNumeric = fBase.fNumeric; - } - else if(fVariety == VARIETY_LIST){ - this.fNumeric = false; - } - else if(fVariety == VARIETY_UNION){ - XSSimpleType[] memberTypes = fMemberTypes; - for(int i = 0 ; i < memberTypes.length ; i++){ - if(!memberTypes[i].getNumeric() ){ - this.fNumeric = false; - return; - } - } - this.fNumeric = true; - } - + this.fNumeric = fBase.fNumeric; }//setNumeric private void setBounded(){ - if(fVariety == VARIETY_ATOMIC){ - if( (((this.fFacetsDefined & FACET_MININCLUSIVE) != 0) || ((this.fFacetsDefined & FACET_MINEXCLUSIVE) != 0)) - && (((this.fFacetsDefined & FACET_MAXINCLUSIVE) != 0) || ((this.fFacetsDefined & FACET_MAXEXCLUSIVE) != 0)) ){ - this.fBounded = true; - } - else{ - this.fBounded = false; - } - } - else if(fVariety == VARIETY_LIST){ - if( ((this.fFacetsDefined & FACET_LENGTH) != 0 ) || ( ((this.fFacetsDefined & FACET_MINLENGTH) != 0 ) - && ((this.fFacetsDefined & FACET_MAXLENGTH) != 0 )) ){ - this.fBounded = true; - } - else{ - this.fBounded = false; - } - - } - else if(fVariety == VARIETY_UNION){ - - XSSimpleTypeDecl [] memberTypes = this.fMemberTypes; - short ancestorId = 0 ; - - if(memberTypes.length > 0){ - ancestorId = getPrimitiveDV(memberTypes[0].fValidationDV); - } - - for(int i = 0 ; i < memberTypes.length ; i++){ - if(!memberTypes[i].getBounded() || (ancestorId != getPrimitiveDV(memberTypes[i].fValidationDV)) ){ - this.fBounded = false; - return; - } - } + if( (((this.fFacetsDefined & FACET_MININCLUSIVE) != 0) || ((this.fFacetsDefined & FACET_MINEXCLUSIVE) != 0)) + && (((this.fFacetsDefined & FACET_MAXINCLUSIVE) != 0) || ((this.fFacetsDefined & FACET_MAXEXCLUSIVE) != 0)) ){ this.fBounded = true; } - + else{ + this.fBounded = false; + } }//setBounded private boolean specialCardinalityCheck(){ @@ -2534,58 +2068,32 @@ private boolean specialCardinalityCheck(){ } //specialCardinalityCheck() private void setCardinality(){ - if(fVariety == VARIETY_ATOMIC){ - if(fBase.fFinite){ + if(fBase.fFinite){ + this.fFinite = true; + } + else {// (!fBase.fFinite) + if ( ((this.fFacetsDefined & FACET_LENGTH) != 0 ) || ((this.fFacetsDefined & FACET_MAXLENGTH) != 0 ) + || ((this.fFacetsDefined & FACET_TOTALDIGITS) != 0 ) ){ this.fFinite = true; } - else {// (!fBase.fFinite) - if ( ((this.fFacetsDefined & FACET_LENGTH) != 0 ) || ((this.fFacetsDefined & FACET_MAXLENGTH) != 0 ) - || ((this.fFacetsDefined & FACET_TOTALDIGITS) != 0 ) ){ + else if( (((this.fFacetsDefined & FACET_MININCLUSIVE) != 0 ) || ((this.fFacetsDefined & FACET_MINEXCLUSIVE) != 0 )) + && (((this.fFacetsDefined & FACET_MAXINCLUSIVE) != 0 ) || ((this.fFacetsDefined & FACET_MAXEXCLUSIVE) != 0 )) ){ + if( ((this.fFacetsDefined & FACET_FRACTIONDIGITS) != 0 ) || specialCardinalityCheck()){ this.fFinite = true; } - else if( (((this.fFacetsDefined & FACET_MININCLUSIVE) != 0 ) || ((this.fFacetsDefined & FACET_MINEXCLUSIVE) != 0 )) - && (((this.fFacetsDefined & FACET_MAXINCLUSIVE) != 0 ) || ((this.fFacetsDefined & FACET_MAXEXCLUSIVE) != 0 )) ){ - if( ((this.fFacetsDefined & FACET_FRACTIONDIGITS) != 0 ) || specialCardinalityCheck()){ - this.fFinite = true; - } - else{ - this.fFinite = false; - } - } else{ this.fFinite = false; } } - } - else if(fVariety == VARIETY_LIST){ - if( ((this.fFacetsDefined & FACET_LENGTH) != 0 ) || ( ((this.fFacetsDefined & FACET_MINLENGTH) != 0 ) - && ((this.fFacetsDefined & FACET_MAXLENGTH) != 0 )) ){ - this.fFinite = true; - } else{ this.fFinite = false; } - } - else if(fVariety == VARIETY_UNION){ - XSSimpleType [] memberTypes = fMemberTypes; - for(int i = 0 ; i < memberTypes.length ; i++){ - if(!(memberTypes[i].getFinite()) ){ - this.fFinite = false; - return; - } - } - this.fFinite = true; - } - }//setCardinality private short getPrimitiveDV(short validationDV){ - if (validationDV == DV_ID || validationDV == DV_IDREF || validationDV == DV_ENTITY){ - return DV_STRING; - } - else if (validationDV == DV_INTEGER) { + if (validationDV == DV_INTEGER) { return DV_DECIMAL; } else if (Constants.SCHEMA_1_1_SUPPORT && (validationDV == DV_YEARMONTHDURATION || validationDV == DV_DAYTIMEDURATION)) { @@ -2683,25 +2191,9 @@ public boolean isDOMDerivedFrom(String ancestorNS, String ancestorName, int deri } } - // list - if ((derivationMethod & DERIVATION_LIST) != 0) { - if (isDerivedByList(ancestorNS, ancestorName, this)) { - return true; - } - } - - // union - if ((derivationMethod & DERIVATION_UNION) != 0) { - if (isDerivedByUnion(ancestorNS, ancestorName, this)) { - return true; - } - } - // extension if (((derivationMethod & DERIVATION_EXTENSION) != 0) - && (((derivationMethod & DERIVATION_RESTRICTION) == 0) - && ((derivationMethod & DERIVATION_LIST) == 0) - && ((derivationMethod & DERIVATION_UNION) == 0))) { + && (((derivationMethod & DERIVATION_RESTRICTION) == 0))) { return false; } @@ -2709,9 +2201,7 @@ public boolean isDOMDerivedFrom(String ancestorNS, String ancestorName, int deri // restriction, list, extension or union) is set to 1 for the // derivationMethod parameter. if (((derivationMethod & DERIVATION_EXTENSION) == 0) - && (((derivationMethod & DERIVATION_RESTRICTION) == 0) - && ((derivationMethod & DERIVATION_LIST) == 0) - && ((derivationMethod & DERIVATION_UNION) == 0))) { + && (((derivationMethod & DERIVATION_RESTRICTION) == 0))) { return isDerivedByAny(ancestorNS, ancestorName, this); } @@ -2748,28 +2238,13 @@ private boolean isDerivedByAny(String ancestorNS, String ancestorName, break; } - // check if derived by restriction or list or union + // check if derived by restriction if (isDerivedByRestriction(ancestorNS, ancestorName, type)) { return true; - } else if (isDerivedByList(ancestorNS, ancestorName, type)) { - return true; - } else if (isDerivedByUnion(ancestorNS, ancestorName, type)) { - return true; } oldType = type; - // get the base, item or member type depending on the variety - if (((XSSimpleTypeDecl) type).getVariety() == VARIETY_ABSENT - || ((XSSimpleTypeDecl) type).getVariety() == VARIETY_ATOMIC) { - type = type.getBaseType(); - } else if (((XSSimpleTypeDecl) type).getVariety() == VARIETY_UNION) { - for (int i = 0; i < ((XSSimpleTypeDecl) type).getMemberTypes().getLength(); i++) { - return isDerivedByAny(ancestorNS, ancestorName, - (XSTypeDefinition) ((XSSimpleTypeDecl) type) - .getMemberTypes().item(i)); - } - } else if (((XSSimpleTypeDecl) type).getVariety() == VARIETY_LIST) { - type = ((XSSimpleTypeDecl) type).getItemType(); - } + // get the base type + type = type.getBaseType(); } return derivedFrom; @@ -2806,73 +2281,6 @@ private boolean isDerivedByRestriction (String ancestorNS, String ancestorName, return false; } - /** - * Checks if a type is derived from another by list. See: - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#TypeInfo-isDerivedFrom - * - * @param ancestorNS - * The namspace of the ancestor type declaration - * @param ancestorName - * The name of the ancestor type declaration - * @param type - * The reference type definition - * - * @return boolean True if the type is derived by list for the reference type - */ - private boolean isDerivedByList (String ancestorNS, String ancestorName, XSTypeDefinition type) { - // If the variety is union - if (type !=null && ((XSSimpleTypeDefinition)type).getVariety() == VARIETY_LIST) { - - // get the {item type} - XSTypeDefinition itemType = ((XSSimpleTypeDefinition)type).getItemType(); - - // T2 is the {item type definition} - if (itemType != null) { - - // T2 is derived from the other type definition by DERIVATION_RESTRICTION - if (isDerivedByRestriction(ancestorNS, ancestorName, itemType)) { - return true; - } - } - } - return false; - } - - /** - * Checks if a type is derived from another by union. See: - * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#TypeInfo-isDerivedFrom - * - * @param ancestorNS - * The namspace of the ancestor type declaration - * @param ancestorName - * The name of the ancestor type declaration - * @param type - * The reference type definition - * - * @return boolean True if the type is derived by union for the reference type - */ - private boolean isDerivedByUnion (String ancestorNS, String ancestorName, XSTypeDefinition type) { - - // If the variety is union - if (type !=null && ((XSSimpleTypeDefinition)type).getVariety() == VARIETY_UNION) { - - // get member types - XSObjectList memberTypes = ((XSSimpleTypeDefinition)type).getMemberTypes(); - - for (int i = 0; i < memberTypes.getLength(); i++) { - // One of the {member type definitions} is T2. - if (memberTypes.item(i) != null) { - // T2 is derived from the other type definition by DERIVATION_RESTRICTION - if (isDerivedByRestriction(ancestorNS, ancestorName,(XSSimpleTypeDefinition)memberTypes.item(i))) { - return true; - } - } - } - } - return false; - } - - static final XSSimpleTypeDecl fAnySimpleType = new XSSimpleTypeDecl(null, "anySimpleType", DV_ANYSIMPLETYPE, ORDERED_FALSE, false, true, false, true, XSConstants.ANYSIMPLETYPE_DT); static final XSSimpleTypeDecl fAnyAtomicType = new XSSimpleTypeDecl(fAnySimpleType, "anyAtomicType", DV_ANYATOMICTYPE, ORDERED_FALSE, false, true, false, true, XSSimpleTypeDecl.ANYATOMICTYPE_DT); diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/XSSimpleTypeDelegate.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/XSSimpleTypeDelegate.java index 520f5be70af..de5a56f11fe 100644 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/XSSimpleTypeDelegate.java +++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/dv/xs/XSSimpleTypeDelegate.java @@ -83,11 +83,6 @@ public short getFixedFacets() { return type.getFixedFacets(); } - @Override - public XSSimpleTypeDefinition getItemType() { - return type.getItemType(); - } - @Override public StringList getLexicalEnumeration() { return type.getLexicalEnumeration(); @@ -103,11 +98,6 @@ public StringList getLexicalPattern() { return type.getLexicalPattern(); } - @Override - public XSObjectList getMemberTypes() { - return type.getMemberTypes(); - } - @Override public XSObjectList getMultiValueFacets() { return type.getMultiValueFacets(); @@ -204,11 +194,6 @@ public void applyFacets(XSFacets facets, short presentFacet, short fixedFacet, V type.applyFacets(facets, presentFacet, fixedFacet, context); } - @Override - public short getPrimitiveKind() { - return type.getPrimitiveKind(); - } - @Override public short getWhitespace() throws DatatypeException { return type.getWhitespace(); @@ -219,11 +204,6 @@ public boolean isEqual(Object value1, Object value2) { return type.isEqual(value1, value2); } - @Override - public boolean isIDType() { - return type.isIDType(); - } - @Override public void validate(ValidationContext context, ValidatedInfo validatedInfo) throws InvalidDatatypeValueException { diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/xs/XSSimpleTypeDefinition.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/xs/XSSimpleTypeDefinition.java index 0c5d23fa3ae..45d660b6514 100644 --- a/jena-core/src/main/java/org/apache/jena/ext/xerces/xs/XSSimpleTypeDefinition.java +++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/xs/XSSimpleTypeDefinition.java @@ -35,14 +35,6 @@ public interface XSSimpleTypeDefinition extends XSTypeDefinition { * Atomic type. */ public static final short VARIETY_ATOMIC = 1; - /** - * List type. - */ - public static final short VARIETY_LIST = 2; - /** - * Union type. - */ - public static final short VARIETY_UNION = 3; // Facets /** @@ -130,20 +122,6 @@ public interface XSSimpleTypeDefinition extends XSTypeDefinition { */ public short getBuiltInKind(); - /** - * If variety is list the item type definition (an atomic or - * union simple type definition) is available, otherwise - * null. - */ - public XSSimpleTypeDefinition getItemType(); - - /** - * If variety is union the list of member type definitions (a - * non-empty sequence of simple type definitions) is available, - * otherwise an empty XSObjectList. - */ - public XSObjectList getMemberTypes(); - /** * [facets]: all facets defined on this type. The value is a bit * combination of FACET_XXX constants of all defined facets.