001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package org.apache.xerces.impl.xs.models;
019:
020: import org.apache.xerces.xni.QName;
021: import org.apache.xerces.impl.xs.SubstitutionGroupHandler;
022: import org.apache.xerces.impl.xs.XMLSchemaException;
023:
024: import java.util.Vector;
025:
026: /**
027: * Note: State of the content model is stored in the validator
028: *
029: * @xerces.internal
030: *
031: * @author Sandy Gao, IBM
032: * @author Elena Litani, IBM
033: * @version $Id: XSCMValidator.java 573322 2007-09-06 16:48:47Z peterjm $
034: */
035: public interface XSCMValidator {
036:
037: public static final short FIRST_ERROR = -1;
038:
039: // on subsequent errors the validator should not report
040: // an error
041: //
042: public static final short SUBSEQUENT_ERROR = -2;
043:
044: /**
045: * This methods to be called on entering a first element whose type
046: * has this content model. It will return the initial state of the content model
047: *
048: * @return Start state of the content model
049: */
050: public int[] startContentModel();
051:
052: /**
053: * The method corresponds to one transaction in the content model.
054: *
055: * @param elementName
056: * @param state Current state
057: * @return element decl or wildcard decl that
058: * corresponds to the element from the Schema grammar
059: */
060: public Object oneTransition(QName elementName, int[] state,
061: SubstitutionGroupHandler subGroupHandler);
062:
063: /**
064: * The method indicates the end of list of children
065: *
066: * @param state Current state of the content model
067: * @return true if the last state was a valid final state
068: */
069: public boolean endContentModel(int[] state);
070:
071: /**
072: * check whether this content violates UPA constraint.
073: *
074: * @param subGroupHandler the substitution group handler
075: * @return true if this content model contains other or list wildcard
076: */
077: public boolean checkUniqueParticleAttribution(
078: SubstitutionGroupHandler subGroupHandler)
079: throws XMLSchemaException;
080:
081: /**
082: * Check which elements are valid to appear at this point. This method also
083: * works if the state is in error, in which case it returns what should
084: * have been seen.
085: *
086: * @param state the current state
087: * @return a Vector whose entries are instances of
088: * either XSWildcardDecl or XSElementDecl.
089: */
090: public Vector whatCanGoHere(int[] state);
091:
092: /**
093: * Checks if this content model has had its min/maxOccurs values reduced for
094: * purposes of speeding up UPA. If so, this content model should not be used
095: * for any purpose other than checking unique particle attribution
096: *
097: * @return a boolean that says whether this content has been compacted for UPA
098: */
099: public boolean isCompactedForUPA();
100: } // XSCMValidator
|