com.saxonica.schema
Class AllModelGroup

java.lang.Object
  extended by com.saxonica.schema.SchemaStructure
      extended by com.saxonica.schema.ModelGroup
          extended by com.saxonica.schema.AllModelGroup
All Implemented Interfaces:
Term, UserSchemaComponent, Serializable, SourceLocator, SchemaComponent

public class AllModelGroup
extends ModelGroup

An AllModelGroup represents an xs:all element in the schema

See Also:
Serialized Form

Field Summary
 
Fields inherited from class com.saxonica.schema.ModelGroup
contentModel, simplifiedContentModel
 
Fields inherited from interface net.sf.saxon.type.SchemaComponent
FIXED_UP, INCOMPLETE, INVALID, UNVALIDATED, VALIDATED, VALIDATING
 
Constructor Summary
AllModelGroup()
          Create an AllModelGroup
 
Method Summary
 void addParticle(Particle particle)
          Adds a given Particle to the content model defined by this Compositor
protected static String allSubsumes(UserComplexType base, ComplexType sub, SchemaCompiler compiler)
          Test whether a complex type constructed using "all" subsumes another complex type.
protected  boolean checkElements(IntHashMap<ElementDecl> map, SchemaCompiler compiler)
          Check that the elements defined as particles in this compositor are consistent (overrides method on parent class ModelGroup)
 boolean containsAll(boolean simplified)
          Determine if the content model uses xs:all.
 void elaborate(SchemaCompiler compiler)
          Elaborate the schema component: after reloading a serialized schema component model, this expands the component with derived information needed during validation episodes.
 String getCompositorName()
          Get the name of this compositor
 IntToIntMap getCounterMap()
          Get a mapping from element name fingerprints (including fingerprints of substitution group members) to entries in the minima and maxima arrays.
 IntHashMap getDeclarationMap()
          Get a mapping from element name fingerprints (including fingerprints of substitution group members) to local or global element declarations to be used to validate the content of each element in the all group
 int[] getMaxima()
          Get the values of maxOccurs() for all the particles, as an array
 int[] getMinima()
          Get the values of minOccurs() for all the particles, as an array
 int[] getNameCodes()
          Get the namecodes of the element particles corresponding to each item in the maxima/minima arrays.
 int getNumberOfElementParticles()
          Get the number of element particles
 List<Particle> getSimplifiedContentModel()
          Remove pointless particles from this content model (recursively), and replace group references by the content of the identified group
 List<ElementWildcard> getWildcards()
          Get the list of element wildcards (XSDL 1.1 only)
 boolean isEmptiable()
          Determine if empty content is allowed
 boolean isPointless(ModelGroup container)
          Test whether the compositor is pointless, as described in XML Schema Part 1 Schema Component Constraint: Particle Valid (Restriction)
 boolean validate(SchemaCompiler compiler)
          Checks the validity of this Compositor definition.
 
Methods inherited from class com.saxonica.schema.ModelGroup
compile, containsElementWildcard, fixup, gatherAllPermittedElements, getContentModelSize, getElementParticleCardinality, getElementParticleType, getListOfParticles, getTerm, isEmpty, iterateParticles, lookForCycles, markVulnerableSubParticles, serialize, setContentModel
 
Methods inherited from class com.saxonica.schema.SchemaStructure
getColumnNumber, getConfiguration, getFixupStatus, getLineNumber, getPublicId, getRedefinitionLevel, getSystemId, getValidationStatus, setConfiguration, setFixupStatus, setLineNumber, setLocator, setRedefinitionLevel, setSystemId, setValidationStatus
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface net.sf.saxon.type.SchemaComponent
getRedefinitionLevel, getValidationStatus
 

Constructor Detail

AllModelGroup

public AllModelGroup()
Create an AllModelGroup

Method Detail

addParticle

public void addParticle(Particle particle)
Adds a given Particle to the content model defined by this Compositor

Overrides:
addParticle in class ModelGroup
Parameters:
particle - the Particle to be added

getNumberOfElementParticles

public int getNumberOfElementParticles()
Get the number of element particles

Returns:
the number of element particles in the content model

containsAll

public boolean containsAll(boolean simplified)
Determine if the content model uses xs:all.

Overrides:
containsAll in class ModelGroup
Parameters:
simplified - set to false if we want to look at the original unsimplified content model, to true if we want the model after removing pointless particles
Returns:
true (always)

isEmptiable

public boolean isEmptiable()
                    throws UnresolvedReferenceException
Determine if empty content is allowed

Specified by:
isEmptiable in class ModelGroup
Returns:
true if this content model permits empty content
Throws:
UnresolvedReferenceException

isPointless

public boolean isPointless(ModelGroup container)
Test whether the compositor is pointless, as described in XML Schema Part 1 Schema Component Constraint: Particle Valid (Restriction)

Overrides:
isPointless in class ModelGroup
Parameters:
container - not used
Returns:
true if the particle is pointless (which effectively means it can't match anything)

checkElements

protected boolean checkElements(IntHashMap<ElementDecl> map,
                                SchemaCompiler compiler)
                         throws SchemaException,
                                UnresolvedReferenceException
Check that the elements defined as particles in this compositor are consistent (overrides method on parent class ModelGroup)

Overrides:
checkElements in class ModelGroup
Parameters:
map - a HashMap that maps integers to ElementDecl's
compiler - used for error reporting
Returns:
true of the elements are consistent
Throws:
SchemaException
UnresolvedReferenceException

getCompositorName

public String getCompositorName()
Get the name of this compositor

Specified by:
getCompositorName in class ModelGroup
Returns:
one of "sequence", "choice", or "all"

getSimplifiedContentModel

public List<Particle> getSimplifiedContentModel()
Remove pointless particles from this content model (recursively), and replace group references by the content of the identified group

Overrides:
getSimplifiedContentModel in class ModelGroup
Returns:
the simplified content model

validate

public boolean validate(SchemaCompiler compiler)
                 throws SchemaException
Checks the validity of this Compositor definition.

Specified by:
validate in interface UserSchemaComponent
Overrides:
validate in class ModelGroup
Returns:
true when this Schema definition is valid, otherwise false.
Throws:
SchemaException - when the error listener decides an error is fatal

elaborate

public void elaborate(SchemaCompiler compiler)
               throws SchemaException
Elaborate the schema component: after reloading a serialized schema component model, this expands the component with derived information needed during validation episodes. The model is assumed to be valid.

Specified by:
elaborate in interface UserSchemaComponent
Overrides:
elaborate in class SchemaStructure
Parameters:
compiler -
Throws:
SchemaException

getMaxima

public int[] getMaxima()
Get the values of maxOccurs() for all the particles, as an array

Returns:
an array containing the maxOccurs() values. The value "unbounded" is represented as -1. The entry in the array for a given element name can be found using the counterMap.

getMinima

public int[] getMinima()
Get the values of minOccurs() for all the particles, as an array

Returns:
an array containing the minOccurs() values. The entry in the array for a given element name can be found using the counterMap.

getNameCodes

public int[] getNameCodes()
Get the namecodes of the element particles corresponding to each item in the maxima/minima arrays.

Returns:
an array containing the nameCode values.

getCounterMap

public IntToIntMap getCounterMap()
Get a mapping from element name fingerprints (including fingerprints of substitution group members) to entries in the minima and maxima arrays. Note that this includes entries for all members of substitution groups, so several fingeprints map to the same counter position

Returns:
a map from element fingerprints to counter positions

getDeclarationMap

public IntHashMap getDeclarationMap()
Get a mapping from element name fingerprints (including fingerprints of substitution group members) to local or global element declarations to be used to validate the content of each element in the all group

Returns:
a map from element name fingerprints to element declarations

getWildcards

public List<ElementWildcard> getWildcards()
Get the list of element wildcards (XSDL 1.1 only)

Returns:
a list holding the element wildcards defined in this model group, or an empty list if there are none

allSubsumes

protected static String allSubsumes(UserComplexType base,
                                    ComplexType sub,
                                    SchemaCompiler compiler)
                             throws SchemaException
Test whether a complex type constructed using "all" subsumes another complex type. This test is always done after simplification of the content model

Parameters:
base - the base type, which must be defined using xs:all
sub - the type that is (supposedly) subsumed by the base type
compiler - used for reporting errors and warnings
Returns:
null if the "all" particle subsumes the other; otherwise, a string explaining why not. If the string starts with "?", this means Saxon is unable to prove one way or the other whether the derived type is a valid restriction or not.
Throws:
SchemaException


Copyright (c) Saxonica Limited. All rights reserved.