com.saxonica.schema
Class ElementDecl

java.lang.Object
  extended bycom.saxonica.schema.SchemaStructure
      extended bycom.saxonica.schema.ElementDecl
All Implemented Interfaces:
SchemaComponent, SchemaDeclaration, java.io.Serializable, javax.xml.transform.SourceLocator, Term, UserSchemaComponent

public class ElementDecl
extends SchemaStructure
implements UserSchemaComponent, SchemaDeclaration, Term

The object represents an element declaration in the schema. It may be a global element declaration, or a local element declaration.

See Also:
Serialized Form

Field Summary
 
Fields inherited from interface net.sf.saxon.type.SchemaComponent
FIXED_UP, INCOMPLETE, INVALID, UNVALIDATED, VALIDATED, VALIDATING
 
Constructor Summary
ElementDecl(PreparedSchema schema, javax.xml.transform.SourceLocator locator)
          Creates a new element declaration
 
Method Summary
 void addIdentityConstraint(IdentityConstraint constraint)
          Adds the given IdentityConstraint to this element definition.
 void addSubstitutionGroupMember(ElementDecl member)
          Add a member of the substitution group that has this element as its head.
 boolean allowsDerivation(int derivation)
          Determines whether derivation (of a particular kind) from this type is allowed, based on the "final" property
 boolean fixup(PreparedSchema schema)
          Check references from this component to other components
protected  void fixupSubstitutionGroup(PreparedSchema schema)
          Fix up the reference to the head of the substitition group
 int getBlock()
          Returns the value of the 'block' attribute for this element
 java.lang.String getDefaultValue()
          Returns the default value defined for this element definition.
 java.lang.String getDisplayName()
          Returns the display name of this Element declaration.
 int getFingerprint()
          Get the fingerprint of the name of this element declaration in the namePool
 Value getFixedValue()
          Returns the 'fixed' value defined for this element declaration.
 java.util.Iterator getIdentityConstraints()
          Returns an Iterator over the identity constrains defined within this element definition.
 java.lang.String getName()
          Returns the local name of this Element declaration.
 int getNameCode()
          Get the nameCode of the name of this element declaration in the namePool
 java.lang.String getNamespaceURI()
          Get the namespace URI of this element declaration
 int getSubstitutionGroupHead()
          Returns the fingerprint of the name of the head of the substitutionGroup for this element declaration, or -1 if there is none.
 java.util.Set getSubstitutionGroupMembers()
          Get the known members of the substitution group of this element, as a Set containing the ElementDecl objects.
 ElementDecl getSubstitutionGroupOwner()
          Returns the head of the substitutionGroup for this element declaration, or null if there is none.
 ComponentReference getSubstitutionGroupOwnerReference()
          Get the component reference pointing to the owner of the substitution group.
 SchemaType getType()
          Returns the Schema Type (ComplexType or SimpleType) of this Element Declaration.
 int getTypeFingerprint()
          Get the namepool fingerprint of the name of the element's type.
 boolean isAbstract()
          Returns true if this element definition is abstract
 boolean isNillable()
          Determine whether or not instances of this element definition permit xsi:nil to be set to "yes".
 boolean isSameDeclaration(ElementDecl other)
          Test whether this is the same type as another type.
 java.util.Iterator iterateSubstitutionGroup()
          Iterate over all the elements contained in the substitution group of which this element is the head.
 void registerComplexTypeUsingThisElement(UserComplexType type)
          Register a complex type that contains this element as a particle.
 void setAbstract(boolean isAbstract)
          Sets whether or not this element definition is abstract.
 void setBlock(int block)
          Sets the value of the 'block' attribute for this element For internal use only.
 void setDefaultValue(java.lang.String value)
          Sets the 'default' value for this element declaration.
 void setFinalProhibitions(int finalValue)
          Sets the value of the 'final' property, indicating which types of derivation are not allowed.
 void setFixedValue(Value value)
          Sets the fixed value for this element definition.
 void setNameCode(int nameCode)
          Set the name of this element declaration
 void setNamespaceResolver(NamespaceResolver resolver)
          Set the namespace resolver to be used
 void setNillable(boolean nillable)
          Sets whether or not instances of this element definition may set xsi:nil='true'.
 void setSubstitutionGroupHead(int nameCode)
          Sets the fingerprint of the name of the head of the substitutionGroup for this element definition.
 void setTypeReference(TypeReference type)
          Sets the schema type for this element declaration.
 boolean validate(PreparedSchema schema)
          Check the validity (consistency) of this element definition.
 
Methods inherited from class com.saxonica.schema.SchemaStructure
getColumnNumber, getFixupStatus, getLineNumber, getPublicId, getSchema, getSystemId, getValidationStatus, lookForCycles, setFixupStatus, setLineNumber, setLocator, setSchema, setSystemId, setValidationStatus
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.saxonica.schema.UserSchemaComponent
lookForCycles
 
Methods inherited from interface net.sf.saxon.type.SchemaComponent
getValidationStatus
 

Constructor Detail

ElementDecl

public ElementDecl(PreparedSchema schema,
                   javax.xml.transform.SourceLocator locator)
Creates a new element declaration

Parameters:
schema - the XML Schema to which this element declaration belongs
locator - identifies the location of the element declaration in the source schema
Method Detail

setNamespaceResolver

public void setNamespaceResolver(NamespaceResolver resolver)
Set the namespace resolver to be used


addIdentityConstraint

public void addIdentityConstraint(IdentityConstraint constraint)
Adds the given IdentityConstraint to this element definition. For internal use only.

Parameters:
constraint - the IdentityConstraint to add.

getBlock

public int getBlock()
Returns the value of the 'block' attribute for this element

Returns:
the value of the block attribute, as a bit-significant integer using constants such as SchemaType.DERIVE_BY_SUBSTITUTION, indicating which kinds of derivation from this element declaration are blocked.

getDefaultValue

public java.lang.String getDefaultValue()
Returns the default value defined for this element definition.

Returns:
the default value of this element definition, or null if no default was specified.

allowsDerivation

public boolean allowsDerivation(int derivation)
Determines whether derivation (of a particular kind) from this type is allowed, based on the "final" property

Parameters:
derivation - the kind of derivation, e.g. SchemaType.DERIVATION_LIST
Returns:
true if this kind of derivation is allowed

getFixedValue

public Value getFixedValue()
Returns the 'fixed' value defined for this element declaration.

Returns:
the fixed value for this element declaration, or null if no fixed value was specified.

getIdentityConstraints

public java.util.Iterator getIdentityConstraints()
Returns an Iterator over the identity constrains defined within this element definition.

Returns:
an Iterator of IdentityConstraint objects contained within this element definition.

getDisplayName

public java.lang.String getDisplayName()
Returns the display name of this Element declaration. This will be in the form of a lexical QName typically using the original prefix

Returns:
the local name of this element declaration

getNamespaceURI

public java.lang.String getNamespaceURI()
Get the namespace URI of this element declaration


getName

public java.lang.String getName()
Returns the local name of this Element declaration. The name returned, if not null, will be an NCName.

Returns:
the name of this element declaration

getTypeFingerprint

public int getTypeFingerprint()
Get the namepool fingerprint of the name of the element's type.

Returns:
the fingerprint of the type, or -1 if none is available.

getType

public SchemaType getType()
                   throws UnresolvedReferenceException
Returns the Schema Type (ComplexType or SimpleType) of this Element Declaration.

Specified by:
getType in interface SchemaDeclaration
Returns:
the Schema Type of this Element Declaration.
Throws:
UnresolvedReferenceException - if the reference from the element declaration to its type cannot be resolved.

getSubstitutionGroupHead

public int getSubstitutionGroupHead()
Returns the fingerprint of the name of the head of the substitutionGroup for this element declaration, or -1 if there is none.

Returns:
the fingerprint of the name of the head of the substitution group for this element declaration, or -1 if none is defined. This is the immediate parent in the substitution group hierarchy.

getSubstitutionGroupOwnerReference

public ComponentReference getSubstitutionGroupOwnerReference()
Get the component reference pointing to the owner of the substitution group. Return null if not defined.


getSubstitutionGroupOwner

public ElementDecl getSubstitutionGroupOwner()
                                      throws UnresolvedReferenceException
Returns the head of the substitutionGroup for this element declaration, or null if there is none.

Returns:
the element declaration representing the head of the substitution group for this element declaration, or null if none is defined. This is the immediate parent in the substitution group hierarchy.
Throws:
UnresolvedReferenceException - if the element is a member of a substitution group but no declaration of the referenced element is (yet) available

getSubstitutionGroupMembers

public java.util.Set getSubstitutionGroupMembers()
Get the known members of the substitution group of this element, as a Set containing the ElementDecl objects. This includes all applicable element declarations in schemas compiled within the same Configuration as this schema.


addSubstitutionGroupMember

public void addSubstitutionGroupMember(ElementDecl member)
                                throws SchemaException,
                                       ValidationException
Add a member of the substitution group that has this element as its head. For internal use only.

This method may be called at any time, for example when a new schema is loaded as a result of validating an instance document. The method is therefore synchronized, since the schema may be used in several threads concurrently. Adding a new member to a substitution group means that all complex type definitions that include this element in their content model must be recompiled.

It is not possible to add to a substitution group once the element declaration has been used, either for validating a source document or for compiling stylesheets or schemas.

Parameters:
member - The element declaration to be added to the substitution group of which this element declaration is the head. Elements are added to each ancestor in the substitution group hierarchy.
Throws:
SchemaException
ValidationException

registerComplexTypeUsingThisElement

public void registerComplexTypeUsingThisElement(UserComplexType type)
Register a complex type that contains this element as a particle. If new elements are added to the substitution group headed by this element, these complex types will need to be recompiled to permit the new substititution group members. For internal use only.

Parameters:
type - A complex type that contains this element as a particle.

isAbstract

public boolean isAbstract()
Returns true if this element definition is abstract

Returns:
true if this element definition is abstract

isNillable

public boolean isNillable()
Determine whether or not instances of this element definition permit xsi:nil to be set to "yes".

Returns:
true if instances conforming to this element definition may be nilled, and false otherwise.

setAbstract

public void setAbstract(boolean isAbstract)
Sets whether or not this element definition is abstract. For internal use only.

Parameters:
isAbstract - a boolean: when true indicates that this element definition is abstract

setBlock

public void setBlock(int block)
Sets the value of the 'block' attribute for this element For internal use only.

Parameters:
block - the value of the block attribute for this element definition, indicating the types of derivation that are not allowed, as a bit-significant integer, using constants such as SchemaType.DERIVATION_EXTENSION

setDefaultValue

public void setDefaultValue(java.lang.String value)
Sets the 'default' value for this element declaration. For internal use only.

Parameters:
value - the default value for this element declaration.

setFinalProhibitions

public void setFinalProhibitions(int finalValue)
Sets the value of the 'final' property, indicating which types of derivation are not allowed. For internal use only.

Parameters:
finalValue - the bit-significant code representing the final property, made up of values such as SchemaType.DERIVE_BY_SUBSTITUTION

setFixedValue

public void setFixedValue(Value value)
Sets the fixed value for this element definition. For internal use only.

Parameters:
value - the fixed value for this element definition. This is stored initially as the string value initially specified in the schema document; once the type of the element is known (during schema validation) this is replaced by the typed value.

setNillable

public void setNillable(boolean nillable)
Sets whether or not instances of this element definition may set xsi:nil='true'. For internal use only.

Parameters:
nillable - the flag when true indicates that instances of this element definition may be nilled

setNameCode

public void setNameCode(int nameCode)
Set the name of this element declaration

Parameters:
nameCode - the nameCode of the element name in the namePool

getFingerprint

public int getFingerprint()
Get the fingerprint of the name of this element declaration in the namePool

Returns:
the fingerprint of the element name

getNameCode

public int getNameCode()
Get the nameCode of the name of this element declaration in the namePool

Returns:
the nameCode of the element name

setSubstitutionGroupHead

public void setSubstitutionGroupHead(int nameCode)
Sets the fingerprint of the name of the head of the substitutionGroup for this element definition. For internal use only.

Parameters:
nameCode - the nameCode of the name of the head of the substitutionGroup of this element definition.

iterateSubstitutionGroup

public java.util.Iterator iterateSubstitutionGroup()
Iterate over all the elements contained in the substitution group of which this element is the head. If this object represents an element reference, the iterator is over the substitution group of the referenced global element.

Returns:
an iterator giving access to the ElementDecl objects defining the members of the substitution group. This gives access to all the descendants in the substitution group hierarchy, not only the elements that explicitly name this element as their substitution group head.

setTypeReference

public void setTypeReference(TypeReference type)
Sets the schema type for this element declaration. For internal use only.

Parameters:
type - the schema type for this element declaration.

fixup

public boolean fixup(PreparedSchema schema)
              throws SchemaException,
                     UnresolvedReferenceException
Check references from this component to other components

Specified by:
fixup in interface UserSchemaComponent
Parameters:
schema - The schema is used for reporting errors
Returns:
true if all is well, false if errors found
Throws:
SchemaException
UnresolvedReferenceException

validate

public boolean validate(PreparedSchema schema)
                 throws SchemaException,
                        ValidationException
Check the validity (consistency) of this element definition.

Specified by:
validate in interface UserSchemaComponent
Parameters:
schema - the containing schema - used for reporting errors. Any errors will be reported to the error listener.
Returns:
true if validation succeeded, false if errors were found.
Throws:
SchemaException - if an error is found and the error listener decides that the error is fatal
ValidationException

fixupSubstitutionGroup

protected void fixupSubstitutionGroup(PreparedSchema schema)
                               throws SchemaException,
                                      ValidationException
Fix up the reference to the head of the substitition group

Parameters:
schema - the name schema
Throws:
SchemaException - if any error occurs, for example a name that is referenced but not declared
ValidationException

isSameDeclaration

public boolean isSameDeclaration(ElementDecl other)
Test whether this is the same type as another type. They are considered to be the same type if they are derived from the same type definition in the original XML representation (which can happen when there are multiple includes of the same file)