com.sun.msv.grammar.xmlschema
Class ComplexTypeExp

java.lang.Object
  extended by com.sun.msv.grammar.Expression
      extended by com.sun.msv.grammar.ReferenceExp
          extended by com.sun.msv.grammar.xmlschema.RedefinableExp
              extended by com.sun.msv.grammar.xmlschema.XMLSchemaTypeExp
                  extended by com.sun.msv.grammar.xmlschema.ComplexTypeExp
All Implemented Interfaces:
Serializable

public class ComplexTypeExp
extends XMLSchemaTypeExp

ComplexType definition. ComplexTypeExp holds an expression (as a ReferenceExp) that matches to this type itself.

the body field contains the expression that exactly matches to the declared content model (without any substitutable types).

the exp field contains the reference to the body field, if this complex type is not abstract. If abstract, then nullSet is set. You shouldn't directly manipulate the exp field. Instead, you should use the setAbstract(boolean) method to do it.

Note: The runtime type substitution (the use of xsi:type attribute) is implemented at the VGM layer. Therefore, AGMs of XML Schema does NOT precisely represent what are actually allowed and what are not.

Complex Type Definition Schema Component Properties

This table shows the mapping between "complex type definition schema component properties" (which is defined in the spec) and corresponding method/field of this class.

Property of the spec method/field of this class
name The ReferenceExp.name field.
target namespace the getTargetNamespace() method.
abstract the isAbstract() method.
base type definition simpleBaseType or complexBaseType field, depending on whether the base type is a simple type or a complex type.
derivation method the derivationMethod field.
final the finalValue field.
prohibited substitutions the block field.
attribtue uses
attribute wildcard
content type
Not directly accessible. Can be found by walking the children of the body field.
annotation Unaccessible. This information is removed during the parsing phase.

Abstractness

The exp field and the self field are very similar. In fact, the only difference is that the former is affected by the abstract property, while the latter isn't.

So if it has to be affected by the abstract property (like referencing a complex type as the element body), you should use the exp field. If you don't want to be affected by the abstract property (like referencing a complex type as the base type of another complex type), then you should refer to the body field.

Author:
Kohsuke KAWAGUCHI
See Also:
ElementDeclExp, Serialized Form

Field Summary
 ReferenceExp attWildcard
          attribute wildcard as an expression.
 int block
          The block property of this schema component, implemented as a bit field.
 ReferenceExp body
          actual content model definition + attribute uses.
 ComplexTypeExp complexBaseType
          base type of this complex type.
 int derivationMethod
          the derivation method used to derive this complex type from the base type.
 int finalValue
          The final property of this schema component, implemented as a bit field.
 XMLSchemaSchema parent
          parent XMLSchemaSchema object to which this object belongs.
 XSDatatypeExp simpleBaseType
          base type of this complex type.
 AttributeWildcard wildcard
          Attribute wild card constraint.
 
Fields inherited from class com.sun.msv.grammar.xmlschema.XMLSchemaTypeExp
EXTENSION, RESTRICTION
 
Fields inherited from class com.sun.msv.grammar.ReferenceExp
exp, name
 
Fields inherited from class com.sun.msv.grammar.Expression
anyString, epsilon, nullSet, verifierTag
 
Constructor Summary
ComplexTypeExp(XMLSchemaSchema schema, String localName)
           
 
Method Summary
 AttributeWildcard getAttributeWildcard()
           
 int getBlock()
          Gets the value of the block constraint.
 RedefinableExp getClone()
          clone this object.
 String getTargetNamespace()
          gets the target namespace property of this component as specified in the spec.
 boolean isAbstract()
          checks if this complex type is abstract.
 boolean isDefined()
          implementation detail.
 boolean isDerivedTypeOf(ComplexTypeExp baseType, int constraint)
          Checks if this type is a derived type of the specified type.
 boolean isDerivedTypeOf(XMLSchemaTypeExp exp, int constraint)
           
 boolean isDerivedTypeOf(com.sun.msv.datatype.xsd.XSDatatype baseType, int constraint)
           
 void redefine(RedefinableExp _rhs)
          assigns contents of rhs to this object.
 void setAbstract(boolean isAbstract)
           
 void setAttributeWildcard(AttributeWildcard local)
           
 
Methods inherited from class com.sun.msv.grammar.ReferenceExp
equals, visit, visit, visit, visit
 
Methods inherited from class com.sun.msv.grammar.Expression
getExpandedExp, hashCode, isEpsilonReducible, peelOccurence, visit, visit, visit, visit
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

body

public final ReferenceExp body
actual content model definition + attribute uses.


attWildcard

public final ReferenceExp attWildcard
attribute wildcard as an expression.


parent

public final XMLSchemaSchema parent
parent XMLSchemaSchema object to which this object belongs.


wildcard

public AttributeWildcard wildcard
Attribute wild card constraint.

Due to the nasty definition of the interaction between attribute wildcards, we cannot add the expression for validating wildcard until the very last moment.

Until the wrap-up phase of the schema parsing, this field will contain the "local wildcard definition." In the wrap-up phase, this field is replaced by the "complete wildcard definition."


complexBaseType

public ComplexTypeExp complexBaseType
base type of this complex type. Either baseComplexType field or baseSimpleType field is set. If the base type is ur-type, both fields are set to null.

See Also:
simpleBaseType

simpleBaseType

public XSDatatypeExp simpleBaseType
base type of this complex type.

See Also:
complexBaseType

derivationMethod

public int derivationMethod
the derivation method used to derive this complex type from the base type. Either RESTRICTION or EXTENSION.

See Also:
#simpleBaseType

finalValue

public int finalValue
The final property of this schema component, implemented as a bit field.

0, RESTRICTION, EXTENSION, or (RESTRICTION|EXTENSION).


block

public int block
The block property of this schema component, implemented as a bit field.

0, RESTRICTION, EXTENSION, or (RESTRICTION|EXTENSION).

Constructor Detail

ComplexTypeExp

public ComplexTypeExp(XMLSchemaSchema schema,
                      String localName)
Method Detail

getAttributeWildcard

public AttributeWildcard getAttributeWildcard()

setAttributeWildcard

public void setAttributeWildcard(AttributeWildcard local)

getTargetNamespace

public final String getTargetNamespace()
gets the target namespace property of this component as specified in the spec.

If the property is absent, then this method returns the empty string.

This method is just a shortcut for parent.targetNamespace.


isAbstract

public boolean isAbstract()
checks if this complex type is abstract.

This method corresponds to the abstract property of the complex type declaration schema component.

Returns:
true if this method is abstract. Flase if not.

setAbstract

public void setAbstract(boolean isAbstract)

isDerivedTypeOf

public boolean isDerivedTypeOf(ComplexTypeExp baseType,
                               int constraint)
Checks if this type is a derived type of the specified type.

This method is an implementation of "Type Derivation OK (Complex)" test of the spec.

If you are not familiar with the abovementioned part of the spec, don't use this method. This method probably won't give you what you expected.

Parameters:
constraint - A bit field that represents the restricted derivation. This field must consists of bitwise and of XMLSchemaTypeExp.EXTENSION or XMLSchemaTypeExp.RESTRICTION.
Returns:
true if the specified type is "validly derived" from this type. false if not.

isDerivedTypeOf

public boolean isDerivedTypeOf(com.sun.msv.datatype.xsd.XSDatatype baseType,
                               int constraint)
See Also:
isDerivedTypeOf(ComplexTypeExp,int)

isDerivedTypeOf

public boolean isDerivedTypeOf(XMLSchemaTypeExp exp,
                               int constraint)

getBlock

public int getBlock()
Gets the value of the block constraint. SimpleTypeExp always returns 0 because it doesn't have the block constraint.

Specified by:
getBlock in class XMLSchemaTypeExp

getClone

public RedefinableExp getClone()
clone this object.

Specified by:
getClone in class RedefinableExp

redefine

public void redefine(RedefinableExp _rhs)
Description copied from class: RedefinableExp
assigns contents of rhs to this object. rhs and this object must be the same runtime type, and they must have the same name. this method redefines this object by the given component. derived class should override this method and copy necessary fields, should it necessary.

Overrides:
redefine in class RedefinableExp

isDefined

public boolean isDefined()
implementation detail. A ComplexTypeDecl is properly defined if its self is defined. Note that the default implementation of the isDefined method doesn't work for this class because the exp field is set by the constructor.

Overrides:
isDefined in class ReferenceExp