Class Edge

  • All Implemented Interfaces:
    java.lang.Iterable<Edge>

    public class Edge
    extends java.lang.Object
    implements java.lang.Iterable<Edge>
    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

      Nested Classes 
      Modifier and Type Class Description
      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

      Fields 
      Modifier and Type Field Description
      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

      Constructors 
      Constructor Description
      Edge()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      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
      java.util.Iterator<Edge> iterator()  
      State makeTransition​(State previousState)
      Get the dynamic state that results from a transition using this edge, updating any counters that need to be updated
      java.lang.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
      • Methods inherited from interface java.lang.Iterable

        forEach, spliterator
    • 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 java.lang.String matches​(Edge de,
                                        SchemaCompiler compiler)
                                 throws MissingComponentException
        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.
        Throws:
        MissingComponentException
      • iterator

        public java.util.Iterator<Edge> iterator()
        Specified by:
        iterator in interface java.lang.Iterable<Edge>
      • 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 - if a serialization error occur