mexico 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.document +5 -0
- data/.gitmodules +3 -0
- data/.project +14 -0
- data/.rspec +2 -0
- data/Gemfile +31 -0
- data/LICENSE.txt +165 -0
- data/README.md +116 -0
- data/Rakefile +66 -0
- data/VERSION +1 -0
- data/assets/TESTCORPUS/Corpus.xml +26 -0
- data/assets/fiesta/b6/layer_connectors.fst +16 -0
- data/assets/fiesta/b6/match_jones_161_CM_neu_checked.parsed.xml +1225 -0
- data/assets/fiesta/elan/ElanFileFormat.eaf +76 -0
- data/assets/fiesta/elan/ElanFileFormat.pfsx +8 -0
- data/assets/fiesta/elan/ElanFileFormatComplexInterLayerLinks.eaf +107 -0
- data/assets/fiesta/elan/reflinks_example.eaf +270 -0
- data/assets/fiesta/elan/test_all_interlayerrelations.fst +43 -0
- data/assets/fiesta/head/head.fst +24 -0
- data/assets/fiesta/praat/mexico.ShortTextGrid +81 -0
- data/assets/fiesta/praat/mexico.TextGrid +104 -0
- data/assets/helpers/collection_ref_handler.rb +29 -0
- data/assets/helpers/id_ref_handler.rb +29 -0
- data/assets/helpers/roxml_attribute_handler.rb +57 -0
- data/assets/out_only/construct_and_write_spec.toe +99 -0
- data/assets/spec.html +554 -0
- data/bin/mexico +5 -0
- data/features/mexico.feature +9 -0
- data/features/step_definitions/mexico_steps.rb +0 -0
- data/features/support/env.rb +15 -0
- data/info/releasenotes/0.0.1.md +5 -0
- data/info/releasenotes/0.0.2.md +5 -0
- data/info/releasenotes/0.0.3.md +5 -0
- data/info/releasenotes/0.0.4.md +5 -0
- data/info/releasenotes/0.0.5.md +8 -0
- data/info/releasenotes/0.0.6.md +3 -0
- data/info/releasenotes/0.0.7.md +4 -0
- data/info/releasenotes/0.0.8.md +9 -0
- data/info/releasenotes/0.0.9.md +7 -0
- data/lib/mexico/cmd.rb +210 -0
- data/lib/mexico/constants.rb +82 -0
- data/lib/mexico/constraints/constraint.rb +85 -0
- data/lib/mexico/constraints/fiesta_constraints.rb +209 -0
- data/lib/mexico/constraints.rb +27 -0
- data/lib/mexico/core/corpus_core.rb +39 -0
- data/lib/mexico/core/design_core.rb +31 -0
- data/lib/mexico/core/media_type.rb +61 -0
- data/lib/mexico/core.rb +36 -0
- data/lib/mexico/fiesta/interfaces/b6_chat_game_interface.rb +222 -0
- data/lib/mexico/fiesta/interfaces/elan_interface.rb +143 -0
- data/lib/mexico/fiesta/interfaces/short_text_grid_interface.rb +99 -0
- data/lib/mexico/fiesta/interfaces/text_grid_interface.rb +103 -0
- data/lib/mexico/fiesta/interfaces.rb +31 -0
- data/lib/mexico/fiesta.rb +27 -0
- data/lib/mexico/file_system/bound_to_corpus.rb +37 -0
- data/lib/mexico/file_system/corpus.rb +207 -0
- data/lib/mexico/file_system/data.rb +96 -0
- data/lib/mexico/file_system/design.rb +75 -0
- data/lib/mexico/file_system/design_component.rb +78 -0
- data/lib/mexico/file_system/entry.rb +59 -0
- data/lib/mexico/file_system/fiesta_document.rb +344 -0
- data/lib/mexico/file_system/fiesta_map.rb +112 -0
- data/lib/mexico/file_system/head.rb +33 -0
- data/lib/mexico/file_system/id_ref.rb +46 -0
- data/lib/mexico/file_system/implicit_item_link.rb +19 -0
- data/lib/mexico/file_system/interval_link.rb +84 -0
- data/lib/mexico/file_system/item.rb +166 -0
- data/lib/mexico/file_system/item_link.rb +98 -0
- data/lib/mexico/file_system/item_links_proxy.rb +13 -0
- data/lib/mexico/file_system/layer.rb +89 -0
- data/lib/mexico/file_system/layer_connector.rb +74 -0
- data/lib/mexico/file_system/layer_link.rb +75 -0
- data/lib/mexico/file_system/local_file.rb +101 -0
- data/lib/mexico/file_system/participant.rb +69 -0
- data/lib/mexico/file_system/participant_role.rb +43 -0
- data/lib/mexico/file_system/point_link.rb +79 -0
- data/lib/mexico/file_system/property.rb +35 -0
- data/lib/mexico/file_system/property_map.rb +37 -0
- data/lib/mexico/file_system/resource.rb +174 -0
- data/lib/mexico/file_system/scale.rb +125 -0
- data/lib/mexico/file_system/section.rb +41 -0
- data/lib/mexico/file_system/static_collection_ref.rb +64 -0
- data/lib/mexico/file_system/template.rb +23 -0
- data/lib/mexico/file_system/trial.rb +87 -0
- data/lib/mexico/file_system/url.rb +65 -0
- data/lib/mexico/file_system.rb +62 -0
- data/lib/mexico/not_yet_implemented_error.rb +28 -0
- data/lib/mexico/util/fancy_container.rb +57 -0
- data/lib/mexico/util.rb +51 -0
- data/lib/mexico.rb +36 -0
- data/spec/constraints/constraints_spec.rb +306 -0
- data/spec/core/media_type_spec.rb +50 -0
- data/spec/fiesta/b6_spec.rb +43 -0
- data/spec/fiesta/elan_spec.rb +43 -0
- data/spec/fiesta/head_spec.rb +54 -0
- data/spec/fiesta/praat_spec.rb +54 -0
- data/spec/fiesta/read_spec.rb +76 -0
- data/spec/file_system_based/better_collection_spec.rb +142 -0
- data/spec/file_system_based/corpus_spec.rb +194 -0
- data/spec/file_system_based/design_spec.rb +100 -0
- data/spec/file_system_based/inter_links_spec.rb +100 -0
- data/spec/file_system_based/item_links_spec.rb +76 -0
- data/spec/file_system_based/rdf_spec.rb +177 -0
- data/spec/file_system_based/resource_spec.rb +111 -0
- data/spec/file_system_based/trial_spec.rb +129 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/toe/construct_and_write_spec.rb +82 -0
- data/spec/toe/construction_spec.rb +110 -0
- data/spec/toe/item_spec.rb +58 -0
- data/spec/toe/layer_spec.rb +63 -0
- data/spec/toe/scale_spec.rb +89 -0
- data/spec/toe/toe_document_spec.rb +39 -0
- data/test/helper.rb +19 -0
- data/test/test_mexico.rb +7 -0
- metadata +357 -0
@@ -0,0 +1,166 @@
|
|
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 basic data unit object.
|
20
|
+
class Mexico::FileSystem::Item
|
21
|
+
|
22
|
+
include ::ROXML
|
23
|
+
xml_name 'I'
|
24
|
+
|
25
|
+
xml_accessor :identifier, :from => '@id'
|
26
|
+
|
27
|
+
# @todo compound links (later)
|
28
|
+
|
29
|
+
# collection of Mexico::FileSystem::ItemLink
|
30
|
+
xml_accessor :explicit_item_links, :as => [Mexico::FileSystem::ItemLink], :from => "ItemLink", :in => "Links"
|
31
|
+
|
32
|
+
# collection of Mexico::FileSystem::LayerLink
|
33
|
+
xml_accessor :layer_links, :as => [Mexico::FileSystem::LayerLink], :from => "LayerLink", :in => "Links"
|
34
|
+
|
35
|
+
# collection of Mexico::FileSystem::PointLink
|
36
|
+
xml_accessor :point_links, :as => [Mexico::FileSystem::PointLink], :from => "PointLink", :in => "Links"
|
37
|
+
|
38
|
+
# collection of Mexico::FileSystem::IntervalLink
|
39
|
+
xml_accessor :interval_links, :as => [Mexico::FileSystem::IntervalLink], :from => "IntervalLink", :in => "Links"
|
40
|
+
|
41
|
+
# collection of Mexico::FileSystem::Data
|
42
|
+
xml_accessor :data, :as => Mexico::FileSystem::Data, :from => "Data"
|
43
|
+
|
44
|
+
attr_accessor :document
|
45
|
+
|
46
|
+
attr_accessor :implicit_item_links
|
47
|
+
|
48
|
+
# POSEIdON-based RDF augmentation
|
49
|
+
include Poseidon
|
50
|
+
self_uri %q(http://cats.sfb673.org/Item)
|
51
|
+
instance_uri_scheme %q(#{document.self_uri}##{identifier})
|
52
|
+
rdf_property :identifier, %q(http://cats.sfb673.org/identifier)
|
53
|
+
rdf_property :name, %q(http://cats.sfb673.org/name)
|
54
|
+
|
55
|
+
rdf_include :layer_links, %q(http://cats.sfb673.org/hasLayerLink)
|
56
|
+
rdf_include :item_links, %q(http://cats.sfb673.org/hasItemLink)
|
57
|
+
rdf_include :point_links, %q(http://cats.sfb673.org/hasPointLink)
|
58
|
+
rdf_include :interval_links, %q(http://cats.sfb673.org/hasIntervalLink)
|
59
|
+
rdf_include :data, %q(http://cats.sfb673.org/hasData)
|
60
|
+
|
61
|
+
def initialize(args={})
|
62
|
+
args.each do |k,v|
|
63
|
+
if self.respond_to?("#{k}=")
|
64
|
+
send("#{k}=", v)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
@explicit_item_links = []
|
68
|
+
@implicit_item_links = []
|
69
|
+
@inverse_linked_items = []
|
70
|
+
@layer_links = []
|
71
|
+
@point_links = []
|
72
|
+
@interval_links = []
|
73
|
+
end
|
74
|
+
|
75
|
+
# This method attempts to link objects from other locations of the XML/object tree
|
76
|
+
# into position inside this object, by following the xml ids given in the
|
77
|
+
# appropriate fields of this class.
|
78
|
+
def after_parse
|
79
|
+
# store self
|
80
|
+
::Mexico::FileSystem::FiestaDocument.store(self.identifier, self)
|
81
|
+
|
82
|
+
[item_links,layer_links,point_links,interval_links].flatten.each do |link|
|
83
|
+
link.item = self
|
84
|
+
|
85
|
+
if ::Mexico::FileSystem::FiestaDocument.knows?(link.target)
|
86
|
+
link.target_object=::Mexico::FileSystem::FiestaDocument.resolve(link.target)
|
87
|
+
else
|
88
|
+
# store i in watch list
|
89
|
+
::Mexico::FileSystem::FiestaDocument.watch(link.target, link, :target_object=)
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
def item_links
|
97
|
+
@explicit_item_links + @implicit_item_links
|
98
|
+
end
|
99
|
+
|
100
|
+
def add_inverse_linked_item(item)
|
101
|
+
@inverse_linked_items << item
|
102
|
+
end
|
103
|
+
|
104
|
+
def add_item_link(new_item_link)
|
105
|
+
# add the item link
|
106
|
+
add_explicit_item_link(new_item_link)
|
107
|
+
|
108
|
+
other_item = new_item_link.target_item
|
109
|
+
|
110
|
+
# add an inverse item link for _every_ item link
|
111
|
+
# this is for retrieving item links from the other direction
|
112
|
+
other_item.add_inverse_linked_item(self)
|
113
|
+
|
114
|
+
# if an inverse relation for the role exists,
|
115
|
+
# puts Mexico::FileSystem::ItemLink::INVERSE_ROLES.has_key?(new_item_link.role)
|
116
|
+
if Mexico::FileSystem::ItemLink::INVERSE_ROLES.has_key?(new_item_link.role)
|
117
|
+
# add an implicit link for this inverse relation
|
118
|
+
# puts new_item_link.target_item
|
119
|
+
|
120
|
+
other_item.add_implicit_item_link Mexico::FileSystem::ImplicitItemLink.new(
|
121
|
+
role: Mexico::FileSystem::ItemLink::INVERSE_ROLES[new_item_link.role],
|
122
|
+
target_object: self, item: other_item )
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def add_explicit_item_link(new_item_link)
|
127
|
+
@explicit_item_links << new_item_link
|
128
|
+
end
|
129
|
+
|
130
|
+
def add_implicit_item_link(new_item_link)
|
131
|
+
@implicit_item_links << new_item_link
|
132
|
+
end
|
133
|
+
|
134
|
+
def add_point_link(new_point_link)
|
135
|
+
@point_links << new_point_link
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
def add_interval_link(new_interval_link)
|
140
|
+
@interval_links << new_interval_link
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
def add_layer_link(new_layer_link)
|
145
|
+
@layer_links << new_layer_link
|
146
|
+
end
|
147
|
+
|
148
|
+
def layers
|
149
|
+
#puts layer_links.collect{|l| l.target}.join
|
150
|
+
#puts layer_links.collect{|l| l.target.class }.join
|
151
|
+
layer_links.collect{|l| l.layer }
|
152
|
+
end
|
153
|
+
|
154
|
+
# Retrieves all items that act as a source (or predecessor)
|
155
|
+
# in the item link graph.
|
156
|
+
def sources
|
157
|
+
@inverse_linked_items
|
158
|
+
end
|
159
|
+
|
160
|
+
# Retrieves all items that act as a target (or successor)
|
161
|
+
# in the item link graph.
|
162
|
+
def targets
|
163
|
+
item_links.collect{|l| l.target_object }
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
@@ -0,0 +1,98 @@
|
|
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
|
+
# A link from an item to a layer.
|
20
|
+
class Mexico::FileSystem::ItemLink
|
21
|
+
|
22
|
+
ROLE_PARENT = 'parent'
|
23
|
+
ROLE_CHILD = 'child'
|
24
|
+
ROLE_PREDECESSOR = 'predecessor'
|
25
|
+
ROLE_SUCCESSOR = 'successor'
|
26
|
+
|
27
|
+
INVERSE_ROLES = {
|
28
|
+
ROLE_PARENT => ROLE_CHILD,
|
29
|
+
ROLE_CHILD => ROLE_PARENT,
|
30
|
+
ROLE_PREDECESSOR => ROLE_SUCCESSOR,
|
31
|
+
ROLE_SUCCESSOR => ROLE_PREDECESSOR
|
32
|
+
}
|
33
|
+
|
34
|
+
include ::ROXML
|
35
|
+
xml_name 'ItemLink'
|
36
|
+
|
37
|
+
# identifier
|
38
|
+
xml_accessor :identifier, :from => '@id'
|
39
|
+
|
40
|
+
# type String
|
41
|
+
xml_accessor :role, :from => '@role'
|
42
|
+
|
43
|
+
# type String
|
44
|
+
xml_accessor :target, :from => "@target"
|
45
|
+
|
46
|
+
attr_accessor :item
|
47
|
+
attr_accessor :document
|
48
|
+
|
49
|
+
# POSEIdON-based RDF augmentation
|
50
|
+
include Poseidon
|
51
|
+
self_uri %q(http://cats.sfb673.org/ItemLink)
|
52
|
+
instance_uri_scheme %q(#{document.self_uri}##{identifier})
|
53
|
+
rdf_property :identifier, %q(http://cats.sfb673.org/identifier)
|
54
|
+
rdf_property :role, %q(http://cats.sfb673.org/role)
|
55
|
+
rdf_property :target, %q(http://cats.sfb673.org/target), :value_expression => 'RDF::URI(target_object.self_uri)'
|
56
|
+
|
57
|
+
def initialize(args={})
|
58
|
+
args.each do |k,v|
|
59
|
+
if self.respond_to?("#{k}=")
|
60
|
+
send("#{k}=", v)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# returns the target object, in this case, an Item.
|
66
|
+
# @return (Mexico::FileSystem::Item) the scale this interval link points to.
|
67
|
+
def target_object
|
68
|
+
@target_object
|
69
|
+
end
|
70
|
+
|
71
|
+
# Sets a new target object (and updates the corresponding identifier)
|
72
|
+
# @param (Mexico::FileSystem::Item) new_target The new target object to set
|
73
|
+
# @return (void)
|
74
|
+
def target_object=(new_target)
|
75
|
+
# puts "SETTING target object to %s, %s" % [new_target.identifier, new_target]
|
76
|
+
@target_object=new_target
|
77
|
+
@target=target_object.identifier
|
78
|
+
end
|
79
|
+
|
80
|
+
# This method attempts to link objects from other locations of the XML/object tree
|
81
|
+
# into position inside this object, by following the xml ids given in the
|
82
|
+
# appropriate fields of this class.
|
83
|
+
def after_parse
|
84
|
+
# puts "item link after parse. What is the situation?"
|
85
|
+
#
|
86
|
+
# if ::Mexico::FileSystem::FiestaDocument.knows?(target)
|
87
|
+
# puts " store knows the needed target. fetch it and set it."
|
88
|
+
# @target_object=::Mexico::FileSystem::FiestaDocument.resolve(target)
|
89
|
+
# puts " %s" % @target_object
|
90
|
+
# else
|
91
|
+
# # store i in watch list
|
92
|
+
# ::Mexico::FileSystem::FiestaDocument.watch(target, item, :target_object=)
|
93
|
+
# end
|
94
|
+
end
|
95
|
+
|
96
|
+
alias_method :target_item, :target_object
|
97
|
+
|
98
|
+
end
|
@@ -0,0 +1,89 @@
|
|
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
|
+
# A layer (or tier) in an transcription or annotation document.
|
20
|
+
class ::Mexico::FileSystem::Layer
|
21
|
+
|
22
|
+
include ROXML
|
23
|
+
|
24
|
+
xml_accessor :identifier, :from => '@id'
|
25
|
+
xml_accessor :name, :from => '@name'
|
26
|
+
|
27
|
+
attr_accessor :document
|
28
|
+
|
29
|
+
# POSEIdON-based RDF augmentation
|
30
|
+
include Poseidon
|
31
|
+
self_uri %q(http://cats.sfb673.org/Layer)
|
32
|
+
instance_uri_scheme %q(#{document.self_uri}##{identifier})
|
33
|
+
rdf_property :identifier, %q(http://cats.sfb673.org/identifier)
|
34
|
+
rdf_property :name, %q(http://cats.sfb673.org/name)
|
35
|
+
|
36
|
+
|
37
|
+
# data type
|
38
|
+
# content structure
|
39
|
+
|
40
|
+
def initialize(args={})
|
41
|
+
args.each do |k,v|
|
42
|
+
if self.respond_to?("#{k}=")
|
43
|
+
send("#{k}=", v)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def items
|
49
|
+
@document.items.select{|i| i.layers.include?(self) }
|
50
|
+
end
|
51
|
+
|
52
|
+
# overrides method in ROXML
|
53
|
+
# callback after xml parsing process, to store this element in the
|
54
|
+
# document cache.
|
55
|
+
def after_parse
|
56
|
+
::Mexico::FileSystem::FiestaDocument.store(self.identifier, self)
|
57
|
+
end
|
58
|
+
|
59
|
+
# returns all layers that are linked to this layer such that this layer
|
60
|
+
# is the target, and the result layer is the source.
|
61
|
+
def predecessor_layers
|
62
|
+
document.layer_connectors.select{|c| c.target==self}.collect{|c| [c.source, c.role]}
|
63
|
+
end
|
64
|
+
|
65
|
+
# returns all layers that are linked to this layer such that this layer
|
66
|
+
# is the source, and the result layer is the target.
|
67
|
+
def successor_layers
|
68
|
+
document.layer_connectors.select{|c| c.source==self}.collect{|c| [c.target, c.role]}
|
69
|
+
end
|
70
|
+
|
71
|
+
def items_form_a_forest?
|
72
|
+
|
73
|
+
# I need precise semantics what kinds of item links
|
74
|
+
# are supposed to model an actual parent-child-relationship.
|
75
|
+
self.items.each do |item|
|
76
|
+
puts "sources size for items %s: %i" % [item.identifier, item.sources.size]
|
77
|
+
return false if item.sources.size > 1
|
78
|
+
end
|
79
|
+
return true
|
80
|
+
end
|
81
|
+
|
82
|
+
def items_form_an_edgeless_graph?
|
83
|
+
self.items.each do |item|
|
84
|
+
return false if item.item_links.size > 1
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
end
|
@@ -0,0 +1,74 @@
|
|
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
|
+
# A typed connector between two layers (or tiers) in an transcription or annotation document.
|
21
|
+
class Mexico::FileSystem::LayerConnector
|
22
|
+
|
23
|
+
include ROXML
|
24
|
+
|
25
|
+
xml_accessor :identifier, :from => '@id'
|
26
|
+
xml_accessor :name, :from => '@name'
|
27
|
+
|
28
|
+
xml_accessor :source_id, :from => '@source'
|
29
|
+
xml_accessor :target_id, :from => '@target'
|
30
|
+
|
31
|
+
xml_accessor :role, :from => '@role'
|
32
|
+
|
33
|
+
attr_accessor :document
|
34
|
+
|
35
|
+
|
36
|
+
def initialize(new_source, new_target, args={})
|
37
|
+
self.source= new_source
|
38
|
+
self.target= new_target
|
39
|
+
args.each do |k,v|
|
40
|
+
if self.respond_to?("#{k}=")
|
41
|
+
send("#{k}=", v)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Retrieves the source layer for this layer connector.
|
47
|
+
# @return [Layer] The source layer.
|
48
|
+
def source
|
49
|
+
@source
|
50
|
+
end
|
51
|
+
|
52
|
+
# Sets a new source layer for this layer connector.
|
53
|
+
# @param new_source_layer [Layer] The layer to be set as the new source.
|
54
|
+
# @return [void]
|
55
|
+
def source=(new_source_layer)
|
56
|
+
@source = new_source_layer
|
57
|
+
@source_id = @source.identifier
|
58
|
+
end
|
59
|
+
|
60
|
+
# Retrieves the target layer for this layer connector.
|
61
|
+
# @return [Layer] The target layer.
|
62
|
+
def target
|
63
|
+
@target
|
64
|
+
end
|
65
|
+
|
66
|
+
# Sets a new target layer for this layer connector.
|
67
|
+
# @param new_target_layer [Layer] The layer to be set as the new target.
|
68
|
+
# @return [void]
|
69
|
+
def target=(new_target_layer)
|
70
|
+
@target = new_target_layer
|
71
|
+
@target_id = @target.identifier
|
72
|
+
end
|
73
|
+
|
74
|
+
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
|
+
# A link from an item to a layer.
|
20
|
+
class Mexico::FileSystem::LayerLink
|
21
|
+
|
22
|
+
include ::ROXML
|
23
|
+
xml_name 'LayerLink'
|
24
|
+
|
25
|
+
# identifier
|
26
|
+
xml_accessor :identifier, :from => '@id'
|
27
|
+
|
28
|
+
xml_accessor :role, :from => '@role'
|
29
|
+
|
30
|
+
xml_accessor :target, :from => "@target"
|
31
|
+
|
32
|
+
attr_accessor :item
|
33
|
+
attr_accessor :document
|
34
|
+
|
35
|
+
# POSEIdON-based RDF augmentation
|
36
|
+
include Poseidon
|
37
|
+
self_uri %q(http://cats.sfb673.org/LayerLink)
|
38
|
+
instance_uri_scheme %q(#{document.self_uri}##{identifier})
|
39
|
+
rdf_property :identifier, %q(http://cats.sfb673.org/identifier)
|
40
|
+
rdf_property :role, %q(http://cats.sfb673.org/role)
|
41
|
+
rdf_property :target, %q(http://cats.sfb673.org/target), :value_expression => 'RDF::URI(target_object.self_uri)'
|
42
|
+
|
43
|
+
|
44
|
+
def initialize(args={})
|
45
|
+
args.each do |k,v|
|
46
|
+
if self.respond_to?("#{k}=")
|
47
|
+
send("#{k}=", v)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# returns the target object, in this case, a Layer.
|
53
|
+
# @return (Mexico::FileSystem::Layer) the scale this interval link points to.
|
54
|
+
def target_object
|
55
|
+
@target_object
|
56
|
+
end
|
57
|
+
|
58
|
+
# Sets a new target object (and updates the corresponding identifier)
|
59
|
+
# @param (Mexico::FileSystem::Layer) new_target The new target object to set
|
60
|
+
# @return (void)
|
61
|
+
def target_object=(new_target)
|
62
|
+
@target_object=new_target
|
63
|
+
@target=@target_object.identifier
|
64
|
+
end
|
65
|
+
|
66
|
+
# This method attempts to link objects from other locations of the XML/object tree
|
67
|
+
# into position inside this object, by following the xml ids given in the
|
68
|
+
# appropriate fields of this class.
|
69
|
+
def after_parse
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
alias_method :layer, :target_object
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,101 @@
|
|
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 LocalFile object represents a file on a local file system, with additional
|
22
|
+
# information
|
23
|
+
class Mexico::FileSystem::LocalFile
|
24
|
+
|
25
|
+
include Mexico::FileSystem::BoundToCorpus
|
26
|
+
extend Mexico::FileSystem::IdRef
|
27
|
+
extend Mexico::FileSystem::StaticCollectionRef
|
28
|
+
|
29
|
+
include ::ROXML
|
30
|
+
|
31
|
+
# identifier
|
32
|
+
xml_accessor :identifier, :from => '@identifier'
|
33
|
+
|
34
|
+
# type String
|
35
|
+
xml_accessor :name, :from => '@name'
|
36
|
+
|
37
|
+
# type String
|
38
|
+
xml_accessor :description, :from => 'Description'
|
39
|
+
|
40
|
+
# type String
|
41
|
+
xml_accessor :path, :from => "@path"
|
42
|
+
|
43
|
+
|
44
|
+
# POSEIdON-based RDF augmentation
|
45
|
+
include Poseidon
|
46
|
+
self_uri %q(http://cats.sfb673.org/LocalFile)
|
47
|
+
instance_uri_scheme %q(http://phoibos.sfb673.org/corpora/#{corpus.identifier}/local_files/#{identifier})
|
48
|
+
rdf_property :identifier, %q(http://cats.sfb673.org/identifier)
|
49
|
+
rdf_property :name, %q(http://cats.sfb673.org/name)
|
50
|
+
rdf_property :description, %q(http://cats.sfb673.org/description)
|
51
|
+
rdf_property :path, %q(http://cats.sfb673.org/path)
|
52
|
+
|
53
|
+
|
54
|
+
# Creates a new local file object.
|
55
|
+
# @option opts [String] :identifier The identifier of the new design (required).
|
56
|
+
# @option opts [String] :name The name of the new design. (required).
|
57
|
+
# @option opts [String] :description A description of the new design (optional).
|
58
|
+
def initialize(opts={})
|
59
|
+
[:identifier,:name,:description].each do |att|
|
60
|
+
send("#{att}=", opts[att]) if opts.has_key?(att)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Resolves any relative path given in the path field, and returns an absolute
|
65
|
+
# path suited for the current operating system.
|
66
|
+
# @return (String) a string containing the absolute path to the file.
|
67
|
+
def absolute_path
|
68
|
+
if path.starts_with? "."
|
69
|
+
return File.expand_path(File.join(@corpus.base_path, path))
|
70
|
+
end
|
71
|
+
return path
|
72
|
+
end
|
73
|
+
|
74
|
+
# Indicates whether the file described at the path actually exists.
|
75
|
+
# @return (Boolean) +true+ if the described file exists, +false+ otherwise.
|
76
|
+
def file_exists?
|
77
|
+
return false if path.blank?
|
78
|
+
File.exists?(absolute_path)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Returns a file object for this {LocalFile} object.
|
82
|
+
# @return (File) a file object for the described file, or +nil+ if there is no readable file at that location.
|
83
|
+
def file_handle
|
84
|
+
return nil if path.blank?
|
85
|
+
return File.open(absolute_path)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Returns the size of the file (in bytes).
|
89
|
+
# @return (Integer) the size of the file in bytes, or +nil+ if no file can be found.
|
90
|
+
def file_size
|
91
|
+
return nil if path.blank?
|
92
|
+
return File.size(absolute_path)
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
# This method performs additional linking and cleanup after parsing a XML representation.
|
97
|
+
def after_parse
|
98
|
+
# puts "Parsed LocalFile"
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
@@ -0,0 +1,69 @@
|
|
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
|
+
# Participant Roles describe the nature of the associated participant:
|
20
|
+
# Possible values are, e.g., naive participants, confederates,
|
21
|
+
# experimenters, etc.
|
22
|
+
class Mexico::FileSystem::Participant
|
23
|
+
|
24
|
+
include Mexico::FileSystem::BoundToCorpus
|
25
|
+
extend Mexico::FileSystem::IdRef
|
26
|
+
|
27
|
+
include ::ROXML
|
28
|
+
|
29
|
+
xml_accessor :identifier, :from => '@identifier'
|
30
|
+
xml_accessor :name, :from => '@name'
|
31
|
+
xml_accessor :participant_role_id, :from => '@participant_role_id'
|
32
|
+
|
33
|
+
xml_accessor :description, :from => "Description"
|
34
|
+
|
35
|
+
|
36
|
+
# def participant_role
|
37
|
+
# ::Mexico::Constants::ParticipantRoles.get(participant_role_id)
|
38
|
+
# end
|
39
|
+
|
40
|
+
# def participant_role=(new_participant_role)
|
41
|
+
# # check whether param is a string or a participant role object
|
42
|
+
# if new_participant_role.kind_of?(String)
|
43
|
+
# new_object = ::Mexico::Constants::ParticipantRoles.get(new_participant_role)
|
44
|
+
# @participant_role_id=new_participant_role
|
45
|
+
# end
|
46
|
+
# if new_participant_role.kind_of?(::Mexico::FileSystem::ParticipantRole)
|
47
|
+
# unless ::Mexico::Constants::ParticipantRoles.has?(new_participant_role.identifier)
|
48
|
+
# # raise exception, this pr isn't available
|
49
|
+
# else
|
50
|
+
# participant_role_id = new_participant_role.identifier
|
51
|
+
# end
|
52
|
+
# end
|
53
|
+
# end
|
54
|
+
|
55
|
+
# Creates a new participant object.
|
56
|
+
# @option opts [String] :identifier The identifier of the new participant object.
|
57
|
+
# @option opts [String] :name The name of the new participant object.
|
58
|
+
# @option opts [String] :description The identifier of the new participant object.
|
59
|
+
# @option opts [String] :identifier The identifier of the new participant object.
|
60
|
+
# @option opts [String] :name The name of the new participant object.
|
61
|
+
# @option opts [String] :participant_role The participant role of the new participant object.
|
62
|
+
def initialize(opts={})
|
63
|
+
# @corpus = corpus
|
64
|
+
[:identifier,:name,:description,:participant_role].each do |att|
|
65
|
+
send("#{att}=", opts[att]) if opts.has_key?(att)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|