1320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson/* 2320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more 3320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * contributor license agreements. See the NOTICE file distributed with 4320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * this work for additional information regarding copyright ownership. 5320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0 6320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * (the "License"); you may not use this file except in compliance with 7320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the License. You may obtain a copy of the License at 8320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 9320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 10320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 11320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Unless required by applicable law or agreed to in writing, software 12320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 13320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * See the License for the specific language governing permissions and 15320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * limitations under the License. 16320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 17320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 18320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson// $Id: Schema.java 446598 2006-09-15 12:55:40Z jeremias $ 19320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 20320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpackage javax.xml.validation; 21320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 22320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson/** 23320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Immutable in-memory representation of grammar. 24f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 25320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 26320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * This object represents a set of constraints that can be checked/ 27f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * enforced against an XML document. 28f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 29320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 30320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * A {@link Schema} object is thread safe and applications are 31320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * encouraged to share it across many parsers in many threads. 32f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 33320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 34320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * A {@link Schema} object is immutable in the sense that it shouldn't 35320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * change the set of constraints once it is created. In other words, 36320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * if an application validates the same document twice against the same 37f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * {@link Schema}, it must always produce the same result. 38f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 39320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 40320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * A {@link Schema} object is usually created from {@link SchemaFactory}. 41f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 42320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 43320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Two kinds of validators can be created from a {@link Schema} object. 44320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * One is {@link Validator}, which provides highly-level validation 45320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * operations that cover typical use cases. The other is 46320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link ValidatorHandler}, which works on top of SAX for better 47320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * modularity. 48f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 49320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 50320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * This specification does not refine 51320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the {@link java.lang.Object#equals(java.lang.Object)} method. 52320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * In other words, if you parse the same schema twice, you may 53320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * still get <code>!schemaA.equals(schemaB)</code>. 54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 55320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @author <a href="mailto:Kohsuke.Kawaguchi@Sun.com">Kohsuke Kawaguchi</a> 56320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @version $Revision: 446598 $, $Date: 2006-09-15 05:55:40 -0700 (Fri, 15 Sep 2006) $ 57320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see <a href="http://www.w3.org/TR/xmlschema-1/">XML Schema Part 1: Structures</a> 58320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see <a href="http://www.w3.org/TR/xml11/">Extensible Markup Language (XML) 1.1</a> 59320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see <a href="http://www.w3.org/TR/REC-xml">Extensible Markup Language (XML) 1.0 (Second Edition)</a> 60320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @since 1.5 61320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 62320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpublic abstract class Schema { 63f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 64320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 65320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Constructor for the derived class. 66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 67320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 68320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The constructor does nothing. 69320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 70320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson protected Schema() { 71320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 72f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 73320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 74320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Creates a new {@link Validator} for this {@link Schema}. 75f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 76320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 77320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * A validator enforces/checks the set of constraints this object 78320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * represents. 79f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 80320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @return 81320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Always return a non-null valid object. 82320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 83320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public abstract Validator newValidator(); 84f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 85320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 86320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Creates a new {@link ValidatorHandler} for this {@link Schema}. 87f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 88320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @return 89320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Always return a non-null valid object. 90320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 91320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public abstract ValidatorHandler newValidatorHandler(); 92320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson} 93