/* * 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: XSComplexTypeDefinition.hpp 568078 2007-08-21 11:43:25Z amassari $ */ #if !defined(XSCOMPLEXTYPEDEFINITION_HPP) #define XSCOMPLEXTYPEDEFINITION_HPP #include XERCES_CPP_NAMESPACE_BEGIN /** * This class represents a complexType definition * schema component. * This is *always* owned by the validator /parser object from which * it is obtained. * */ // forward declarations class XSAnnotation; class XSAttributeUse; class XSSimpleTypeDefinition; class XSParticle; class XSWildcard; class ComplexTypeInfo; class XMLPARSER_EXPORT XSComplexTypeDefinition : public XSTypeDefinition { public: // Content Model Types enum CONTENT_TYPE { /** * Represents an empty content type. A content type with the distinguished * value empty validates elements with no character or element * information item children. */ CONTENTTYPE_EMPTY = 0, /** * Represents a simple content type. A content type which is a simple * validates elements with character-only children. */ CONTENTTYPE_SIMPLE = 1, /** * Represents an element-only content type. An element-only content type * validates elements with children that conform to the supplied content * model. */ CONTENTTYPE_ELEMENT = 2, /** * Represents a mixed content type. */ CONTENTTYPE_MIXED = 3 }; // Constructors and Destructor // ----------------------------------------------------------------------- /** @name Constructors */ //@{ /** * The default constructor * * @param complexTypeInfo * @param xsWildcard * @param xsSimpleType * @param xsAttList * @param xsBaseType * @param xsParticle * @param headAnnot * @param xsModel * @param manager The configurable memory manager */ XSComplexTypeDefinition ( ComplexTypeInfo* const complexTypeInfo , XSWildcard* const xsWildcard , XSSimpleTypeDefinition* const xsSimpleType , XSAttributeUseList* const xsAttList , XSTypeDefinition* const xsBaseType , XSParticle* const xsParticle , XSAnnotation* const headAnnot , XSModel* const xsModel , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); //@}; /** @name Destructor */ //@{ ~XSComplexTypeDefinition(); //@} //--------------------- /** @name XSComplexTypeDefinition methods */ //@{ /** * [derivation method]: either DERIVATION_EXTENSION, * DERIVATION_RESTRICTION, or DERIVATION_NONE * (see XSObject). */ XSConstants::DERIVATION_TYPE getDerivationMethod() const; /** * [abstract]: a boolean. Complex types for which abstract is * true must not be used as the type definition for the validation of * element information items. */ bool getAbstract() const; /** * A set of attribute uses. */ XSAttributeUseList *getAttributeUses(); /** * Optional.An attribute wildcard. */ XSWildcard *getAttributeWildcard() const; /** * [content type]: one of empty (CONTENTTYPE_EMPTY), a simple * type definition (CONTENTTYPE_SIMPLE), mixed ( * CONTENTTYPE_MIXED), or element-only ( * CONTENTTYPE_ELEMENT). */ CONTENT_TYPE getContentType() const; /** * A simple type definition corresponding to simple content model, * otherwise null */ XSSimpleTypeDefinition *getSimpleType() const; /** * A particle for mixed or element-only content model, otherwise * null */ XSParticle *getParticle() const; /** * [prohibited substitutions]: a subset of {extension, restriction} * @param toTest Extention or restriction constants (see * XSObject). * @return True if toTest is a prohibited substitution, otherwise * false. */ bool isProhibitedSubstitution(XSConstants::DERIVATION_TYPE toTest); /** * [prohibited substitutions]: A subset of {extension, restriction} or * DERIVATION_NONE represented as a bit flag (see * XSObject). */ short getProhibitedSubstitutions() const; /** * A set of [annotations]. */ XSAnnotationList *getAnnotations(); /** * 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(); /** * A boolean that specifies if the type definition is * anonymous. Convenience attribute. */ bool getAnonymous() const; /** * {base type definition}: either a simple type definition or a complex * type definition. */ XSTypeDefinition *getBaseType(); /** * Convenience method: check if this type is derived from the given * ancestorType. * @param ancestorType An ancestor type definition. * @return Return true if this type is derived from * ancestorType. */ bool derivedFromType(const XSTypeDefinition* const ancestorType); //@} //---------------------------------- /** methods needed by implementation */ //@{ //@} private: /** * Set the base type */ void setBaseType(XSTypeDefinition* const xsBaseType); friend class XSObjectFactory; // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- XSComplexTypeDefinition(const XSComplexTypeDefinition&); XSComplexTypeDefinition & operator=(const XSComplexTypeDefinition &); protected: // ----------------------------------------------------------------------- // data members // ----------------------------------------------------------------------- ComplexTypeInfo* fComplexTypeInfo; XSWildcard* fXSWildcard; XSAttributeUseList* fXSAttributeUseList; XSSimpleTypeDefinition* fXSSimpleTypeDefinition; XSAnnotationList* fXSAnnotationList; XSParticle* fParticle; short fProhibitedSubstitution; }; inline XSAttributeUseList* XSComplexTypeDefinition::getAttributeUses() { return fXSAttributeUseList; } inline XSWildcard* XSComplexTypeDefinition::getAttributeWildcard() const { return fXSWildcard; } inline XSSimpleTypeDefinition* XSComplexTypeDefinition::getSimpleType() const { return fXSSimpleTypeDefinition; } inline short XSComplexTypeDefinition::getProhibitedSubstitutions() const { return fProhibitedSubstitution; } inline XSParticle *XSComplexTypeDefinition::getParticle() const { return fParticle; } inline void XSComplexTypeDefinition::setBaseType(XSTypeDefinition* const xsBaseType) { fBaseType = xsBaseType; } XERCES_CPP_NAMESPACE_END #endif