| /* |
| * The Apache Software License, Version 1.1 |
| * |
| * |
| * Copyright (c) 2003 The Apache Software Foundation. All rights |
| * reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * |
| * 3. The end-user documentation included with the redistribution, |
| * if any, must include the following acknowledgment: |
| * "This product includes software developed by the |
| * Apache Software Foundation (http://www.apache.org/)." |
| * Alternately, this acknowledgment may appear in the software itself, |
| * if and wherever such third-party acknowledgments normally appear. |
| * |
| * 4. The names "Apache" and "Apache Software Foundation" must |
| * not be used to endorse or promote products derived from this |
| * software without prior written permission. For written |
| * permission, please contact apache@apache.org. |
| * |
| * 5. Products derived from this software may not be called "Apache |
| * XMLBeans", nor may "Apache" appear in their name, without prior |
| * written permission of the Apache Software Foundation. |
| * |
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR |
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| * SUCH DAMAGE. |
| * ==================================================================== |
| * |
| * This software consists of voluntary contributions made by many |
| * individuals on behalf of the Apache Software Foundation and was |
| * originally based on software copyright (c) 2000-2003 BEA Systems |
| * Inc., <http://www.bea.com/>. For more information on the Apache Software |
| * Foundation, please see <http://www.apache.org/>. |
| */ |
| |
| package org.apache.xmlbeans; |
| |
| import javax.xml.namespace.QName; |
| |
| /** |
| * Represents a schema type. |
| * <p> |
| * SchemaType is the metadata "type" class for {@link XmlObject}, and it plays the |
| * analogous role for {@link XmlObject} that {@link java.lang.Class} plays for |
| * {@link java.lang.Object}. |
| * <p> |
| * Every XML Bean class corresponds to a singleton SchemaType object |
| * obtainable by ClassName.type (e.g., {@link XmlNonPositiveInteger#type}), and |
| * every XML Bean instance has an actual SchemaType, obtainable by |
| * {@link XmlObject#schemaType}. The ClassName.type and schemaType() mechanisms are |
| * analogous to the ordinary Java ClassName.class and obj.getClass() mechanisms. |
| * <p> |
| * All schema types are represented by a SchemaType, this includes all types |
| * regardless of whether they are built-in or user-defined, compiled or |
| * uncompiled, simple or complex. |
| * <p> |
| * In addition, a compiled XML Bean type system includes special "document" schema types |
| * each representing a document containing nothing but a single element for each |
| * global element, and special "attribute" schema types each representing |
| * a fragment containing nothing but a single global attribute for global |
| * attribute. |
| * <p> |
| * Do not confuse Schema Types with other types of Schema Components such as |
| * {@link SchemaGlobalElement Global Elements}, {@link SchemaGlobalAttribute Global Attributes}, |
| * {@link SchemaModelGroup Named Model Groups}, or {@link SchemaAttributeGroup Attribute Groups}. |
| * SchemaType represents a Type component, not any of the other kinds of components. |
| * There are different kinds of metadata objects for the different Schema components. |
| * <p> |
| * The space of SchemaTypes is divided as follows: |
| * |
| * <ul> |
| * <li>First, there is the universal base type and the universal |
| * subtype. These are {@link XmlObject#type} |
| * (corresponding to xs:anyType) and {@link XmlBeans#NO_TYPE}, |
| * respectively. The first type is a base type of all other |
| * types. The other type indicates the absence of type information |
| * and, at least in set-theoretic terms, is a subtype of all other types. |
| * <li>There is another universal base type that is the base type |
| * for all simple types. This is the {@link XmlAnySimpleType#type}, |
| * corresponding to xs:anySimpleType. Only XmlObject.type and |
| * XmlAnySimpleType.type return <code>true</code> for {@link #isURType}, and |
| * only XmlBeans.NO_TYPE returns <code>true</code> for {@link #isNoType}. |
| * <li>The two "special" kinds of types that are generated that |
| * do not formally exist in the actual Schema specification are |
| * document types and global attribute types (corresponding to |
| * documents that contain a global element, or fragments that |
| * contain a global attribute). They can be detected using |
| * {@link #isDocumentType} and {@link #isAttributeType}. Other |
| * than their anonymity (lack of a type name) and their appearance |
| * only at the root of an instance, they are otherwise just like |
| * ordinary complex types. |
| * <li>Simple types can be detected using {@link #isSimpleType}. |
| * Complex types are consdered to be all the types that are |
| * not simple. |
| * <li>Simple types are divided into three varieties: atomic types, |
| * list types, and union types. Which variety of simple type |
| * you have can be discoverd using {@link #getSimpleVariety}. |
| * It will return either {@link #ATOMIC}, {@link #LIST}, or |
| * {@link #UNION}. |
| * <li>An {@link #ATOMIC} simple type is always based on one of the |
| * 20 built-in primitive schema types. You can determine |
| * the underlying primitive type for an atomic simple type |
| * by calling {@link #getPrimitiveType}. An atomic type |
| * may add facet restrictions on top of the primitive type, |
| * and these facets can be explored using {@link #getFacet}, |
| * {@link #getWhiteSpaceRule}, {@link #matchPatternFacet}, |
| * {@link #getEnumerationValues}, and related methods. |
| * <li>A {@link #LIST} simple type is always based on another non-list |
| * simple type. The underlying list item type can be obtained |
| * by using {@link #getListItemType}. |
| * <li>A {@link #UNION} simple type is always composed out of a number of |
| * other simple types. The direct members of the union can |
| * be obtained by {@link #getUnionMemberTypes}. When unions |
| * consist of other unions, it is useful to know useful to know |
| * the "leaves of the union tree", so the |
| * set of non-union types making up the union can be obtained |
| * by {@link #getUnionConstituentTypes}. The closure of the |
| * entire "union tree" is {@link #getUnionSubTypes} (this includes |
| * the type itself). For |
| * simple unions that do not consist of other unions, all three |
| * of these sets are the same. |
| * <li>Complex types have nested structure. They are divided into |
| * four content types: empty content, simple content, element-only |
| * content, and mixed content. All kinds of complex types may |
| * have attributes. The content type for a complex type can |
| * be dermined using {@link #getContentType}. This will return |
| * {@link #EMPTY_CONTENT}, {@link #SIMPLE_CONTENT}, |
| * {@link #ELEMENT_CONTENT}, or {@link #MIXED_CONTENT}. |
| * <li>If a complex type has {@link #EMPTY_CONTENT}, the content model will be null. |
| * <li>If a complex type has {@link #SIMPLE_CONTENT}, then it will extend the |
| * simple type that describes the content. In addition, the type |
| * may impose additional simple type facet restrictions; these can |
| * be determined in the same way they are for a simple type. |
| * <li>If a complex type has {@link #ELEMENT_CONTENT} or {@link #MIXED_CONTENT}, then |
| * the detailed content model can be determined by examining |
| * the particle tree (which may be null for MIXED_CONTENT). |
| * The particle tree can be obtained via {@link #getContentModel}. |
| * <li>When working with a complex type, most users will find it |
| * sufficient to discover the summarized shape of the content model |
| * and attribute model using {@link #getElementProperties}, |
| * {@link #getAttributeProperties}, and related methods rather than |
| * examining the particle tree and attribute model directly. |
| * </ul> |
| * |
| * @see SchemaTypeLoader |
| * @see XmlObject#schemaType |
| * @see SimpleValue#instanceType |
| */ |
| public interface SchemaType extends SchemaComponent |
| { |
| /** |
| * The name used to describe the type in the schema. |
| * Null if the type is anonymous (nested), or if it is a document type. |
| */ |
| public abstract QName getName(); |
| |
| /** |
| * The parent schema element. |
| * Null for top-level (named) types and document types. |
| */ |
| public abstract SchemaField getContainerField(); |
| |
| /** |
| * True if this is a document type. |
| * <p> |
| * Document types are generated for every global element. A document |
| * type is an unnamed complex type that contains exactly one element: |
| * we define these types, because they are the types of the "documents" |
| * which contain the defined global elements, and they all turn into |
| * Java types. (Named ElementnameDocument.) |
| */ |
| public boolean isDocumentType(); |
| |
| /** |
| * True if this is a attribute type. |
| * <p> |
| * Attribute types are generated for every global attribute. An attribute |
| * type is an unnamed complex type that contains exactly one attribute: |
| * we define these types, because they are the types of the "attribute documents" |
| * which contain the defined global attribute, and they all turn into |
| * Java types. (Named AttributenameAttribute.) |
| */ |
| public boolean isAttributeType(); |
| |
| |
| /** |
| * Returns the document element name if this is a document type, |
| * or null otherwise. |
| */ |
| public QName getDocumentElementName(); |
| |
| /** |
| * Returns the attribute qname if this is a attribute type, |
| * or null otherwise. |
| */ |
| public QName getAttributeTypeAttributeName(); |
| |
| /** |
| * The outer schema type. |
| * Null for top-level (named) types. |
| */ |
| public abstract SchemaType getOuterType(); |
| |
| /** |
| * True if this anonymous type has no corresponding Java type. True for |
| * anonymous types nested within simple type restrictions. |
| */ |
| public abstract boolean isSkippedAnonymousType(); |
| |
| /** |
| * True if this schema type was compiled to have a corresponding |
| * Java class. |
| */ |
| public abstract boolean isCompiled(); |
| |
| /** |
| * The fully-qualified Java type name of the class. |
| */ |
| public abstract String getFullJavaName(); |
| |
| /** |
| * The short unqualfiied Java name for the class. |
| */ |
| public abstract String getShortJavaName(); |
| |
| /** |
| * The fully-qualified Java type name of the implementation class. |
| */ |
| public abstract String getFullJavaImplName(); |
| |
| /** |
| * The short unqualfiied Java name for the implementation class. |
| */ |
| public abstract String getShortJavaImplName(); |
| |
| /** |
| * The Java class corresponding to this schema type. |
| */ |
| public abstract Class getJavaClass(); |
| |
| /** |
| * The Java class corresponding to the enumeration type for this schema type, |
| * if applicable (or null if not an enumeration). |
| */ |
| public abstract Class getEnumJavaClass(); |
| |
| /** |
| * True if the Xsd type is anonymous (i.e., not top-level). |
| */ |
| public abstract boolean isAnonymousType(); |
| |
| /** |
| * True for any of the 40+ built-in types. |
| */ |
| public abstract boolean isBuiltinType(); |
| |
| /** |
| * True for the anySimpleType and any restrictions/unions/lists. |
| */ |
| public abstract boolean isSimpleType(); |
| |
| /** |
| * Returns base restriction or extension type. Unions and lists |
| * return the anySimpleType. |
| */ |
| public abstract SchemaType getBaseType(); |
| |
| /** |
| * Returns common base type with the given type. The returned |
| * type is the most specific declared base type of both types. |
| */ |
| public abstract SchemaType getCommonBaseType(SchemaType type); |
| |
| /** |
| * True if the specified type derives from this type (or if |
| * it is the same type). |
| * |
| * Note that XmlObject.type (the anyType) is assignable |
| * from all type, and the XmlBeans.noType (the absence of |
| * a type) is assignable to all types. |
| */ |
| public abstract boolean isAssignableFrom(SchemaType type); |
| |
| /** |
| * Returns an integer for the derivation type, either |
| * {@link #DT_EXTENSION}, {@link #DT_RESTRICTION}, {@link #DT_NOT_DERIVED}. |
| */ |
| public int getDerivationType(); |
| |
| /** Not derived. True for XmlObject.type only. See {@link #getDerivationType}. */ |
| public static final int DT_NOT_DERIVED = 0; |
| /** Derived by restriction. See {@link #getDerivationType}. */ |
| public static final int DT_RESTRICTION = 1; |
| /** Derived by extension. See {@link #getDerivationType}. */ |
| public static final int DT_EXTENSION = 2; |
| |
| /** |
| * Returns an integer for builtin types that can be used |
| * for quick comparison. |
| */ |
| public abstract int getBuiltinTypeCode(); |
| |
| /** Not a builtin type */ |
| public static final int BTC_NOT_BUILTIN = 0; |
| /** xs:anyType, aka {@link XmlObject#type} */ |
| public static final int BTC_ANY_TYPE = 1; |
| |
| /** The primitive types have codes between BTC_FIRST_PRIMITIVE and BTC_LAST_PRIMITIVE inclusive */ |
| public static final int BTC_FIRST_PRIMITIVE = 2; |
| |
| /** xs:anySimpleType, aka {@link XmlAnySimpleType#type} */ |
| public static final int BTC_ANY_SIMPLE = 2; |
| |
| /** xs:boolean, aka {@link XmlBoolean#type} */ |
| public static final int BTC_BOOLEAN = 3; |
| /** xs:base64Binary, aka {@link XmlBase64Binary#type} */ |
| public static final int BTC_BASE_64_BINARY = 4; |
| /** xs:hexBinary, aka {@link XmlBase64Binary#type} */ |
| public static final int BTC_HEX_BINARY = 5; |
| /** xs:anyURI, aka {@link XmlAnyURI#type} */ |
| public static final int BTC_ANY_URI = 6; |
| /** xs:QName, aka {@link XmlQName#type} */ |
| public static final int BTC_QNAME = 7; |
| /** xs:NOTATION, aka {@link XmlNOTATION#type} */ |
| public static final int BTC_NOTATION = 8; |
| /** xs:float, aka {@link XmlFloat#type} */ |
| public static final int BTC_FLOAT = 9; |
| /** xs:double, aka {@link XmlDouble#type} */ |
| public static final int BTC_DOUBLE = 10; |
| /** xs:decimal, aka {@link XmlDecimal#type} */ |
| public static final int BTC_DECIMAL = 11; |
| /** xs:string, aka {@link XmlString#type} */ |
| public static final int BTC_STRING = 12; |
| |
| /** xs:duration, aka {@link XmlDuration#type} */ |
| public static final int BTC_DURATION = 13; |
| /** xs:dateTime, aka {@link XmlDateTime#type} */ |
| public static final int BTC_DATE_TIME = 14; |
| /** xs:time, aka {@link XmlTime#type} */ |
| public static final int BTC_TIME = 15; |
| /** xs:date, aka {@link XmlDate#type} */ |
| public static final int BTC_DATE = 16; |
| /** xs:gYearMonth, aka {@link XmlGYearMonth#type} */ |
| public static final int BTC_G_YEAR_MONTH = 17; |
| /** xs:gYear, aka {@link XmlGYear#type} */ |
| public static final int BTC_G_YEAR = 18; |
| /** xs:gMonthDay, aka {@link XmlGMonthDay#type} */ |
| public static final int BTC_G_MONTH_DAY = 19; |
| /** xs:gDay, aka {@link XmlGDay#type} */ |
| public static final int BTC_G_DAY = 20; |
| /** xs:gMonth, aka {@link XmlGMonth#type} */ |
| public static final int BTC_G_MONTH = 21; |
| |
| /** The primitive types have codes between BTC_FIRST_PRIMITIVE and BTC_LAST_PRIMITIVE inclusive */ |
| public static final int BTC_LAST_PRIMITIVE = 21; |
| |
| // derived numerics |
| /** xs:integer, aka {@link XmlInteger#type} */ |
| public static final int BTC_INTEGER = 22; |
| /** xs:long, aka {@link XmlLong#type} */ |
| public static final int BTC_LONG = 23; |
| /** xs:int, aka {@link XmlInt#type} */ |
| public static final int BTC_INT = 24; |
| /** xs:short, aka {@link XmlShort#type} */ |
| public static final int BTC_SHORT = 25; |
| /** xs:byte, aka {@link XmlByte#type} */ |
| public static final int BTC_BYTE = 26; |
| /** xs:nonPositiveInteger, aka {@link XmlNonPositiveInteger#type} */ |
| public static final int BTC_NON_POSITIVE_INTEGER = 27; |
| /** xs:NegativeInteger, aka {@link XmlNegativeInteger#type} */ |
| public static final int BTC_NEGATIVE_INTEGER = 28; |
| /** xs:nonNegativeInteger, aka {@link XmlNonNegativeInteger#type} */ |
| public static final int BTC_NON_NEGATIVE_INTEGER = 29; |
| /** xs:positiveInteger, aka {@link XmlPositiveInteger#type} */ |
| public static final int BTC_POSITIVE_INTEGER = 30; |
| /** xs:unsignedLong, aka {@link XmlUnsignedLong#type} */ |
| public static final int BTC_UNSIGNED_LONG = 31; |
| /** xs:unsignedInt, aka {@link XmlUnsignedInt#type} */ |
| public static final int BTC_UNSIGNED_INT = 32; |
| /** xs:unsignedShort, aka {@link XmlUnsignedShort#type} */ |
| public static final int BTC_UNSIGNED_SHORT = 33; |
| /** xs:unsignedByte, aka {@link XmlUnsignedByte#type} */ |
| public static final int BTC_UNSIGNED_BYTE = 34; |
| |
| // derived strings |
| /** xs:normalizedString, aka {@link XmlNormalizedString#type} */ |
| public static final int BTC_NORMALIZED_STRING = 35; |
| /** xs:token, aka {@link XmlToken#type} */ |
| public static final int BTC_TOKEN = 36; |
| /** xs:Name, aka {@link XmlName#type} */ |
| public static final int BTC_NAME = 37; |
| /** xs:NCName, aka {@link XmlNCName#type} */ |
| public static final int BTC_NCNAME = 38; |
| /** xs:language, aka {@link XmlLanguage#type} */ |
| public static final int BTC_LANGUAGE = 39; |
| /** xs:ID, aka {@link XmlID#type} */ |
| public static final int BTC_ID = 40; |
| /** xs:IDREF, aka {@link XmlIDREF#type} */ |
| public static final int BTC_IDREF = 41; |
| /** xs:IDREFS, aka {@link XmlIDREFS#type} */ |
| public static final int BTC_IDREFS = 42; |
| /** xs:ENTITY, aka {@link XmlENTITY#type} */ |
| public static final int BTC_ENTITY = 43; |
| /** xs:ENTITIES, aka {@link XmlENTITIES#type} */ |
| public static final int BTC_ENTITIES = 44; |
| /** xs:NMTOKEN, aka {@link XmlNMTOKEN#type} */ |
| public static final int BTC_NMTOKEN = 45; |
| /** xs:NMTOKENS, aka {@link XmlNMTOKENS#type} */ |
| public static final int BTC_NMTOKENS = 46; |
| |
| public static final int BTC_LAST_BUILTIN = 46; |
| |
| /** |
| * True for anyType and anySimpleType. |
| */ |
| public boolean isURType(); |
| |
| /** |
| * True for the type object that represents a the absence of a determined type. |
| * XML Objects whose type isNoType() are never valid. |
| */ |
| public boolean isNoType(); |
| |
| /** |
| * Returns the SchemaTypeLoader in which this type was defined. |
| * Complex types are defined and used in exactly one schema type |
| * system, but simple types are defined in one type system and can |
| * be used in any number of type systems. The most common case is |
| * the builtin types, which are defined in the builtin type system |
| * and used elsewhere. |
| */ |
| public SchemaTypeSystem getTypeSystem(); |
| |
| /** |
| * Returns the filename for the XSD file from which this type |
| * was loaded. Intended for use when debugging. |
| */ |
| public String getSourceName(); |
| |
| /** True if this type cannot be used directly in instances */ |
| public boolean isAbstract(); |
| |
| /** True if other types cannot extend this type (only for complex types) */ |
| public boolean finalExtension(); |
| |
| /** True if other types cannot restrict this type */ |
| public boolean finalRestriction(); |
| |
| /** True if list derivation of this type is prohibited (only for simple types) */ |
| public boolean finalList(); |
| |
| /** True if union derivation of this type is prohibited (only for simple types) */ |
| public boolean finalUnion(); |
| |
| /** True if extensions of this type cannot be substituted for this type */ |
| public boolean blockExtension(); |
| |
| /** True if restrictions of this type cannot be substituted for this type */ |
| public boolean blockRestriction(); |
| |
| /** |
| * Returns {@link #EMPTY_CONTENT}, {@link #SIMPLE_CONTENT}, {@link #ELEMENT_CONTENT}, or |
| * {@link #MIXED_CONTENT} for complex types. For noncomplex types, returns |
| * {@link #NOT_COMPLEX_TYPE}. |
| */ |
| public abstract int getContentType(); |
| |
| /** Not a complex type. See {@link #getContentType()}. */ |
| public static final int NOT_COMPLEX_TYPE = 0; |
| /** Empty content. See {@link #getContentType()}. */ |
| public static final int EMPTY_CONTENT = 1; |
| /** Simple content. See {@link #getContentType()}. */ |
| public static final int SIMPLE_CONTENT = 2; |
| /** Element-only content. See {@link #getContentType()}. */ |
| public static final int ELEMENT_CONTENT = 3; |
| /** Mixed content. See {@link #getContentType()}. */ |
| public static final int MIXED_CONTENT = 4; |
| |
| |
| /** |
| * The array of inner (anonymous) types defined |
| * within this type. |
| */ |
| public abstract SchemaType[] getAnonymousTypes(); |
| |
| /** |
| * Returns a SchemaProperty corresponding to an element within this |
| * complex type by looking up the element name. |
| */ |
| public abstract SchemaProperty getElementProperty(QName eltName); |
| |
| /** |
| * Returns all the SchemaProperties corresponding to elements. |
| */ |
| public abstract SchemaProperty[] getElementProperties(); |
| |
| /** |
| * Returns a SchemaProperty corresponding to an attribute within this |
| * complex type by looking up the attribute name. |
| */ |
| public abstract SchemaProperty getAttributeProperty(QName attrName); |
| |
| /** |
| * Returns all the SchemaProperties corresponding to attributes. |
| */ |
| public abstract SchemaProperty[] getAttributeProperties(); |
| |
| /** |
| * Returns all the SchemaProperties within this complex type, |
| * elements followed by attributes. |
| */ |
| public abstract SchemaProperty[] getProperties(); |
| |
| /** |
| * Returns the SchemaProperties defined by this complex type, |
| * exclusive of the base type (if any). |
| */ |
| SchemaProperty[] getDerivedProperties(); |
| |
| /** |
| * Returns the attribute model for this complex type (with simple or complex content). |
| */ |
| public abstract SchemaAttributeModel getAttributeModel(); |
| |
| /** |
| * True if this type permits wildcard attributes. See the attribute model for |
| * more information about which wildcards are allowed. |
| */ |
| public abstract boolean hasAttributeWildcards(); |
| |
| /** |
| * Returns the complex content model for this complex type (with complex content). |
| */ |
| public abstract SchemaParticle getContentModel(); |
| |
| /** |
| * True if this type permits element wildcards. See the content model for |
| * more information about which wildcards are allowed, and where. |
| */ |
| public abstract boolean hasElementWildcards(); |
| |
| /** |
| * For document types, true if the given name can be substituted for the |
| * document element name. |
| */ |
| public boolean isValidSubstitution(QName name); |
| |
| /** |
| * True if the complex content model for this complex type is an "all" group. |
| */ |
| public abstract boolean hasAllContent(); |
| |
| /** |
| * True if particles have same defaults, nillability, etc, that are |
| * invariant when order changes. Computed only for Javaized types. |
| */ |
| public abstract boolean isOrderSensitive(); |
| |
| /** |
| * Returns the type of a child element based on the element name and |
| * an xsi:type attribute (and the type system within which names are |
| * resolved). |
| */ |
| public abstract SchemaType getElementType(QName eltName, QName xsiType, SchemaTypeLoader wildcardTypeLoader); |
| |
| /** |
| * Returns the type of an attribute based on the attribute name and |
| * the type system within which (wildcard) names are resolved. |
| */ |
| public abstract SchemaType getAttributeType(QName eltName, SchemaTypeLoader wildcardTypeLoader); |
| |
| /*************************************************************/ |
| /* SIMPLE TYPE MODEL BELOW */ |
| /*************************************************************/ |
| |
| /** xs:length facet */ |
| public static final int FACET_LENGTH = 0; |
| /** xs:minLength facet */ |
| public static final int FACET_MIN_LENGTH = 1; |
| /** xs:maxLength facet */ |
| public static final int FACET_MAX_LENGTH = 2; |
| /** xs:minExclusive facet */ |
| public static final int FACET_MIN_EXCLUSIVE = 3; |
| /** xs:minInclusive facet */ |
| public static final int FACET_MIN_INCLUSIVE = 4; |
| /** xs:maxInclusive facet */ |
| public static final int FACET_MAX_INCLUSIVE = 5; |
| /** xs:maxExclusive facet */ |
| public static final int FACET_MAX_EXCLUSIVE = 6; |
| /** xs:totalDigits facet */ |
| public static final int FACET_TOTAL_DIGITS = 7; |
| /** xs:fractionDigits facet */ |
| public static final int FACET_FRACTION_DIGITS = 8; |
| |
| public static final int LAST_BASIC_FACET = 8; |
| |
| /** xs:whiteSpace facet - use {@link #getWhiteSpaceRule} instead */ |
| public static final int FACET_WHITE_SPACE = 9; |
| /** xs:pattern facet - use {@link #matchPatternFacet} instead */ |
| public static final int FACET_PATTERN = 10; |
| /** xs:enumeration facet - use {@link #getEnumerationValues} instead */ |
| public static final int FACET_ENUMERATION = 11; |
| |
| /** The last ordinary facet code */ |
| public static final int LAST_FACET = 11; |
| |
| /** @see #ordered */ |
| public static final int PROPERTY_ORDERED = 12; |
| /** @see #isBounded */ |
| public static final int PROPERTY_BOUNDED = 13; |
| /** @see #isFinite */ |
| public static final int PROPERTY_CARDINALITY = 14; |
| /** @see #isNumeric */ |
| public static final int PROPERTY_NUMERIC = 15; |
| |
| /** The last property code */ |
| public static final int LAST_PROPERTY = 15; |
| |
| |
| /** |
| * Returns the value of the given facet, or null if |
| * none is set. |
| */ |
| public abstract XmlAnySimpleType getFacet(int facetCode); |
| |
| /** |
| * True if the given facet is fixed. |
| */ |
| public abstract boolean isFacetFixed(int facetCode); |
| |
| /** |
| * True if ordered. Returns either {@link #UNORDERED}, |
| * {@link #PARTIAL_ORDER}, or {@link #TOTAL_ORDER}. |
| */ |
| public abstract int ordered(); |
| |
| /** Unordered. See {@link #ordered}. */ |
| public static int UNORDERED = 0; |
| /** Partially ordered. See {@link #ordered}. */ |
| public static int PARTIAL_ORDER = 1; |
| /** Totally ordered. See {@link #ordered}. */ |
| public static int TOTAL_ORDER = 2; |
| |
| /** |
| * True if bounded. |
| */ |
| public abstract boolean isBounded(); |
| |
| /** |
| * True if finite. |
| */ |
| public abstract boolean isFinite(); |
| |
| /** |
| * True if numeric. |
| */ |
| public abstract boolean isNumeric(); |
| |
| /** |
| * True if there are regex pattern facents |
| */ |
| public abstract boolean hasPatternFacet(); |
| |
| /** |
| * True |
| */ |
| public abstract String[] getPatterns(); |
| |
| /** |
| * True if the given string matches the pattern facets. |
| * Always true if there are no pattern facets. |
| */ |
| public abstract boolean matchPatternFacet(String s); |
| |
| /** |
| * Returns the array of valid objects from the |
| * enumeration facet, null if no enumeration defined. |
| */ |
| public abstract XmlAnySimpleType[] getEnumerationValues(); |
| |
| /** |
| * True if this is a string enum where an integer |
| * is assigned to each enumerated value. |
| */ |
| public abstract boolean hasStringEnumValues(); |
| |
| /** |
| * If this is a string enumeration, returns the most basic base schema |
| * type that this enuemration is based on. Otherwise returns null. |
| */ |
| public abstract SchemaType getBaseEnumType(); |
| |
| /** |
| * Returns the array of SchemaStringEnumEntries for this type: this |
| * array includes information about the java constant names used for |
| * each string enum entry. |
| */ |
| public SchemaStringEnumEntry[] getStringEnumEntries(); |
| |
| /** |
| * Returns the string enum entry corresponding to the given enumerated |
| * string, or null if there is no match or this type is not |
| * a string enumeration. |
| */ |
| public SchemaStringEnumEntry enumEntryForString(String s); |
| |
| /** |
| * Returns the string enum value corresponding to the given enumerated |
| * string, or null if there is no match or this type is not |
| * a string enumeration. |
| */ |
| public abstract StringEnumAbstractBase enumForString(String s); |
| |
| /** |
| * Returns the string enum value corresponding to the given enumerated |
| * string, or null if there is no match or this type is not |
| * a string enumeration. |
| */ |
| public abstract StringEnumAbstractBase enumForInt(int i); |
| |
| /** |
| * True for any of the 20 primitive types (plus anySimpleType) |
| */ |
| public abstract boolean isPrimitiveType(); |
| |
| /** |
| * Returns whether the simple type is ATOMIC, UNION, or LIST. |
| * Returns {@link #NOT_SIMPLE}, {@link #ATOMIC}, {@link #UNION}, |
| * or {@link #LIST}. |
| */ |
| public abstract int getSimpleVariety(); |
| |
| /** Not a simple type or simple content. See {@link #getSimpleVariety}. */ |
| public static final int NOT_SIMPLE = 0; |
| /** Atomic type. See {@link #getSimpleVariety} */ |
| public static final int ATOMIC = 1; |
| /** Union type. See {@link #getSimpleVariety} */ |
| public static final int UNION = 2; |
| /** Simple list type. See {@link #getSimpleVariety} */ |
| public static final int LIST = 3; |
| |
| |
| /** |
| * For atomic types only: get the primitive type underlying this one. |
| * <p> |
| * Returns null if this is not an atomic type. |
| */ |
| public abstract SchemaType getPrimitiveType(); |
| |
| /** |
| * For atomic numeric restrictions of decimal only: the |
| * numeric size category. Takes into account min and max |
| * restrictions as well as totalDigits and fractionDigits |
| * facets. |
| * <p> |
| * Returns either {@link #NOT_DECIMAL}, |
| * {@link #SIZE_BYTE}, {@link #SIZE_SHORT}, {@link #SIZE_INT}, |
| * {@link #SIZE_LONG}, {@link #SIZE_BIG_INTEGER}, or |
| * {@link #SIZE_BIG_DECIMAL}. |
| */ |
| public abstract int getDecimalSize(); |
| |
| /** Not a decimal restriction. See {@link #getDecimalSize}. */ |
| public static final int NOT_DECIMAL = 0; |
| /** Fits in a byte. See {@link #getDecimalSize}. */ |
| public static final int SIZE_BYTE = 8; |
| /** Fits in a short. See {@link #getDecimalSize}. */ |
| public static final int SIZE_SHORT = 16; |
| /** Fits in an int. See {@link #getDecimalSize}. */ |
| public static final int SIZE_INT = 32; |
| /** Fits in a long. See {@link #getDecimalSize}. */ |
| public static final int SIZE_LONG = 64; |
| /** Fits in a {@link java.math.BigInteger}. See {@link #getDecimalSize}. */ |
| public static final int SIZE_BIG_INTEGER = 1000000; // "millions" |
| /** Fits in a {@link java.math.BigDecimal}. See {@link #getDecimalSize}. */ |
| public static final int SIZE_BIG_DECIMAL = 1000001; // "even more" |
| |
| /** |
| * For union types only: get the shallow member types. This |
| * returns the declared member types of the union, so, for |
| * example if the type contains another union, the nested |
| * members of that union are NOT returned here. |
| * <p> |
| * Returns null if this type is not a union. |
| */ |
| public abstract SchemaType[] getUnionMemberTypes(); |
| |
| /** |
| * For union types only: gets the full tree of member types. |
| * This computes the closure of the set returned by |
| * getUnionMemberTypes(), so, for example, it returns |
| * all the types nested within unions of unions as well |
| * as the top-level members; the set also includes the |
| * type itself. If you are seeking only the basic |
| * non-union consituents, use getUnionConstituentTypes. |
| * <p> |
| * Returns null if this type is not a union. |
| */ |
| public abstract SchemaType[] getUnionSubTypes(); |
| |
| /** |
| * For union types only: get the constituent member types. This |
| * returns only non-union types, so, for example, for unions of |
| * unions, this returns the flattened list of individual member |
| * types within the innermost unions. |
| * <p> |
| * Returns null if this type is not a union. |
| */ |
| public abstract SchemaType[] getUnionConstituentTypes(); |
| |
| /** |
| * For union types only: get the most specific common base |
| * type of the constituent member types. May return a UR type. |
| * <p> |
| * Returns null if this type is not a union. |
| */ |
| public abstract SchemaType getUnionCommonBaseType(); |
| |
| /** |
| * For anonymous types defined inside a union only: gets |
| * the integer indicating the declaration order of this |
| * type within the outer union type, or zero if this is |
| * not applicable. The first anonymous union member within |
| * a union type is numbered "1". Used to differentiate |
| * between different anonymous types. |
| */ |
| public abstract int getAnonymousUnionMemberOrdinal(); |
| |
| /** |
| * For list types only: get the item type. This is the atomic |
| * or union type that is the type of every entry in the list. |
| * <p> |
| * Returns null if this type is not a list. |
| */ |
| public abstract SchemaType getListItemType(); |
| |
| /** |
| * For nonunion simple types: get the whitespace rule. This is |
| * either {@link #WS_PRESERVE}, {@link #WS_REPLACE}, or |
| * {@link #WS_COLLAPSE}. Returns {@link #WS_UNSPECIFIED} |
| * for unions and complex types. |
| */ |
| public abstract int getWhiteSpaceRule(); |
| |
| /** Whitespace rule unspecified. See {@link #getWhiteSpaceRule}. */ |
| public static final int WS_UNSPECIFIED = 0; |
| /** Whitespace preserved. See {@link #getWhiteSpaceRule}. */ |
| public static final int WS_PRESERVE = 1; |
| /** Whitespace replaced by ordinary space. See {@link #getWhiteSpaceRule}. */ |
| public static final int WS_REPLACE = 2; |
| /** Whitespace collapsed and trimmed. See {@link #getWhiteSpaceRule}. */ |
| public static final int WS_COLLAPSE = 3; |
| |
| /** |
| * Creates an immutable simple type value that does not reside in a tree. |
| */ |
| public abstract XmlAnySimpleType newValue(Object v); |
| |
| |
| /** |
| * Used to allow on-demand loading of types. |
| * |
| * @exclude |
| */ |
| public final static class Ref extends SchemaComponent.Ref |
| { |
| public Ref(SchemaType type) |
| { super(type); } |
| |
| public Ref(SchemaTypeSystem system, String handle) |
| { super(system, handle); } |
| |
| public final int getComponentType() |
| { return SchemaComponent.TYPE; } |
| |
| public final SchemaType get() |
| { return (SchemaType)getComponent(); } |
| } |
| |
| /** |
| * Retruns a SchemaType.Ref pointing to this schema type itself. |
| */ |
| public Ref getRef(); |
| } |