/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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. */ /* * $Id: XSElementDeclaration.hpp 568078 2007-08-21 11:43:25Z amassari $ */ #if !defined(XSELEMENTDECLARATION_HPP) #define XSELEMENTDECLARATION_HPP #include #include XERCES_CPP_NAMESPACE_BEGIN /** * This class describes all properties of a Schema Element Declaration * component. * This is *always* owned by the validator /parser object from which * it is obtained. */ // forward declarations class XSAnnotation; class XSComplexTypeDefinition; class XSIDCDefinition; class XSTypeDefinition; class SchemaElementDecl; class XMLPARSER_EXPORT XSElementDeclaration : public XSObject { public: // Constructors and Destructor // ----------------------------------------------------------------------- /** @name Constructors */ //@{ /** * The default constructor * * @param schemaElementDecl * @param typeDefinition * @param substitutionGroupAffiliation * @param annot * @param identityConstraints * @param xsModel * @param elemScope * @param enclosingTypeDefinition * @param manager The configurable memory manager */ XSElementDeclaration ( SchemaElementDecl* const schemaElementDecl , XSTypeDefinition* const typeDefinition , XSElementDeclaration* const substitutionGroupAffiliation , XSAnnotation* const annot , XSNamedMap* const identityConstraints , XSModel* const xsModel , XSConstants::SCOPE elemScope = XSConstants::SCOPE_ABSENT , XSComplexTypeDefinition* const enclosingTypeDefinition = 0 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); //@}; /** @name Destructor */ //@{ ~XSElementDeclaration(); //@} //--------------------- /** @name overridden XSXSObject methods */ //@{ /** * The name of type NCName of this declaration as defined in * XML Namespaces. */ const XMLCh* getName(); /** * The [target namespace] of this object, or null if it is * unspecified. */ const XMLCh* getNamespace(); /** * A namespace schema information item corresponding to the target * namespace of the component, if it's globally declared; or null * otherwise. */ XSNamespaceItem *getNamespaceItem(); //@} //--------------------- /** @name XSElementDeclaration methods */ //@{ /** * [type definition]: either a simple type definition or a complex type * definition. */ XSTypeDefinition *getTypeDefinition() const; /** * Optional. One of SCOPE_GLOBAL, SCOPE_LOCAL, * or SCOPE_ABSENT. If the scope is local, then the * enclosingCTDefinition is present. */ XSConstants::SCOPE getScope() const; /** * The complex type definition for locally scoped declarations (see * scope). */ XSComplexTypeDefinition *getEnclosingCTDefinition() const; /** * [Value constraint]: one of VC_NONE, VC_DEFAULT, VC_FIXED. */ XSConstants::VALUE_CONSTRAINT getConstraintType() const; /** * [Value constraint]: the actual value with respect to the [type * definition]. */ const XMLCh *getConstraintValue(); /** * If nillable is true, then an element may also be valid if it carries * the namespace qualified attribute with local name nil * from namespace http://www.w3.org/2001/XMLSchema-instance * and value true (xsi:nil) even if it has no text or * element content despite a content type which would * otherwise require content. */ bool getNillable() const; /** * identity-constraint definitions: a set of constraint definitions. */ XSNamedMap *getIdentityConstraints(); /** * [substitution group affiliation]: optional. A top-level element * definition. */ XSElementDeclaration *getSubstitutionGroupAffiliation() const; /** * Convenience method. Check if exclusion is a substitution * group exclusion for this element declaration. * @param exclusion * DERIVATION_EXTENSION, DERIVATION_RESTRICTION or * DERIVATION_NONE. Represents final set for the element. * @return True if exclusion is a part of the substitution * group exclusion subset. */ bool isSubstitutionGroupExclusion(XSConstants::DERIVATION_TYPE exclusion); /** * [substitution group exclusions]: the returned value is a bit * combination of the subset of { * DERIVATION_EXTENSION, DERIVATION_RESTRICTION} or * DERIVATION_NONE. */ short getSubstitutionGroupExclusions() const; /** * Convenience method. Check if disallowed is a disallowed * substitution for this element declaration. * @param disallowed { * DERIVATION_SUBSTITUTION, DERIVATION_EXTENSION, DERIVATION_RESTRICTION * } or DERIVATION_NONE. Represents a block set for the * element. * @return True if disallowed is a part of the substitution * group exclusion subset. */ bool isDisallowedSubstitution(XSConstants::DERIVATION_TYPE disallowed); /** * [disallowed substitutions]: the returned value is a bit combination of * the subset of { * DERIVATION_SUBSTITUTION, DERIVATION_EXTENSION, DERIVATION_RESTRICTION * } corresponding to substitutions disallowed by this * XSElementDeclaration or DERIVATION_NONE. */ short getDisallowedSubstitutions() const; /** * {abstract} A boolean. */ bool getAbstract() const; /** * Optional. Annotation. */ XSAnnotation *getAnnotation() const; //@} //---------------------------------- /** methods needed by implementation */ //@{ void setTypeDefinition(XSTypeDefinition* typeDefinition); //@} private: void setEnclosingCTDefinition(XSComplexTypeDefinition* const toSet); friend class XSObjectFactory; // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- XSElementDeclaration(const XSElementDeclaration&); XSElementDeclaration & operator=(const XSElementDeclaration &); protected: // ----------------------------------------------------------------------- // data members // ----------------------------------------------------------------------- short fDisallowedSubstitutions; short fSubstitutionGroupExclusions; XSConstants::SCOPE fScope; SchemaElementDecl* fSchemaElementDecl; XSTypeDefinition* fTypeDefinition; XSComplexTypeDefinition* fEnclosingTypeDefinition; XSElementDeclaration* fSubstitutionGroupAffiliation; XSAnnotation* fAnnotation; XSNamedMap* fIdentityConstraints; }; inline XSTypeDefinition* XSElementDeclaration::getTypeDefinition() const { return fTypeDefinition; } inline XSNamedMap* XSElementDeclaration::getIdentityConstraints() { return fIdentityConstraints; } inline XSElementDeclaration* XSElementDeclaration::getSubstitutionGroupAffiliation() const { return fSubstitutionGroupAffiliation; } inline short XSElementDeclaration::getSubstitutionGroupExclusions() const { return fSubstitutionGroupExclusions; } inline short XSElementDeclaration::getDisallowedSubstitutions() const { return fDisallowedSubstitutions; } inline XSAnnotation *XSElementDeclaration::getAnnotation() const { return fAnnotation; } inline XSConstants::SCOPE XSElementDeclaration::getScope() const { return fScope; } inline XSComplexTypeDefinition *XSElementDeclaration::getEnclosingCTDefinition() const { return fEnclosingTypeDefinition; } inline void XSElementDeclaration::setTypeDefinition(XSTypeDefinition* typeDefinition) { fTypeDefinition = typeDefinition; } inline void XSElementDeclaration::setEnclosingCTDefinition(XSComplexTypeDefinition* const toSet) { fEnclosingTypeDefinition = toSet; } XERCES_CPP_NAMESPACE_END #endif