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.
- 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
|