com.saxonica.schema.fsa
Class Edge

java.lang.Object
  extended by com.saxonica.schema.fsa.Edge

public class Edge
extends Object

Internal class to represent the data associated with a transition: the element that triggers the transition, and the new state that results from the transition.


Nested Class Summary
static class Edge.MaxOccursParticle
           
static class Edge.MaxOccursTerm
          Special singular Term identifying a transition to be used when the maxOccurs value of a counting state is reached.
 
Field Summary
static Edge.MaxOccursParticle MAX_OCCURS_PARTICLE
          Special singular Term identifying a transition to be used when the maxOccurs value of a counting state is reached.
 
Constructor Summary
Edge()
           
 
Method Summary
 Particle getParticle()
          Get the element or wildcard particle causing this transition
 AutomatonState getTargetState()
          Get the (fixed) state that is the target of this edge
 Term getTerm()
          Get the element or wildcard particle causing this transition
 State makeTransition(State previousState)
          Get the dynamic state that results from a transition using this edge, updating any counters that need to be updated
 String matches(Edge de, SchemaCompiler compiler)
          Test whether edges in two different finite state machines match each other.
 void serialize(SchemaModelSerializer serializer)
          Serialize this Edge as part of the serialization of a schema component model
 void setParticle(Particle particle)
          Set the element or wildcard particle causing this transition
 void setTargetState(AutomatonState targetState)
          Set the state resulting from this transition
 void setTerm(Term term)
          Set the element or wildcard particle causing this transition
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAX_OCCURS_PARTICLE

public static final Edge.MaxOccursParticle MAX_OCCURS_PARTICLE
Special singular Term identifying a transition to be used when the maxOccurs value of a counting state is reached. This enables content models like a(2,2)a to be treated as non-ambiguous. See test case modelGroups mg005.

Constructor Detail

Edge

public Edge()
Method Detail

setTargetState

public void setTargetState(AutomatonState targetState)
Set the state resulting from this transition

Parameters:
targetState - the state at the end of this edge

getTargetState

public AutomatonState getTargetState()
Get the (fixed) state that is the target of this edge

Returns:
the state at the end of this edge

makeTransition

public State makeTransition(State previousState)
                     throws ValidationException
Get the dynamic state that results from a transition using this edge, updating any counters that need to be updated

Parameters:
previousState - the previous dynamic state before making this transition
Returns:
the dynamic state that results from applying this transition
Throws:
ValidationException - if this transition is not possible because the occurrence limits are violated

setTerm

public void setTerm(Term term)
Set the element or wildcard particle causing this transition

Parameters:
term - the term that causes this transition

getTerm

public Term getTerm()
Get the element or wildcard particle causing this transition

Returns:
the term that causes this transition

setParticle

public void setParticle(Particle particle)
Set the element or wildcard particle causing this transition

Parameters:
particle - the particle that causes this transition

getParticle

public Particle getParticle()
Get the element or wildcard particle causing this transition

Returns:
the particle that causes this transition if known, otherwise null

matches

public String matches(Edge de,
                      SchemaCompiler compiler)
Test whether edges in two different finite state machines match each other. This is called while establishing whether one type subsumes another.

From Thompson & Tobin 2003: an edge BE matches another edge DE iff one of the following three conditions holds: (1) they are labelled as element declarations with the same expanded name; (2) BE is labelled with a wildcard and DE is labelled with an element declaration in a namespace allowed by the wildcard; (3) BE and DE are both wildcards and DE's label is an intensional subset of BE's. In case (3) we add the rule, not in Thompson and Tobin, that the processContents of DE must be at least as strong as the processContents of BE.

It is also necessary that the types of B and D are compatible, and that their nillability is compatible, and that their value constraints are compatible, and that the disallowed substitutions of D is a superset of those of B.

Parameters:
de - the edge in a finite state machine representing a derived type, and which corresponds to this edge in the finite state machine for the base type
compiler - user for error reporting
Returns:
null if the edges match, or a string explaining the reason for the non-match if not.

serialize

public void serialize(SchemaModelSerializer serializer)
               throws XPathException
Serialize this Edge as part of the serialization of a schema component model

Parameters:
serializer - object that formats the model output
Throws:
XPathException


Copyright (c) 2004-2010 Saxonica Limited. All rights reserved.