mexico 0.0.9

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 (115) hide show
  1. checksums.yaml +15 -0
  2. data/.document +5 -0
  3. data/.gitmodules +3 -0
  4. data/.project +14 -0
  5. data/.rspec +2 -0
  6. data/Gemfile +31 -0
  7. data/LICENSE.txt +165 -0
  8. data/README.md +116 -0
  9. data/Rakefile +66 -0
  10. data/VERSION +1 -0
  11. data/assets/TESTCORPUS/Corpus.xml +26 -0
  12. data/assets/fiesta/b6/layer_connectors.fst +16 -0
  13. data/assets/fiesta/b6/match_jones_161_CM_neu_checked.parsed.xml +1225 -0
  14. data/assets/fiesta/elan/ElanFileFormat.eaf +76 -0
  15. data/assets/fiesta/elan/ElanFileFormat.pfsx +8 -0
  16. data/assets/fiesta/elan/ElanFileFormatComplexInterLayerLinks.eaf +107 -0
  17. data/assets/fiesta/elan/reflinks_example.eaf +270 -0
  18. data/assets/fiesta/elan/test_all_interlayerrelations.fst +43 -0
  19. data/assets/fiesta/head/head.fst +24 -0
  20. data/assets/fiesta/praat/mexico.ShortTextGrid +81 -0
  21. data/assets/fiesta/praat/mexico.TextGrid +104 -0
  22. data/assets/helpers/collection_ref_handler.rb +29 -0
  23. data/assets/helpers/id_ref_handler.rb +29 -0
  24. data/assets/helpers/roxml_attribute_handler.rb +57 -0
  25. data/assets/out_only/construct_and_write_spec.toe +99 -0
  26. data/assets/spec.html +554 -0
  27. data/bin/mexico +5 -0
  28. data/features/mexico.feature +9 -0
  29. data/features/step_definitions/mexico_steps.rb +0 -0
  30. data/features/support/env.rb +15 -0
  31. data/info/releasenotes/0.0.1.md +5 -0
  32. data/info/releasenotes/0.0.2.md +5 -0
  33. data/info/releasenotes/0.0.3.md +5 -0
  34. data/info/releasenotes/0.0.4.md +5 -0
  35. data/info/releasenotes/0.0.5.md +8 -0
  36. data/info/releasenotes/0.0.6.md +3 -0
  37. data/info/releasenotes/0.0.7.md +4 -0
  38. data/info/releasenotes/0.0.8.md +9 -0
  39. data/info/releasenotes/0.0.9.md +7 -0
  40. data/lib/mexico/cmd.rb +210 -0
  41. data/lib/mexico/constants.rb +82 -0
  42. data/lib/mexico/constraints/constraint.rb +85 -0
  43. data/lib/mexico/constraints/fiesta_constraints.rb +209 -0
  44. data/lib/mexico/constraints.rb +27 -0
  45. data/lib/mexico/core/corpus_core.rb +39 -0
  46. data/lib/mexico/core/design_core.rb +31 -0
  47. data/lib/mexico/core/media_type.rb +61 -0
  48. data/lib/mexico/core.rb +36 -0
  49. data/lib/mexico/fiesta/interfaces/b6_chat_game_interface.rb +222 -0
  50. data/lib/mexico/fiesta/interfaces/elan_interface.rb +143 -0
  51. data/lib/mexico/fiesta/interfaces/short_text_grid_interface.rb +99 -0
  52. data/lib/mexico/fiesta/interfaces/text_grid_interface.rb +103 -0
  53. data/lib/mexico/fiesta/interfaces.rb +31 -0
  54. data/lib/mexico/fiesta.rb +27 -0
  55. data/lib/mexico/file_system/bound_to_corpus.rb +37 -0
  56. data/lib/mexico/file_system/corpus.rb +207 -0
  57. data/lib/mexico/file_system/data.rb +96 -0
  58. data/lib/mexico/file_system/design.rb +75 -0
  59. data/lib/mexico/file_system/design_component.rb +78 -0
  60. data/lib/mexico/file_system/entry.rb +59 -0
  61. data/lib/mexico/file_system/fiesta_document.rb +344 -0
  62. data/lib/mexico/file_system/fiesta_map.rb +112 -0
  63. data/lib/mexico/file_system/head.rb +33 -0
  64. data/lib/mexico/file_system/id_ref.rb +46 -0
  65. data/lib/mexico/file_system/implicit_item_link.rb +19 -0
  66. data/lib/mexico/file_system/interval_link.rb +84 -0
  67. data/lib/mexico/file_system/item.rb +166 -0
  68. data/lib/mexico/file_system/item_link.rb +98 -0
  69. data/lib/mexico/file_system/item_links_proxy.rb +13 -0
  70. data/lib/mexico/file_system/layer.rb +89 -0
  71. data/lib/mexico/file_system/layer_connector.rb +74 -0
  72. data/lib/mexico/file_system/layer_link.rb +75 -0
  73. data/lib/mexico/file_system/local_file.rb +101 -0
  74. data/lib/mexico/file_system/participant.rb +69 -0
  75. data/lib/mexico/file_system/participant_role.rb +43 -0
  76. data/lib/mexico/file_system/point_link.rb +79 -0
  77. data/lib/mexico/file_system/property.rb +35 -0
  78. data/lib/mexico/file_system/property_map.rb +37 -0
  79. data/lib/mexico/file_system/resource.rb +174 -0
  80. data/lib/mexico/file_system/scale.rb +125 -0
  81. data/lib/mexico/file_system/section.rb +41 -0
  82. data/lib/mexico/file_system/static_collection_ref.rb +64 -0
  83. data/lib/mexico/file_system/template.rb +23 -0
  84. data/lib/mexico/file_system/trial.rb +87 -0
  85. data/lib/mexico/file_system/url.rb +65 -0
  86. data/lib/mexico/file_system.rb +62 -0
  87. data/lib/mexico/not_yet_implemented_error.rb +28 -0
  88. data/lib/mexico/util/fancy_container.rb +57 -0
  89. data/lib/mexico/util.rb +51 -0
  90. data/lib/mexico.rb +36 -0
  91. data/spec/constraints/constraints_spec.rb +306 -0
  92. data/spec/core/media_type_spec.rb +50 -0
  93. data/spec/fiesta/b6_spec.rb +43 -0
  94. data/spec/fiesta/elan_spec.rb +43 -0
  95. data/spec/fiesta/head_spec.rb +54 -0
  96. data/spec/fiesta/praat_spec.rb +54 -0
  97. data/spec/fiesta/read_spec.rb +76 -0
  98. data/spec/file_system_based/better_collection_spec.rb +142 -0
  99. data/spec/file_system_based/corpus_spec.rb +194 -0
  100. data/spec/file_system_based/design_spec.rb +100 -0
  101. data/spec/file_system_based/inter_links_spec.rb +100 -0
  102. data/spec/file_system_based/item_links_spec.rb +76 -0
  103. data/spec/file_system_based/rdf_spec.rb +177 -0
  104. data/spec/file_system_based/resource_spec.rb +111 -0
  105. data/spec/file_system_based/trial_spec.rb +129 -0
  106. data/spec/spec_helper.rb +14 -0
  107. data/spec/toe/construct_and_write_spec.rb +82 -0
  108. data/spec/toe/construction_spec.rb +110 -0
  109. data/spec/toe/item_spec.rb +58 -0
  110. data/spec/toe/layer_spec.rb +63 -0
  111. data/spec/toe/scale_spec.rb +89 -0
  112. data/spec/toe/toe_document_spec.rb +39 -0
  113. data/test/helper.rb +19 -0
  114. data/test/test_mexico.rb +7 -0
  115. metadata +357 -0
@@ -0,0 +1,31 @@
1
+ # This file is part of the MExiCo gem.
2
+ # Copyright (c) 2012-2014 Peter Menke, SFB 673, Universität Bielefeld
3
+ # http://www.sfb673.org
4
+ #
5
+ # MExiCo is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as
7
+ # published by the Free Software Foundation, either version 3 of
8
+ # the License, or (at your option) any later version.
9
+ #
10
+ # MExiCo is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with MExiCo. If not, see
17
+ # <http://www.gnu.org/licenses/>.
18
+
19
+ # The FileSystem module contains an implementation of the MExiCo
20
+ # library that works locally with a set of folders and files as
21
+ # its backend.
22
+
23
+ module Mexico::Fiesta::Interfaces
24
+
25
+ end
26
+
27
+ require 'mexico/fiesta/interfaces/b6_chat_game_interface.rb'
28
+ require 'mexico/fiesta/interfaces/elan_interface.rb'
29
+ require 'mexico/fiesta/interfaces/short_text_grid_interface.rb'
30
+ require 'mexico/fiesta/interfaces/text_grid_interface.rb'
31
+ # require 'mexico/fiesta/interfaces/dot_interface.rb'
@@ -0,0 +1,27 @@
1
+ # This file is part of the MExiCo gem.
2
+ # Copyright (c) 2012-2014 Peter Menke, SFB 673, Universität Bielefeld
3
+ # http://www.sfb673.org
4
+ #
5
+ # MExiCo is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as
7
+ # published by the Free Software Foundation, either version 3 of
8
+ # the License, or (at your option) any later version.
9
+ #
10
+ # MExiCo is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with MExiCo. If not, see
17
+ # <http://www.gnu.org/licenses/>.
18
+
19
+ # The FileSystem module contains an implementation of the MExiCo
20
+ # library that works locally with a set of folders and files as
21
+ # its backend.
22
+
23
+ module Mexico::Fiesta
24
+
25
+ end
26
+
27
+ require 'mexico/fiesta/interfaces'
@@ -0,0 +1,37 @@
1
+ # This file is part of the MExiCo gem.
2
+ # Copyright (c) 2012-2014 Peter Menke, SFB 673, Universität Bielefeld
3
+ # http://www.sfb673.org
4
+ #
5
+ # MExiCo is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as
7
+ # published by the Free Software Foundation, either version 3 of
8
+ # the License, or (at your option) any later version.
9
+ #
10
+ # MExiCo is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with MExiCo. If not, see
17
+ # <http://www.gnu.org/licenses/>.
18
+
19
+ # XML bound elements know the corpus object, the corpus file, and
20
+ # the nokogiri element they come from and can write changes back to
21
+ # that file.
22
+
23
+ module Mexico::FileSystem::BoundToCorpus
24
+
25
+ attr_accessor :corpus
26
+
27
+ #sets up the bound between the object and the corpus elements
28
+ def bind_to_corpus(param_corpus)
29
+ @corpus = param_corpus
30
+
31
+ if self.respond_to?(:when_bound_to_corpus)
32
+ self.when_bound_to_corpus
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,207 @@
1
+ # This file is part of the MExiCo gem.
2
+ # Copyright (c) 2012-2014 Peter Menke, SFB 673, Universität Bielefeld
3
+ # http://www.sfb673.org
4
+ #
5
+ # MExiCo is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as
7
+ # published by the Free Software Foundation, either version 3 of
8
+ # the License, or (at your option) any later version.
9
+ #
10
+ # MExiCo is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with MExiCo. If not, see
17
+ # <http://www.gnu.org/licenses/>.
18
+
19
+ # This class provides a corpus representation that is backed up by the filesystem.
20
+ # A central Corpus definition file in the top-level folder contains an
21
+ # XML representation of the corpus structure, and all actual resources are found
22
+ # as files on a file system reachable from the top-level folder.
23
+
24
+ require 'poseidon'
25
+
26
+ class Mexico::FileSystem::Corpus
27
+
28
+ ### include Mexico::FileSystem::FileSystemUtils
29
+
30
+
31
+ include Mexico::Core::CorpusCore
32
+
33
+ attr_accessor :base_path
34
+
35
+ include ::ROXML
36
+
37
+ xml_name 'Corpus'
38
+
39
+ # identifier
40
+ xml_accessor :identifier, :from => '@identifier'
41
+
42
+ # type String
43
+ xml_accessor :name, :from => '@name'
44
+
45
+ # type String
46
+ xml_accessor :description, :from => "Description"
47
+
48
+ # collection of ::Mexico::FileSystem::Participant
49
+ xml_accessor :participants, :as => [::Mexico::FileSystem::Participant], :from => "Participant", :in => "Participants"
50
+
51
+ # collection of ::Mexico::FileSystem::Design
52
+ xml_accessor :designs, :as => [::Mexico::FileSystem::Design], :from => "Design", :in => "Designs"
53
+
54
+ # collection of ::Mexico::FileSystem::Trial
55
+ xml_accessor :trials, :as => [::Mexico::FileSystem::Trial], :from => "Trial", :in => "Trials"
56
+
57
+ # collection of ::Mexico::FileSystem::Resource
58
+ xml_accessor :resources, :as => [::Mexico::FileSystem::Resource], :from => "Resource", :in => "Resources"
59
+
60
+
61
+ # POSEIdON-based RDF augmentation
62
+ include Poseidon
63
+ self_uri %q(http://cats.sfb673.org/Corpus)
64
+ instance_uri_scheme %q(http://phoibos.sfb673.org/corpora/#{identifier})
65
+ rdf_property :identifier, %q(http://cats.sfb673.org/identifier)
66
+ rdf_property :name, %q(http://cats.sfb673.org/name)
67
+ rdf_property :description, %q(http://cats.sfb673.org/description)
68
+ rdf_include :designs, %q(http://cats.sfb673.org/hasDesign)
69
+ rdf_include :trials, %q(http://cats.sfb673.org/hasTrial)
70
+ rdf_include :resources, %q(http://cats.sfb673.org/hasResource)
71
+
72
+
73
+ public
74
+
75
+ # corpus_file : the XML file
76
+ # corpus_doc : the nokogiri xml document based on that file
77
+
78
+ # Opens the corpus folder and its manifest file at the given path.
79
+ # @param [String] path the path where the corpus is
80
+ # @option opts [String] :identifier The identifier that will be given if a new corpus is created
81
+ # @return [Mexico::FileSystem::Corpus] the new or opened Corpus object
82
+ def self.open(path, opts={})
83
+ xml = File.open(File.join(path,'Corpus.xml'),'rb') { |f| f.read }
84
+ c = Mexico::FileSystem::Corpus.from_xml(xml, opts.merge({:path=>path}))
85
+ return c
86
+ end
87
+
88
+ # Creates a new instance of the {Corpus} class.
89
+ # @param [String] path the path where the corpus is
90
+ # @option opts [String] :identifier The identifier that will be given if a new corpus is created
91
+ def initialize(path, opts={})
92
+ init_folder(path, opts)
93
+ @base_path = File.expand_path(path)
94
+ @corpus_file_name = File.join(@base_path, "Corpus.xml")
95
+ f = File.open(@corpus_file_name, 'r')
96
+ @xml_doc = ::Nokogiri::XML(f)
97
+ f.close
98
+ end
99
+
100
+ # Creates a new corpus object
101
+ # @option opts [String] :path The path where to create the new corpus. Required.
102
+ # @option opts [String] :identifier The identifier for the new corpus. Required.
103
+ # @option opts [String] :name The name for the new corpus.
104
+ # @option opts [String] :description A description for the new corpus. Required.
105
+ def initialize(opts = {})
106
+ init_folder(opts[:path], opts)
107
+ @base_path = File.expand_path(opts[:path])
108
+ @corpus_file_name = File.join(@base_path, "Corpus.xml")
109
+ f = File.open(@corpus_file_name, 'r')
110
+ @xml_doc = ::Nokogiri::XML(f)
111
+ f.close
112
+ end
113
+
114
+ # Saves the current data structure to the current file handle.
115
+ # @return [void]
116
+ def save_xml
117
+ doc = Nokogiri::XML::Document.new
118
+ doc.root = @corpus.to_xml
119
+ open(File.join(@base_path, "Corpus.OUT.xml"), 'w') do |file|
120
+ file << doc.serialize
121
+ end
122
+ # File.open(@corpus_file, 'w') {|f| f.write(doc.to_xml) }
123
+ end
124
+
125
+ # Creates a new design object and binds it to this corpus object.
126
+ # @option opts [String] :identifier The identifier of the new design (required).
127
+ # @option opts [String] :name The name of the new design. (required).
128
+ # @option opts [String] :description A description of the new design (optional).
129
+ def create_design(opts={})
130
+ d = ::Mexico::FileSystem::Design.new(opts)
131
+ d.bind_to_corpus(self)
132
+ d
133
+ end
134
+
135
+ # Returns the disk usage in bytes for the whole corpus.
136
+ # @return [Integer] the number of bytes used by files of this corpus
137
+ def complete_file_size
138
+ resources.collect{ |r| r.complete_file_size }.inject(:+)
139
+ end
140
+
141
+ private
142
+
143
+ # after parsing a XML corpus representation, this method binds all components
144
+ # to the corpus object.
145
+ def after_parse
146
+
147
+ participants.each do |participant|
148
+ participant.bind_to_corpus(self)
149
+ end
150
+
151
+ designs.each do |design|
152
+ design.bind_to_corpus(self)
153
+ design.design_components.each do |dc|
154
+ dc.bind_to_corpus(self)
155
+ end
156
+ end
157
+
158
+ trials.each do |trial|
159
+ trial.bind_to_corpus(self)
160
+ end
161
+
162
+ resources.each do |resource|
163
+ resource.bind_to_corpus(self)
164
+ resource.local_files.each do |loc|
165
+ loc.bind_to_corpus(self)
166
+ end
167
+ resource.urls.each do |url|
168
+ url.bind_to_corpus(self)
169
+ end
170
+
171
+ end
172
+
173
+ end
174
+
175
+ # This method inits a new corpus folder in the file system.
176
+ # @param [String] path The path where the folder should be initialized.
177
+ # @param [Hash] opts A hash with additional options and parameters.
178
+ # @option opts [String] :identifier The identifier of the new corpus (required).
179
+ # @return +true+ if all operations were successful, false otherwise.
180
+ def init_folder(path, opts = {})
181
+
182
+ # check whether the given folder does not exist and is writable
183
+ unless File.exists?(path)
184
+ begin
185
+ FileUtils.mkpath(path)
186
+ rescue
187
+ # if something goes wrong, stop here and return false
188
+ end
189
+ end
190
+
191
+ corpus_file_name = File.join(path, "Corpus.xml")
192
+ unless File.exists?(corpus_file_name)
193
+ corpus_file = File.open(corpus_file_name, 'w+')
194
+ corpus_file << "<Corpus identifier='#{opts[:identifier]}'></Corpus>"
195
+ corpus_file.close
196
+ end
197
+ # create
198
+
199
+ end
200
+
201
+
202
+ # helping method to retrieve all existing design components
203
+ def design_components
204
+ @designs.collect{|d| d.design_components}.flatten
205
+ end
206
+
207
+ end
@@ -0,0 +1,96 @@
1
+ # This file is part of the MExiCo gem.
2
+ # Copyright (c) 2012-2014 Peter Menke, SFB 673, Universität Bielefeld
3
+ # http://www.sfb673.org
4
+ #
5
+ # MExiCo is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as
7
+ # published by the Free Software Foundation, either version 3 of
8
+ # the License, or (at your option) any later version.
9
+ #
10
+ # MExiCo is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with MExiCo. If not, see
17
+ # <http://www.gnu.org/licenses/>.
18
+
19
+ # the data container
20
+ class Mexico::FileSystem::Data
21
+
22
+ include ::ROXML
23
+ xml_name 'D'
24
+
25
+ xml_accessor :string_value, :from => "String" # , :to_xml => proc{|val| (@type=='string' ? val : '')}
26
+ xml_accessor :int_value, :as => Integer, :from => "Int"
27
+ xml_accessor :float_value, :as => Float, :from => "Float"
28
+ xml_accessor :map, :as => Mexico::FileSystem::FiestaMap, :from => "Map"
29
+ #xml_accessor :list, :as => Mexico::FileSystem::FiestaList, :from => "List"
30
+
31
+ attr_accessor :item, :document
32
+
33
+ include Poseidon
34
+ self_uri %q(http://cats.sfb673.org/Data)
35
+ instance_uri_scheme %q(#{document.self_uri}##{item.identifier}-data)
36
+ rdf_property :string_value, %q(http://cats.sfb673.org/string_value)
37
+ # rdf_property :name, %q(http://cats.sfb673.org/name)
38
+
39
+ # keine Bool-Klasse in Ruby. xml_accessor :boolean_value, :as => Bool, :from => "B"
40
+ # @todo map and list types
41
+
42
+ def initialize(args={})
43
+ args.each do |k,v|
44
+ if self.respond_to?("#{k}=")
45
+ send("#{k}=", v)
46
+ end
47
+ end
48
+ end
49
+
50
+ def after_parse
51
+ # resolve links
52
+ end
53
+
54
+
55
+ def map_value
56
+ # return nil unless @type=="map"
57
+ @map # ||= JSON::load(@string_value)
58
+ end
59
+
60
+ def list_value
61
+ # return nil unless @type=="list"
62
+ @list # ||= JSON::load(@string_value)
63
+ end
64
+
65
+ def map_value=(val)
66
+ @string_value = nil
67
+ @list = nil
68
+ @map = Mexico::FileSystem::FiestaMap.new(val)
69
+ end
70
+
71
+ def list_value=(val=Array.new)
72
+ @string_value = nil
73
+ @map = nil
74
+ @list = val
75
+ end
76
+
77
+ def string_value=(new_string)
78
+ @map = nil
79
+ @list = nil
80
+ @string_value = new_string
81
+ end
82
+
83
+ def to_s
84
+ return string_value unless string_value.nil?
85
+ return @map.to_s unless @map.nil?
86
+ end
87
+
88
+ def is_string?
89
+ (!string_value.nil? && map_value.nil? && list_value.nil?)
90
+ end
91
+
92
+ def is_map?
93
+ (string_value.nil? && !map_value.nil? && list_value.nil?)
94
+ end
95
+
96
+ end
@@ -0,0 +1,75 @@
1
+ # This file is part of the MExiCo gem.
2
+ # Copyright (c) 2012-2014 Peter Menke, SFB 673, Universität Bielefeld
3
+ # http://www.sfb673.org
4
+ #
5
+ # MExiCo is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as
7
+ # published by the Free Software Foundation, either version 3 of
8
+ # the License, or (at your option) any later version.
9
+ #
10
+ # MExiCo is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with MExiCo. If not, see
17
+ # <http://www.gnu.org/licenses/>.
18
+
19
+ require 'poseidon'
20
+
21
+ class Mexico::FileSystem::Design
22
+
23
+ include Mexico::FileSystem::BoundToCorpus
24
+
25
+ include Mexico::Core::DesignCore
26
+
27
+ include ::ROXML
28
+
29
+ # identifier
30
+ xml_accessor :identifier, :from => '@identifier'
31
+
32
+ # type String
33
+ xml_accessor :name, :from => '@name'
34
+
35
+ # type String
36
+ xml_accessor :description, :from => "Description"
37
+
38
+ # collection of ::Mexico::FileSystem::DesignComponent
39
+ xml_accessor :design_components, :as => [::Mexico::FileSystem::DesignComponent], :from => "DesignComponent" #, :in => "Designs"
40
+
41
+ # POSEIdON-based RDF augmentation
42
+ include Poseidon
43
+
44
+ self_uri %q(http://cats.sfb673.org/Design)
45
+ instance_uri_scheme %q(http://phoibos.sfb673.org/corpora/#{corpus.identifier}/designs/#{identifier})
46
+
47
+ rdf_property :identifier, %q(http://cats.sfb673.org/identifier)
48
+ rdf_property :name, %q(http://cats.sfb673.org/name)
49
+ rdf_property :description, %q(http://cats.sfb673.org/description)
50
+
51
+ rdf_include :design_components, %q(http://cats.sfb673.org/hasDesignComponent)
52
+
53
+ # Creates a new design object.
54
+ # @option opts [String] :identifier The identifier of the new design (required).
55
+ # @option opts [String] :name The name of the new design. (required).
56
+ # @option opts [String] :description A description of the new design (optional).
57
+ def initialize(opts={})
58
+ [:identifier,:name,:description].each do |att|
59
+ send("#{att}=", opts[att]) if opts.has_key?(att)
60
+ end
61
+ end
62
+
63
+ # Returns a collection of trials that are associated with this design.
64
+ # @return [Array<Trial>] an array of trials associated with this design.
65
+ def trials
66
+ @corpus.trials.select{ |i| i.design === self }
67
+ end
68
+
69
+
70
+ def after_parse
71
+ design_components.each do |dc|
72
+ dc.design = self
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,78 @@
1
+ # This file is part of the MExiCo gem.
2
+ # Copyright (c) 2012-2014 Peter Menke, SFB 673, Universität Bielefeld
3
+ # http://www.sfb673.org
4
+ #
5
+ # MExiCo is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as
7
+ # published by the Free Software Foundation, either version 3 of
8
+ # the License, or (at your option) any later version.
9
+ #
10
+ # MExiCo is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with MExiCo. If not, see
17
+ # <http://www.gnu.org/licenses/>.
18
+
19
+ require 'poseidon'
20
+
21
+ # A template class doing nothing.
22
+ class Mexico::FileSystem::DesignComponent
23
+
24
+ include Mexico::FileSystem::BoundToCorpus
25
+ extend Mexico::FileSystem::IdRef
26
+ extend Mexico::FileSystem::StaticCollectionRef
27
+
28
+ include ::ROXML
29
+
30
+ # identifier
31
+ xml_accessor :identifier, :from => '@identifier'
32
+
33
+ # type String
34
+ xml_accessor :name, :from => '@name'
35
+
36
+ # type String
37
+ xml_accessor :description, :from => 'Description'
38
+
39
+ # type String
40
+ xml_accessor :cue, :from => '@cue'
41
+
42
+ # type [true,false]
43
+ xml_accessor :required?, :from => '@required'
44
+
45
+ # type Mexico::Core::MediaType
46
+ xml_accessor :media_type_id, :from => '@media_type_id'
47
+
48
+ # type Mexico::Core::MediaType
49
+ collection_ref :media_type, ::Mexico::Core::MediaType, ::Mexico::Constants::MediaTypes::ALL, ::Mexico::Constants::MediaTypes::OTHER
50
+
51
+ #@todo data_type
52
+ #@todo content_structure
53
+ #@todo belongs to Design
54
+
55
+
56
+ attr_accessor :design
57
+
58
+
59
+ # POSEIdON-based RDF augmentation
60
+ include Poseidon
61
+
62
+ self_uri %q(http://cats.sfb673.org/DesignComponent)
63
+ instance_uri_scheme %q(http://phoibos.sfb673.org/corpora/#{design.corpus.identifier}/designs/#{design.identifier}/design_components/#{identifier})
64
+
65
+ rdf_property :identifier, %q(http://cats.sfb673.org/identifier)
66
+ rdf_property :name, %q(http://cats.sfb673.org/name)
67
+ rdf_property :description, %q(http://cats.sfb673.org/description)
68
+ rdf_property :cue, %q(http://cats.sfb673.org/cue)
69
+ rdf_property :running_number, %q(http://cats.sfb673.org/running_number)
70
+ rdf_property :required?, %q(http://cats.sfb673.org/is_required)
71
+
72
+ # Returns a collection of resources that are associated with this design component.
73
+ # @return [Array<Resource>] an array of resources associated with this design component.
74
+ def resources
75
+ @corpus.resources.select{ |i| i.design_component === self }
76
+ end
77
+
78
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ # This file is part of the MExiCo gem.
3
+ # Copyright (c) 2012-2014 Peter Menke, SFB 673, Universität Bielefeld
4
+ # http://www.sfb673.org
5
+ #
6
+ # MExiCo is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Lesser General Public License as
8
+ # published by the Free Software Foundation, either version 3 of
9
+ # the License, or (at your option) any later version.
10
+ #
11
+ # MExiCo is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with MExiCo. If not, see
18
+ # <http://www.gnu.org/licenses/>.
19
+
20
+ # This class provides a corpus representation that is backed up by the filesystem.
21
+ # A central Corpus definition file in the top-level folder contains an
22
+ # XML representation of the corpus structure, and all actual resources are found
23
+ # as files on a file system reachable from the top-level folder.
24
+
25
+ class Mexico::FileSystem::Entry
26
+
27
+ include ::ROXML
28
+ xml_name 'Entry'
29
+
30
+ xml_accessor :key, :from => '@key'
31
+
32
+ xml_accessor :entries, :as => [::Mexico::FileSystem::Entry], :from => "Entry"
33
+
34
+ attr_accessor :values
35
+
36
+ def self.from_xml(node, args={})
37
+ @values = {}
38
+ node.elements.each do |el|
39
+ key = el['key']
40
+ val = el.text
41
+ @values[key] = val
42
+ end
43
+ end
44
+
45
+ def to_xml(params = {})
46
+ params.reverse_merge!(:name => self.class.tag_name, :namespace => self.class.roxml_namespace)
47
+ params[:namespace] = nil if ['*', 'xmlns'].include?(params[:namespace])
48
+ node = XML.new_node([params[:namespace], params[:name]].compact.join(':')).tap do |root|
49
+ @values.each do |k,v|
50
+ root.children << XML.new_node([params[:namespace], 'Entry']).tap do |ent|
51
+ ent['key'] = k
52
+ ent.text = v
53
+ end
54
+ end
55
+ end
56
+ node
57
+ end
58
+
59
+ end