ontology_parser.rb revision ae8dcf6d96ecb4adbd0a0ee204d49182c2ecd493
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa # Parses the given string and executes the callback for each symbol
b51057b860560bf3ee454c03a121af3d5d34f482Eugen Kuksa # Create a new parser
b51057b860560bf3ee454c03a121af3d5d34f482Eugen Kuksa parser = Nokogiri::XML::SAX::Parser.new(Listener.new(callbacks))
b1fe9054ad7c7192fe4c474363247dad15963e99Eugen Kuksa # Feed the parser some XML
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa # Listener for the SAX Parser
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa # the callback function is called for each Symbol tag
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa callback(:root, Hash[*[attributes]])
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa when ONTOLOGY
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa callback(:ontology, Hash[*[attributes]])
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa @current_symbol = Hash[*[attributes]]
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa @current_symbol['text'] = ''
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa @current_axiom = Hash[*[attributes]]
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa @current_axiom['symbols'] = []
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa @current_link = Hash[*[attributes]]
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa when MORPHISM
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa @current_link['morphism'] = Hash[*[attributes]]['name'] if @current_link
4ec9d8b62c3c1a001548eb0883b6f81e00c391a0Eugen Kuksa # a text node
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa def characters(text)
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa case @path.last
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa @current_symbol['text'] << text if @current_symbol
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa @current_axiom['text'] = text if @current_axiom
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa @current_link['type'] = text if @current_link
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa # closing tag
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa def end_element(name)
5efadb4662f2a63d5f5f1a5b303ab7c3371069a8Eugen Kuksa when ONTOLOGY
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa callback(:ontology_end, @current_ontology)
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa @current_ontology = nil
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa return if @path.last == 'Hidden'
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa if @current_axiom
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa # add to current axiom
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa @current_axiom['symbols'] << @current_symbol['text']
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa # return the current symcol
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa callback(:symbol, @current_symbol)
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa @current_symbol = nil
4ec9d8b62c3c1a001548eb0883b6f81e00c391a0Eugen Kuksa # return the current axiom
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa callback(:axiom, @current_axiom)
28001d576e67ba46ed481c5695f1e0827ff26007Eugen Kuksa @current_axiom = nil
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa # return the current axiom
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa callback(:link, @current_link)
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa @current_link = nil
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa # error handler for parsing problems
284432981d641cf3d679841f75acbcf039d83062Eugen Kuksa def error(string)
284432981d641cf3d679841f75acbcf039d83062Eugen Kuksa raise ParseException, 'cannot parse: ' + string
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa def callback(name, args)
daf3e28fff47a65b53d6fb65155301763b9f166eEugen Kuksa block = @callbacks[name]
923d69139038e74c0936e826bbfdc8717fbbc7b3Eugen Kuksa block.call(args) if block