blob: 6928658f17251b361fc9e3b21a1b1e25e1001f29 [file] [log] [blame]
/* Copyright 2004 The Apache Software Foundation
*
* Licensed 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.xmlbeans;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Node;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.net.URL;
/**
* Represents a searchable set of XML Schema component definitions.
* <p>
* SchemaTypeLoader is somewhat analogous to {@link java.lang.ClassLoader},
* because it is responsible for finding {@link SchemaComponent} definitions
* by name, yet it is not responsible for being able to enumerate all the
* component definitons available. (If you wish to enumerate component
* definitions, see {@link SchemaTypeSystem}.) There are some ways in which
* SchemaTypeSystems are dissimilar from ClassLoaders, however.
* Since XML Schema has a number of instance-oriented typing mechanisms
* (such as wildcards) that do not exist in Java, a SchemaTypeLoader is
* not associated with a type; instead, a SchemaTypeLoader is associated
* with each XML instance.
* <p>
* Every XML instance is loaded within the context of a SchemaTypeLoader;
* the SchemaTypeLoader for an instance is used to resolve all type definitions
* within the instance and for applying type-sensitive methods such as
* {@link XmlObject#validate}.
* <p>
* Normally the SchemaTypeLoader being used for all instances is the
* context type loader (that is, the SchemaTypeLoader returned from
* {@link XmlBeans#getContextTypeLoader()}). The context type loader
* consults the thread's context ClassLoader (see {@link Thread#getContextClassLoader()})
* to find schema type defintions that are available on the classpath.
* The net result is that you can use schema types simply by putting
* their compiled schema JARs on your classpath.
* If you wish to load instances using a different SchemaTypeLoader, then you must
* call {@link #parse} methods on the SchemaTypeLoader instance explicitly
* rather than using the normal convenient Factory methods.
* <p>
* A SchemaTypeLoader can be obtained by dynamically loading XSD files
* using {@link XmlBeans#loadXsd}, or by assembling other SchemaTypeLoaders
* or SchemaTypeSystems on a path using {@link XmlBeans#typeLoaderUnion}.
*
* @see XmlBeans#loadXsd
* @see XmlBeans#getContextTypeLoader
* @see XmlBeans#typeLoaderUnion
* @see SchemaTypeSystem
*/
public interface SchemaTypeLoader {
/**
* Returns the type with the given name, or null if none.
*/
SchemaType findType(QName name);
/**
* Returns the document type rooted at the given element name, or null if none.
*/
SchemaType findDocumentType(QName name);
/**
* Returns the attribute type containing the given attribute name, or null if none.
*/
SchemaType findAttributeType(QName name);
/**
* Returns the global element defintion with the given name, or null if none.
*/
SchemaGlobalElement findElement(QName name);
/**
* Returns the global attribute defintion with the given name, or null if none.
*/
SchemaGlobalAttribute findAttribute(QName name);
/**
* Returns the model group defintion with the given name, or null if none.
*/
SchemaModelGroup findModelGroup(QName name);
/**
* Returns the attribute group defintion with the given name, or null if none.
*/
SchemaAttributeGroup findAttributeGroup(QName name);
/**
* True if the typeloader contains any definitions in the given namespace.
*/
boolean isNamespaceDefined(String namespace);
/**
* Used for on-demand loading.
*/
SchemaType.Ref findTypeRef(QName name);
/**
* Used for on-demand loading.
*/
SchemaType.Ref findDocumentTypeRef(QName name);
/**
* Used for on-demand loading.
*/
SchemaType.Ref findAttributeTypeRef(QName name);
/**
* Used for on-demand loading.
*/
SchemaGlobalElement.Ref findElementRef(QName name);
/**
* Used for on-demand loading.
*/
SchemaGlobalAttribute.Ref findAttributeRef(QName name);
/**
* Used for on-demand loading.
*/
SchemaModelGroup.Ref findModelGroupRef(QName name);
/**
* Used for on-demand loading.
*/
SchemaAttributeGroup.Ref findAttributeGroupRef(QName name);
/**
* Used for on-demand loading.
*/
SchemaIdentityConstraint.Ref findIdentityConstraintRef(QName name);
/**
* Finds a type for a given signature string
*/
SchemaType typeForSignature(String signature);
/**
* Finds a type for a given fully-qualified XML Bean classname
*/
SchemaType typeForClassname(String classname);
/**
* Loads original XSD source as a stream. See {@link SchemaType#getSourceName}.
*/
InputStream getSourceAsStream(String sourceName);
/**
* Compiles an XPath
*/
String compilePath(String pathExpr, XmlOptions options) throws XmlException;
/**
* Compiles an XQuery
*/
String compileQuery(String queryExpr, XmlOptions options) throws XmlException;
/**
* Creates an instance of the given type.
*/
XmlObject newInstance(SchemaType type, XmlOptions options);
/**
* Parses an instance of the given type.
*/
XmlObject parse(String xmlText, SchemaType type, XmlOptions options) throws XmlException;
/**
* Parses an instance of the given type.
*/
XmlObject parse(File file, SchemaType type, XmlOptions options) throws XmlException, IOException;
/**
* Parses an instance of the given type.
*/
XmlObject parse(URL file, SchemaType type, XmlOptions options) throws XmlException, IOException;
/**
* Parses an instance of the given type.
*/
XmlObject parse(InputStream jiois, SchemaType type, XmlOptions options) throws XmlException, IOException;
/**
* Parses an instance of the given type.
*/
XmlObject parse(XMLStreamReader xsr, SchemaType type, XmlOptions options) throws XmlException;
/**
* Parses an instance of the given type.
*/
XmlObject parse(Reader jior, SchemaType type, XmlOptions options) throws XmlException, IOException;
/**
* Parses an instance of the given type.
*/
XmlObject parse(Node node, SchemaType type, XmlOptions options) throws XmlException;
/**
* Returns an XmlSaxHandler that can parse an instance of the given type.
*/
XmlSaxHandler newXmlSaxHandler(SchemaType type, XmlOptions options);
/**
* Returns a DOMImplementation.
*/
DOMImplementation newDomImplementation(XmlOptions options);
}