ontology_parser 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/ontology_parser.rb +86 -0
  3. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a77eb65a8027aefb9950a2d364fc4ed87a6e3982
4
+ data.tar.gz: d4ac96a3924f05e3037a7f970eaa2a4b7d10bc2b
5
+ SHA512:
6
+ metadata.gz: 2c047d01c5cee07f3c0d8ce7638abfbb123a0c058c031dca7e004fc5b5d56518d99b0a240243d8131b82a1fddd0ef873d6eac9d34abf02c5e2dc9503a63cec67
7
+ data.tar.gz: 6e52cabab33518788e3d29bb58e0d531e7a9a4b0dd058338479b2af2e8d96c377e7090e17abb06e5d2bef64f7b1356b24c059a7282765f65fc6814f1cead8acd
@@ -0,0 +1,86 @@
1
+ class OntologyParser
2
+ require 'rexml/document'
3
+ include REXML
4
+ attr_accessor :declaration
5
+ attr_accessor :subclassof
6
+ attr_accessor :filename
7
+ attr_accessor :xmldoc
8
+ def get_declarations
9
+ self.declaration=[]
10
+ self.xmldoc.elements.each('Ontology/Declaration/Class') do |declaration|
11
+ self.declaration<<declaration.attributes['IRI']
12
+ end
13
+ end
14
+
15
+ def recursively_get_tree(semi_root_hash_lis, subclassof_hash)
16
+ if semi_root_hash_lis.nil?
17
+ return;
18
+ end
19
+ for i in 0...semi_root_hash_lis.size
20
+ if !subclassof_hash[semi_root_hash_lis[i]['name']].nil?
21
+ semi_root_hash_lis[i]['children']=[]
22
+ subclassof_hash[semi_root_hash_lis[i]['name']].each do |ele|
23
+ semi_root_hash_lis[i]['children']<<{'name'=>ele, 'children'=>"",'parent'=>semi_root_hash_lis[i]['name']}
24
+ end
25
+ self.recursively_get_tree(semi_root_hash_lis[i]['children'],subclassof_hash)
26
+ end
27
+ end
28
+ return semi_root_hash_lis
29
+ end
30
+
31
+ def generate_engine(subclassof_hash)
32
+ #below will get {"c"=>[["sitea.com", "c"], ["siteb.com", "c"]], "b"=>[["sitec.com", "b"]]}
33
+ subclassof_hash=subclassof_hash.group_by {|k,v| v}
34
+ #zheng li yi xia
35
+ subclassof_hash.each do |k,v|
36
+ tmp=[]
37
+ v.each do |lis|
38
+ tmp<<lis[0] #abandon the 2th element
39
+ end
40
+ #make it as {"c"=>["sitea.com", "siteb.com"], "b"=>["sitec.com"]}
41
+ subclassof_hash[k]=tmp
42
+ end
43
+ semi_root_lis=self.find_semi_root()
44
+ semi_root_hash_list=[]
45
+ #make the semi_root as Hash List
46
+ semi_root_lis.each do |ele|
47
+ semi_root_hash_list<<{"name"=>ele, "parent"=>"null", "children"=>""}
48
+ end
49
+ res_without_semi_root=self.recursively_get_tree(semi_root_hash_list,subclassof_hash)
50
+ things={'name'=>'Things','parent'=>'null','children'=>''}
51
+ semi_lis=[]
52
+ res_without_semi_root.each do |ele|
53
+ semi_lis<<ele
54
+ end
55
+ things['children']=semi_lis
56
+ return [things]
57
+ end
58
+
59
+ def get_subclassof
60
+ self.subclassof=Hash.new
61
+ list=[]
62
+ self.xmldoc.elements.each('Ontology/SubClassOf/Class') do |subclassof|
63
+ list<<subclassof.attributes['IRI']
64
+ end
65
+ list.each_slice(2).each do |each2|
66
+ self.subclassof[each2[0]]=each2[1]
67
+ end
68
+ end
69
+
70
+ def initialize(filename)
71
+ self.filename=filename
72
+ xmlfile=File.open(self.filename)
73
+ self.xmldoc=Document.new(xmlfile)
74
+ end
75
+
76
+ def find_semi_root
77
+ self.declaration-self.subclassof.keys
78
+ end
79
+
80
+ def get_tree
81
+ self.get_declarations
82
+ self.get_subclassof
83
+ require 'json'
84
+ return JSON.generate(self.generate_engine(self.subclassof))
85
+ end
86
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ontology_parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Yu Song
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-13 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A gem that can parse *.owl files and construct a tree and let produce
14
+ a json string that can let d3js or other js libs to use it
15
+ email: terrorgeek@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/ontology_parser.rb
21
+ homepage: http://rubygems.org/gems/hola
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.0.14
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Hola!
45
+ test_files: []