## com.saxonica.schema
Class ModelGroup

    java.lang.Object
      com.saxonica.schema.SchemaStructure
          com.saxonica.schema.ModelGroup

All Implemented Interfaces:
  Term, UserSchemaComponent, java.io.Serializable, javax.xml.transform.SourceLocator, SchemaComponent

Direct Known Subclasses:
  AllModelGroup, ChoiceModelGroup, ModelGroupDefinition, SequenceModelGroup

    public abstract class ModelGroup

extends SchemaStructure
implements UserSchemaComponent, Term

An XML Schema Model Group. This corresponds to a sequence, choice, or all in the schema document representation. The model group is typically referenced by a ModelGroupParticle, which links it into some containing content model. Named model groups, corresponding to global xs:group elements in a schema document, are represented by the subclass `ModelGroupDefinition`.

See Also:
  Serialized Form

Field Summary
`protected java.util.List` `contentModel` The list of particles making up the content model of this ModelGroup.

Fields inherited from interface net.sf.saxon.type.SchemaComponent
`FIXED_UP, INCOMPLETE, INVALID, UNVALIDATED, VALIDATED, VALIDATING`

Constructor Summary
`ModelGroup()` Creates a new ModelGroup, with no name

Method Summary
`void` `addParticle(Particle particle)` Adds a given Particle to the content model defined by this Compositor
`protected boolean` `checkElements(IntHashMap map, SchemaCompiler compiler)` Check that the elements defined as particles in this compositor are consistent
`void` `compile(SchemaCompiler compiler)` Compile this Compositor by compiling each of the particles contained in its content model.
`boolean` `containsAll(boolean simplified)` Test whether this model group contains an xs:all compositor
`boolean` `fixup(SchemaCompiler compiler)` Check references from this component to other components
`void` `gatherAllPermittedElements(IntHashSet result, boolean ignoreWildcards)` Find the set of all element particles allowed within the content model of this particle, identified by their integer fingerprints.
`abstract java.lang.String` `getCompositorName()` Get the name of the compositor used in this model group
`int` `getContentModelSize()` Get the number of particles in the (unsimplified) content model
`int` `getElementParticleCardinality(int fingerprint)` Find an element particle within this complex type definition having a given element name (identified by fingerprint), and return the cardinality associated with that element particle, that is, the number of times the element can occur within this complex type.
`SchemaType` `getElementParticleType(int fingerprint)` Find an element particle within this complex type definition having a given element name (identified by fingerprint), and return the schema type associated with that element particle.
`java.util.List` `getListOfParticles(boolean simplified)` Get the list of particles
`java.util.List` `getSimplifiedContentModel()` Remove pointless particles from this content model (recursively), and replace group references by the content of the identified group
`Term` `getTerm()` Get the term corresponding to this particle
`abstract boolean` `isEmptiable()` Determine if empty content is allowed
`boolean` `isEmpty()` Return true if the content model is empty
`boolean` `isPointless(ModelGroup container)` Test whether the particle is pointless, as described in XML Schema Part 1 Schema Component Constraint: Particle Valid (Restriction)
`java.util.Iterator` `iterateParticles()` Iterate over the Particles of the content model defined by this Compositor.
`void` `lookForCycles(java.util.Stack references, SchemaCompiler compiler)` This method is called to look for cycles.
`void` `markVulnerableSubParticles(boolean isRepeatable)` Mark contained particles as vulnerable.
`void` `serialize(SchemaModelSerializer serializer)` Serialize the schema component
`void` `setContentModel(java.util.List particles)` Set the entire content model
`boolean` `validate(SchemaCompiler compiler)` Checks the validity of this Compositor definition.

Methods inherited from class com.saxonica.schema.SchemaStructure
`elaborate, getColumnNumber, getConfiguration, getFixupStatus, getLineNumber, getPublicId, getSystemId, getValidationStatus, setConfiguration, setFixupStatus, setLineNumber, setLocator, 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
`elaborate`

Methods inherited from interface net.sf.saxon.type.SchemaComponent
`getValidationStatus`

Field Detail

### contentModel

    protected java.util.List contentModel

  The list of particles making up the content model of this ModelGroup. In this list, group references are not expanded: that is, the particles can be real particles, or group references.

Constructor Detail

### ModelGroup

    public ModelGroup()

  Creates a new ModelGroup, with no name

Method Detail

### getCompositorName

    public abstract java.lang.String getCompositorName()

  Get the name of the compositor used in this model group

  Returns:
    one of "sequence", "choice", or "all"

### addParticle

    public void addParticle(Particle particle)

  Adds a given Particle to the content model defined by this Compositor

  Parameters:
    `particle` - the Particle to be added

### setContentModel

    public void setContentModel(java.util.List particles)

  Set the entire content model

  Parameters:
    `particles` - a List whose members are Particle objects

### isEmptiable

    public abstract boolean isEmptiable()
                                 throws UnresolvedReferenceException

  Determine if empty content is allowed

  Returns:
    true if the content model of the model group allows empty content
  Throws:
    `UnresolvedReferenceException`

### isPointless

    public boolean isPointless(ModelGroup container)

  Test whether the particle is pointless, as described in XML Schema Part 1 Schema Component Constraint: Particle Valid (Restriction)

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

### iterateParticles

    public java.util.Iterator iterateParticles()

  Iterate over the Particles of the content model defined by this Compositor.

  Returns:
    an iterator over the immediately contained particles in the content model defined by this Compositor. Note that the iteration may return group references as well as "true" particles.

### getListOfParticles

    public java.util.List getListOfParticles(boolean simplified)

  Get the list of particles

  Parameters:
    `simplified` - set to true if the simplified content model is required (that is, the model after removing pointless particles and expanding group references)
  Returns:
    the list of particles

### getContentModelSize

    public int getContentModelSize()

  Get the number of particles in the (unsimplified) content model

  Returns:
    the number of particles in the (unsimplified) content model

### isEmpty

    public boolean isEmpty()

  Return true if the content model is empty

  Returns:
    true if the content model is empty

### containsAll

    public boolean containsAll(boolean simplified)
                        throws UnresolvedReferenceException

  Test whether this model group contains an xs:all compositor

  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 if this model group contains an xs:all compositor
  Throws:
    `UnresolvedReferenceException`

### getSimplifiedContentModel

    public java.util.List getSimplifiedContentModel()

  Remove pointless particles from this content model (recursively), and replace group references by the content of the identified group

  Returns:
    the simplified content model

### markVulnerableSubParticles

    public void markVulnerableSubParticles(boolean isRepeatable)

  Mark contained particles as vulnerable. A particle is marked as vulnerable if everything both before and after it in the content model is optional.

  Parameters:
    `isRepeatable` -

### lookForCycles

    public void lookForCycles(java.util.Stack references,
                              SchemaCompiler compiler)
                       throws SchemaException,
                              UnresolvedReferenceException

  This method is called to look for cycles. The object implementing this method is required (a) to raise an exception if the object itself appears in the list of references, (b) to add itself to the list of references, and (c) to call the lookForCycles method on all the objects that it references.

  Specified by:
    `lookForCycles` in interface `UserSchemaComponent`
  Overrides:
    `lookForCycles` in class `SchemaStructure`
  Parameters:
    `references` - A list of objects that contain direct or indirect references to this object, and that must therefore not be referred to from this object.
    `compiler` - used for error reporting
  Throws:
    `SchemaException`
    `UnresolvedReferenceException`

### validate

    public boolean validate(SchemaCompiler compiler)
                     throws SchemaException

  Checks the validity of this Compositor definition.

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

### checkElements

    protected boolean checkElements(IntHashMap map,
                                    SchemaCompiler compiler)
                             throws SchemaException,
                                    UnresolvedReferenceException

  Check that the elements defined as particles in this compositor are consistent

  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`

### getElementParticleType

    public SchemaType getElementParticleType(int fingerprint)

  Find an element particle within this complex type definition having a given element name (identified by fingerprint), and return the schema type associated with that element particle. If there is no such particle, return null. If the fingerprint matches an element wildcard, return the type of the global element declaration with the given name if one exists, or AnyType if none exists and lax validation is permitted by the wildcard.

  Parameters:
    `fingerprint` - Identifies the name of the child element within this content model
  Returns:
    the type associated with the element particle, if found

### getElementParticleCardinality

    public int getElementParticleCardinality(int fingerprint)

  Find an element particle within this complex type definition having a given element name (identified by fingerprint), and return the cardinality associated with that element particle, that is, the number of times the element can occur within this complex type. The value is one of `StaticProperty.EXACTLY_ONE`, `StaticProperty.ALLOWS_ZERO_OR_ONE`, `StaticProperty.ALLOWS_ZERO_OR_MORE`, `StaticProperty.ALLOWS_ONE_OR_MORE`, If there is no such particle, return `StaticProperty.EMPTY`.

  Parameters:
    `fingerprint` - Identifies the name of the child element within this content model
  Returns:
    the cardinality of the element particle within this content model

### gatherAllPermittedElements

    public void gatherAllPermittedElements(IntHashSet result,
                                           boolean ignoreWildcards)
                                    throws SchemaException

  Find the set of all element particles allowed within the content model of this particle, identified by their integer fingerprints. Ignore wildcards.

  Parameters:
    `result` - an initially-empty integer set in which the results are accumulated
    `ignoreWildcards` - if true, wildcards are ignored. If false, the result will be an integer set containing the value -1, meaning that it is not possible to enumerate the elements that can appear in the content.
  Throws:
    `SchemaException`

### compile

    public void compile(SchemaCompiler compiler)
                 throws SchemaException

  Compile this Compositor by compiling each of the particles contained in its content model.

  Parameters:
    `compiler` - used for error reporting
  Throws:
    `SchemaException` - if compilation fails.

### fixup

    public boolean fixup(SchemaCompiler compiler)
                  throws SchemaException,
                         UnresolvedReferenceException

  Check references from this component to other components

  Specified by:
    `fixup` in interface `UserSchemaComponent`
  Overrides:
    `fixup` in class `SchemaStructure`
  Parameters:
    `compiler` - is used for reporting errors
  Returns:
    true if all is well, false if errors found
  Throws:
    `SchemaException`
    `UnresolvedReferenceException`

### getTerm

    public Term getTerm()

  Get the term corresponding to this particle

  Returns:
    the corresponding term

### serialize

    public void serialize(SchemaModelSerializer serializer)
                   throws XPathException

  Serialize the schema component

  Parameters:
    `serializer` - used to receive the serialized output
  Throws:
    `XPathException`

Copyright (c) Saxonica Limited. All rights reserved.