001: package net.sf.saxon.type;
002:
003: import net.sf.saxon.om.NameChecker;
004: import net.sf.saxon.om.NamespaceResolver;
005: import net.sf.saxon.om.SequenceIterator;
006:
007: /**
008: * This interface represents a simple type, which may be a built-in simple type, or
009: * a user-defined simple type.
010: */
011:
012: public interface SimpleType extends SchemaType {
013:
014: /**
015: * Test whether this Simple Type is an atomic type
016: * @return true if this is an atomic type
017: */
018:
019: boolean isAtomicType();
020:
021: /**
022: * Test whether this Simple Type is a list type
023: * @return true if this is a list type
024: */
025: boolean isListType();
026:
027: /**
028: * Test whether this Simple Type is a union type
029: * @return true if this is a union type
030: */
031:
032: boolean isUnionType();
033:
034: /**
035: * Get the most specific possible atomic type that all items in this SimpleType belong to
036: * @return the lowest common supertype of all member types
037: */
038:
039: AtomicType getCommonAtomicType();
040:
041: SchemaType getBuiltInBaseType() throws ValidationException;
042:
043: /**
044: * Get the typed value corresponding to a given string value, assuming it is
045: * valid against this type
046: * @param value the string value
047: * @param resolver a namespace resolver used to resolve any namespace prefixes appearing
048: * in the content of values. Can supply null, in which case any namespace-sensitive content
049: * will be rejected.
050: * @param nameChecker
051: * @return an iterator over the atomic sequence comprising the typed value. The objects
052: * returned by this SequenceIterator will all be of type {@link net.sf.saxon.value.AtomicValue}
053: */
054:
055: public SequenceIterator getTypedValue(CharSequence value,
056: NamespaceResolver resolver, NameChecker nameChecker)
057: throws ValidationException;
058:
059: /**
060: * Check whether a given input string is valid according to this SimpleType
061: * @param value the input string to be checked
062: * @param nsResolver a namespace resolver used to resolve namespace prefixes if the type
063: * is namespace sensitive. The value supplied may be null; in this case any namespace-sensitive
064: * content will throw an UnsupportedOperationException.
065: * @param nameChecker
066: * @return null if validation succeeds; return a ValidationException describing the validation failure
067: * if validation fails. Note that the exception is returned rather than being thrown.
068: * @throws UnsupportedOperationException if the type is namespace-sensitive and no namespace
069: * resolver is supplied
070: */
071:
072: ValidationException validateContent(CharSequence value,
073: NamespaceResolver nsResolver, NameChecker nameChecker);
074:
075: /**
076: * Test whether this type is namespace sensitive, that is, if a namespace context is needed
077: * to translate between the lexical space and the value space. This is true for types derived
078: * from, or containing, QNames and NOTATIONs
079: * @return true if the type is namespace-sensitive
080: */
081:
082: boolean isNamespaceSensitive();
083:
084: /**
085: * Determine how values of this simple type are whitespace-normalized.
086: * @return one of {@link net.sf.saxon.value.Whitespace#PRESERVE}, {@link net.sf.saxon.value.Whitespace#COLLAPSE},
087: * {@link net.sf.saxon.value.Whitespace#REPLACE}.
088: * @param th
089: */
090:
091: public int getWhitespaceAction(TypeHierarchy th);
092: }
093:
094: //
095: // The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
096: // you may not use this file except in compliance with the License. You may obtain a copy of the
097: // License at http://www.mozilla.org/MPL/
098: //
099: // Software distributed under the License is distributed on an "AS IS" basis,
100: // WITHOUT WARRANTY OF ANY KIND, either express or implied.
101: // See the License for the specific language governing rights and limitations under the License.
102: //
103: // The Original Code is: all this file.
104: //
105: // The Initial Developer of the Original Code is Michael H. Kay
106: //
107: // Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved.
108: //
109: // Contributor(s): none.
110: //
|