Class REXML::Validation::RelaxNG
In: rexml/validation/relaxng.rb
Parent: Object

Implemented:

  • empty
  • element
  • attribute
  • text
  • optional
  • choice
  • oneOrMore
  • zeroOrMore
  • group
  • value
  • interleave
  • mixed
  • ref
  • grammar
  • start
  • define

Not implemented:

  • data
  • param
  • include
  • externalRef
  • notAllowed
  • anyName
  • nsName
  • except
  • name

Methods

new   receive  

Included Modules

Validator

Constants

INFINITY = 1.0 / 0.0
EMPTY = Event.new( nil )
TEXT = [:start_element, "text"]

Attributes

count  [RW] 
current  [RW] 
references  [R] 

Public Class methods

FIXME: Namespaces

[Source]

# File rexml/validation/relaxng.rb, line 45
      def initialize source
        parser = REXML::Parsers::BaseParser.new( source )

        @count = 0
        @references = {}
        @root = @current = Sequence.new(self)
        @root.previous = true
        states = [ @current ]
        begin
          event = parser.pull
          case event[0]
          when :start_element
            case event[1]
            when "empty"
            when "element", "attribute", "text", "value"
              states[-1] << event
            when "optional"
              states << Optional.new( self )
              states[-2] << states[-1]
            when "choice"
              states << Choice.new( self )
              states[-2] << states[-1]
            when "oneOrMore"
              states << OneOrMore.new( self )
              states[-2] << states[-1]
            when "zeroOrMore"
              states << ZeroOrMore.new( self )
              states[-2] << states[-1]
            when "group"
              states << Sequence.new( self )
              states[-2] << states[-1]
            when "interleave"
              states << Interleave.new( self )
              states[-2] << states[-1]
            when "mixed"
              states << Interleave.new( self )
              states[-2] << states[-1]
              states[-1] << TEXT 
            when "define"
              states << [ event[2]["name"] ]
            when "ref"
              states[-1] << Ref.new( event[2]["name"] )
            when "anyName"
              states << AnyName.new( self )
              states[-2] << states[-1]
            when "nsName"
            when "except"
            when "name"
            when "data"
            when "param"
            when "include"
            when "grammar"
            when "start"
            when "externalRef"
            when "notAllowed"
            end
          when :end_element
            case event[1]
            when "element", "attribute"
              states[-1] << event
            when "zeroOrMore", "oneOrMore", "choice", "optional", 
              "interleave", "group", "mixed"
              states.pop
            when "define"
              ref = states.pop
              @references[ ref.shift ] = ref
            #when "empty"
            end
          when :end_document
            states[-1] << event
          when :text
            states[-1] << event
          end
        end while event[0] != :end_document
      end

Public Instance methods

[Source]

# File rexml/validation/relaxng.rb, line 121
      def receive event
        validate( event )
      end

[Validate]