xmlschemavalidator.java

来自「JAVA 所有包」· Java 代码 · 共 1,737 行 · 第 1/5 页

JAVA
1,737
字号
/* * Copyright 1999-2005 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 com.sun.org.apache.xerces.internal.impl.xs;import java.io.IOException;import java.util.Enumeration;import java.util.HashMap;import java.util.Hashtable;import java.util.Stack;import java.util.Vector;import com.sun.org.apache.xerces.internal.impl.Constants;import com.sun.org.apache.xerces.internal.impl.RevalidationHandler;import com.sun.org.apache.xerces.internal.impl.XMLErrorReporter;import com.sun.org.apache.xerces.internal.impl.dv.DatatypeException;import com.sun.org.apache.xerces.internal.impl.dv.InvalidDatatypeValueException;import com.sun.org.apache.xerces.internal.impl.dv.ValidatedInfo;import com.sun.org.apache.xerces.internal.impl.dv.XSSimpleType;import com.sun.org.apache.xerces.internal.impl.validation.ValidationManager;import com.sun.org.apache.xerces.internal.impl.validation.ValidationState;import com.sun.org.apache.xerces.internal.impl.xs.identity.Field;import com.sun.org.apache.xerces.internal.impl.xs.identity.FieldActivator;import com.sun.org.apache.xerces.internal.impl.xs.identity.IdentityConstraint;import com.sun.org.apache.xerces.internal.impl.xs.identity.KeyRef;import com.sun.org.apache.xerces.internal.impl.xs.identity.Selector;import com.sun.org.apache.xerces.internal.impl.xs.identity.UniqueOrKey;import com.sun.org.apache.xerces.internal.impl.xs.identity.ValueStore;import com.sun.org.apache.xerces.internal.impl.xs.identity.XPathMatcher;import com.sun.org.apache.xerces.internal.impl.xs.models.CMBuilder;import com.sun.org.apache.xerces.internal.impl.xs.models.CMNodeFactory;import com.sun.org.apache.xerces.internal.impl.xs.models.XSCMValidator;import com.sun.org.apache.xerces.internal.util.AugmentationsImpl;import com.sun.org.apache.xerces.internal.util.IntStack;import com.sun.org.apache.xerces.internal.util.SymbolTable;import com.sun.org.apache.xerces.internal.util.XMLAttributesImpl;import com.sun.org.apache.xerces.internal.util.XMLChar;import com.sun.org.apache.xerces.internal.util.XMLSymbols;import com.sun.org.apache.xerces.internal.xni.Augmentations;import com.sun.org.apache.xerces.internal.xni.NamespaceContext;import com.sun.org.apache.xerces.internal.xni.QName;import com.sun.org.apache.xerces.internal.xni.XMLAttributes;import com.sun.org.apache.xerces.internal.xni.XMLDocumentHandler;import com.sun.org.apache.xerces.internal.xni.XMLLocator;import com.sun.org.apache.xerces.internal.xni.XMLResourceIdentifier;import com.sun.org.apache.xerces.internal.xni.XMLString;import com.sun.org.apache.xerces.internal.xni.XNIException;import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarDescription;import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarPool;import com.sun.org.apache.xerces.internal.xni.parser.XMLComponent;import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager;import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;import com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentFilter;import com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentSource;import com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver;import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;import com.sun.org.apache.xerces.internal.xs.AttributePSVI;import com.sun.org.apache.xerces.internal.xs.ElementPSVI;import com.sun.org.apache.xerces.internal.xs.ShortList;import com.sun.org.apache.xerces.internal.xs.XSConstants;import com.sun.org.apache.xerces.internal.xs.XSObjectList;import com.sun.org.apache.xerces.internal.xs.XSTypeDefinition;import org.xml.sax.SAXNotRecognizedException;import org.xml.sax.SAXNotSupportedException;/** * The XML Schema validator. The validator implements a document * filter: receiving document events from the scanner; validating * the content and structure; augmenting the InfoSet, if applicable; * and notifying the parser of the information resulting from the * validation process. * <p> * This component requires the following features and properties from the * component manager that uses it: * <ul> *  <li>http://xml.org/sax/features/validation</li> *  <li>http://apache.org/xml/properties/internal/symbol-table</li> *  <li>http://apache.org/xml/properties/internal/error-reporter</li> *  <li>http://apache.org/xml/properties/internal/entity-resolver</li> * </ul> *  * @xerces.internal  * * @author Sandy Gao IBM * @author Elena Litani IBM * @author Andy Clark IBM * @author Neeraj Bajaj, Sun Microsystems, inc. * @version $Id: XMLSchemaValidator.java,v 1.3 2005/09/26 13:02:34 sunithareddy Exp $ */public class XMLSchemaValidator    implements XMLComponent, XMLDocumentFilter, FieldActivator, RevalidationHandler {    //    // Constants    //    private static final boolean DEBUG = false;    // feature identifiers    /** Feature identifier: validation. */    protected static final String VALIDATION =        Constants.SAX_FEATURE_PREFIX + Constants.VALIDATION_FEATURE;    /** Feature identifier: validation. */    protected static final String SCHEMA_VALIDATION =        Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_VALIDATION_FEATURE;    /** Feature identifier: schema full checking*/    protected static final String SCHEMA_FULL_CHECKING =        Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_FULL_CHECKING;    /** Feature identifier: dynamic validation. */    protected static final String DYNAMIC_VALIDATION =        Constants.XERCES_FEATURE_PREFIX + Constants.DYNAMIC_VALIDATION_FEATURE;    /** Feature identifier: expose schema normalized value */    protected static final String NORMALIZE_DATA =        Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_NORMALIZED_VALUE;    /** Feature identifier: send element default value via characters() */    protected static final String SCHEMA_ELEMENT_DEFAULT =        Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_ELEMENT_DEFAULT;    /** Feature identifier: augment PSVI */    protected static final String SCHEMA_AUGMENT_PSVI =        Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_AUGMENT_PSVI;    /** Feature identifier: whether to recognize java encoding names */    protected static final String ALLOW_JAVA_ENCODINGS =        Constants.XERCES_FEATURE_PREFIX + Constants.ALLOW_JAVA_ENCODINGS_FEATURE;    /** Feature identifier: standard uri conformant feature. */    protected static final String STANDARD_URI_CONFORMANT_FEATURE =        Constants.XERCES_FEATURE_PREFIX + Constants.STANDARD_URI_CONFORMANT_FEATURE;        /** Feature: generate synthetic annotations */    protected static final String GENERATE_SYNTHETIC_ANNOTATIONS =         Constants.XERCES_FEATURE_PREFIX + Constants.GENERATE_SYNTHETIC_ANNOTATIONS_FEATURE;        /** Feature identifier: validate annotations. */    protected static final String VALIDATE_ANNOTATIONS =        Constants.XERCES_FEATURE_PREFIX + Constants.VALIDATE_ANNOTATIONS_FEATURE;        /** Feature identifier: honour all schemaLocations */    protected static final String HONOUR_ALL_SCHEMALOCATIONS =         Constants.XERCES_FEATURE_PREFIX + Constants.HONOUR_ALL_SCHEMALOCATIONS_FEATURE;    /** Feature identifier: use grammar pool only */    protected static final String USE_GRAMMAR_POOL_ONLY =        Constants.XERCES_FEATURE_PREFIX + Constants.USE_GRAMMAR_POOL_ONLY_FEATURE;    /** Feature identifier: whether to continue parsing a schema after a fatal error is encountered */    protected static final String CONTINUE_AFTER_FATAL_ERROR =        Constants.XERCES_FEATURE_PREFIX + Constants.CONTINUE_AFTER_FATAL_ERROR_FEATURE;    protected static final String PARSER_SETTINGS =            Constants.XERCES_FEATURE_PREFIX + Constants.PARSER_SETTINGS;    // property identifiers    /** Property identifier: symbol table. */    public static final String SYMBOL_TABLE =        Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;    /** Property identifier: error reporter. */    public static final String ERROR_REPORTER =        Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;    /** Property identifier: entity resolver. */    public static final String ENTITY_RESOLVER =        Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_RESOLVER_PROPERTY;    /** Property identifier: grammar pool. */    public static final String XMLGRAMMAR_POOL =        Constants.XERCES_PROPERTY_PREFIX + Constants.XMLGRAMMAR_POOL_PROPERTY;    protected static final String VALIDATION_MANAGER =        Constants.XERCES_PROPERTY_PREFIX + Constants.VALIDATION_MANAGER_PROPERTY;    protected static final String ENTITY_MANAGER =        Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_MANAGER_PROPERTY;    /** Property identifier: schema location. */    protected static final String SCHEMA_LOCATION =        Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_LOCATION;    /** Property identifier: no namespace schema location. */    protected static final String SCHEMA_NONS_LOCATION =        Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_NONS_LOCATION;    /** Property identifier: JAXP schema source. */    protected static final String JAXP_SCHEMA_SOURCE =        Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE;    /** Property identifier: JAXP schema language. */    protected static final String JAXP_SCHEMA_LANGUAGE =        Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_LANGUAGE;    // recognized features and properties    /** Recognized features. */    private static final String[] RECOGNIZED_FEATURES =        {            VALIDATION,            SCHEMA_VALIDATION,            DYNAMIC_VALIDATION,            SCHEMA_FULL_CHECKING,            ALLOW_JAVA_ENCODINGS,            CONTINUE_AFTER_FATAL_ERROR,            STANDARD_URI_CONFORMANT_FEATURE,            GENERATE_SYNTHETIC_ANNOTATIONS,            VALIDATE_ANNOTATIONS,            HONOUR_ALL_SCHEMALOCATIONS,            USE_GRAMMAR_POOL_ONLY};    /** Feature defaults. */    private static final Boolean[] FEATURE_DEFAULTS = { null,        // NOTE: The following defaults are nulled out on purpose.        //       If they are set, then when the XML Schema validator        //       is constructed dynamically, these values may override        //       those set by the application. This goes against the        //       whole purpose of XMLComponent#getFeatureDefault but        //       it can't be helped in this case. -Ac        null, //Boolean.FALSE,        null, //Boolean.FALSE,        null, //Boolean.FALSE,        null, //Boolean.FALSE,        null, //Boolean.FALSE,        null,        null,        null,        null,        null};    /** Recognized properties. */    private static final String[] RECOGNIZED_PROPERTIES =        {            SYMBOL_TABLE,            ERROR_REPORTER,            ENTITY_RESOLVER,            VALIDATION_MANAGER,            SCHEMA_LOCATION,            SCHEMA_NONS_LOCATION,            JAXP_SCHEMA_SOURCE,            JAXP_SCHEMA_LANGUAGE,            };    /** Property defaults. */    private static final Object[] PROPERTY_DEFAULTS =        { null, null, null, null, null, null, null, null, };    // this is the number of valuestores of each kind    // we expect an element to have.  It's almost    // never > 1; so leave it at that.    protected static final int ID_CONSTRAINT_NUM = 1;    //    // Data    //    /** current PSVI element info */    protected ElementPSVImpl fCurrentPSVI = new ElementPSVImpl();    // since it is the responsibility of each component to an    // Augmentations parameter if one is null, to save ourselves from    // having to create this object continually, it is created here.    // If it is not present in calls that we're passing on, we *must*    // clear this before we introduce it into the pipeline.    protected final AugmentationsImpl fAugmentations = new AugmentationsImpl();    /**     * Map which is used to catch instance documents that try     * and match a field several times in the same scope.     */    protected final HashMap fMayMatchFieldMap = new HashMap();    // this is included for the convenience of handleEndElement    protected XMLString fDefaultValue;    // Validation features    protected boolean fDynamicValidation = false;    protected boolean fSchemaDynamicValidation = false;    protected boolean fDoValidation = false;    protected boolean fFullChecking = false;    protected boolean fNormalizeData = true;    protected boolean fSchemaElementDefault = true;    protected boolean fAugPSVI = true;    protected boolean fIdConstraint = false;    protected boolean fUseGrammarPoolOnly = false;    /** Schema type: None, DTD, Schema */    private String fSchemaType = null;    // to indicate whether we are in the scope of entity reference or CData    protected boolean fEntityRef = false;    protected boolean fInCDATA = false;    // properties    /** Symbol table. */    protected SymbolTable fSymbolTable;    /**     * While parsing a document, keep the location of the document.     */    private XMLLocator fLocator;    /**     * A wrapper of the standard error reporter. We'll store all schema errors     * in this wrapper object, so that we can get all errors (error codes) of     * a specific element. This is useful for PSVI.     */    protected final class XSIErrorReporter {        // the error reporter property        XMLErrorReporter fErrorReporter;        // store error codes; starting position of the errors for each element;        // number of element (depth); and whether to record error        Vector fErrors = new Vector();        int[] fContext = new int[INITIAL_STACK_SIZE];        int fContextCount;        // set the external error reporter, clear errors        public void reset(XMLErrorReporter errorReporter) {            fErrorReporter = errorReporter;            fErrors.removeAllElements();            fContextCount = 0;        }        // should be called when starting process an element or an attribute.        // store the starting position for the current context        public void pushContext() {            if (!fAugPSVI) {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?