module Rules class Undefined_element < Element def end_element uri, localname, qname log :UndefinedElement end def self.element_rules *args [] end def self.attribute_rules name [] end end class Unexpected_attribute < TextElement def validate value log :UexpectedAttribute end end class Missing_namespace < Element def end_element uri, localname, qname log :MissingNamespace end def self.element_rules *args [] end end class Unknown_namespace < Element def norm uri uri = uri.chop if [?/, ?#].include? uri[-1] uri.downcase end def self.element_rules *args [] end def end_element uri, localname, qname uri = norm(uri) Xmlns.values.each do |ns| next unless ns return log(:InvalidNamespace) if norm(ns) == uri end @parent.class.instance_eval{@element}.keys.each do |element| return log(:InvalidNamespace) if localname == element.split(':')[-1] end end end end