wontomedia 0.1.1 → 0.2.0

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 (49) hide show
  1. data/Rakefile +9 -5
  2. data/VERSION.yml +2 -2
  3. data/app/controllers/admin_controller.rb +34 -11
  4. data/app/controllers/connections_controller.rb +8 -2
  5. data/app/controllers/items_controller.rb +213 -68
  6. data/app/helpers/format_helper.rb +22 -1
  7. data/app/helpers/items_helper.rb +43 -0
  8. data/app/models/connection.rb +128 -100
  9. data/app/models/item.rb +96 -0
  10. data/app/views/connections/_spo_select_controls.html.erb +65 -31
  11. data/app/views/connections/edit.html.erb +7 -2
  12. data/app/views/connections/index.html.erb +11 -4
  13. data/app/views/connections/show.html.erb +13 -5
  14. data/app/views/items/_class_select.html.erb +41 -0
  15. data/app/views/items/_content_examples.html.erb +21 -18
  16. data/app/views/items/_core_tasks.html.erb +40 -5
  17. data/app/views/items/_form_fields.html.erb +4 -4
  18. data/app/views/items/_inline_item_add_form.html.erb +48 -0
  19. data/app/views/items/_inline_scalar_add_form.html.erb +36 -0
  20. data/app/views/items/_most_populous_classes.html.erb +42 -0
  21. data/app/views/items/_type_select.html.erb +28 -26
  22. data/app/views/items/edit.html.erb +8 -2
  23. data/app/views/items/index.html.erb +5 -1
  24. data/app/views/items/new.html.erb +69 -54
  25. data/app/views/items/newpop.html.erb +18 -3
  26. data/app/views/items/show.html.erb +110 -7
  27. data/app/views/layouts/application.html.erb +2 -2
  28. data/app/views/layouts/base.html.erb +4 -2
  29. data/app/views/layouts/home.html.erb +2 -2
  30. data/assets/wontomedia-sample.rb +2 -0
  31. data/config/asset_packages.yml +1 -0
  32. data/config/cucumber.yml +11 -13
  33. data/db/fixtures/connections.yml +85 -4
  34. data/db/fixtures/items.yml +140 -8
  35. data/db/migrate/20100315135952_provide_scalar_objects.rb +32 -0
  36. data/db/migrate/20100321042343_add_timestamp_columns.rb +33 -0
  37. data/db/schema.rb +17 -11
  38. data/default-custom/app/views/items/home.html.erb +1 -1
  39. data/default-custom/public/stylesheets/wm.css +21 -4
  40. data/lib/helpers/connection_helper.rb +84 -1
  41. data/lib/helpers/item_helper.rb +16 -3
  42. data/lib/tasks/cucumber.rake +0 -2
  43. data/public/images/transparent_ltblue_background.png +0 -0
  44. data/public/images/{alert_background.png → transparent_white_background.png} +0 -0
  45. data/public/javascripts/forConnectionsForms.js +182 -41
  46. data/public/javascripts/forItemsForms.js +40 -5
  47. data/public/javascripts/forItemsShow.js +27 -0
  48. data/public/javascripts/itemCreatePopup.js +10 -3
  49. metadata +13 -5
@@ -20,7 +20,7 @@
20
20
 
21
21
  <% content_for :page_body do %>
22
22
  <% if @title_text %>
23
- <div id="page-title" style="position: absolute; top: 0; left: 15.5%; height: 8ex; width: 69.7%; overflow: hidden;">
23
+ <div id="page-title" class="page-title-text">
24
24
  <h1 style="white-space: nowrap;"><%= @title_text -%></h1>
25
25
  </div>
26
26
  <% end %>
@@ -49,7 +49,7 @@
49
49
  <%= render :partial => "layouts/search_box" %>
50
50
  </div>
51
51
  <div id="page-top-controls"
52
- style="position: absolute; top: 0; right: 16.9%;">
52
+ style="position: absolute; top: 0; right: 15.6%;">
53
53
  <%= render :partial => "layouts/master_help" %>
54
54
  <%= render :partial => "layouts/language_select" %>
55
55
  <%= render :partial => "layouts/login_controls" %>
@@ -25,7 +25,9 @@
25
25
  <head>
26
26
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
27
27
  <% if @title_text %>
28
- <title><%= @title_text + " &mdash; " + WontoMedia.site_title -%></title>
28
+ <title><%= @title_text +
29
+ (@window_title_addendum.nil? ? '' : @window_title_addendum) +
30
+ " &mdash; " + WontoMedia.site_title -%></title>
29
31
  <% else %>
30
32
  <title><%= WontoMedia.site_title -%></title>
31
33
  <% end %>
@@ -89,7 +91,7 @@
89
91
  <% end %>
90
92
  <% end %>
91
93
  <%= yield(:last_bottom_page_js) %>
92
- <script>
94
+ <script type="text/javascript">
93
95
  moveAndDisplayDelayedDivs();
94
96
  </script>
95
97
  </body>
@@ -19,7 +19,7 @@
19
19
 
20
20
 
21
21
  <% content_for :page_body do %>
22
- <div id="tag-line" style="position: absolute; top: 0; left: 15.5%;">
22
+ <div id="tag-line" class="page-title-text">
23
23
  <h1><%= WontoMedia.site_tagline -%></h1>
24
24
  </div>
25
25
  <div id="float-center-right"
@@ -56,7 +56,7 @@
56
56
  <%= render :partial => "layouts/login_controls" %>
57
57
  </div>
58
58
  </div>
59
- <div id="column-left" style="width: 98%">
59
+ <div id="column-left">
60
60
  <%= logo_image %>
61
61
  <%= allpages_alert %>
62
62
  <%= yield( :left_column ) %>
@@ -21,6 +21,8 @@ require "ostruct"
21
21
  WontoMedia = OpenStruct.new({
22
22
  :site_title => "", # last element in page <title>
23
23
  :site_tagline => "", # top of home page
24
+ # this is optional, if you don't use it, don't define the constant
25
+ # :site_logo_title => "this is displayed above the logo",
24
26
 
25
27
  # change these if you use a local wiki, but will work to use public
26
28
  :help_url_prefix => "http://wiki.wontology.org/wiki/help.php?title=",
@@ -36,6 +36,7 @@ javascripts:
36
36
  - itemCreatePopup
37
37
  - itemTitleToName
38
38
  - forItemsForms
39
+ - forItemsShow
39
40
  - event.simulate
40
41
  - modalbox
41
42
  stylesheets:
@@ -26,19 +26,17 @@
26
26
  dynamic_only = "--exclude=static features "
27
27
  %>
28
28
 
29
- default: <%= uber_common + dynamic %>
30
- <%= tags_common + " " +
31
- tags_rake + " --tags ~@not_for_selenium" %>
32
- --format pretty features
33
-
34
- selenium: <%= common + dynamic %>
35
- <%= tags_common + " " +
36
- tags_rake + " --tags ~@not_for_selenium" %>
37
- features
38
-
39
- manual: <%= uber_common + dynamic %>
40
- <%= tags_common + " --tags ~@not_for_selenium" %>
41
- --format pretty
29
+
30
+ manual:
31
+ <%= uber_common + dynamic %> <%= tags_common + " --tags ~@not_for_selenium" %> --format pretty
32
+
33
+ default:
34
+ <%= uber_common + dynamic %> <%= tags_common + " " + tags_rake +
35
+ " --tags ~@not_for_selenium" %> --format pretty features
36
+
37
+ selenium:
38
+ <%= common + dynamic %> <%= tags_common + " " + tags_rake +
39
+ " --tags ~@not_for_selenium" %> features
42
40
 
43
41
 
44
42
  # profiles to be used from rake
@@ -20,215 +20,296 @@ define_Item_Class:
20
20
  subject: Item_Class
21
21
  predicate: sub_class_of
22
22
  obj: Item_Class
23
+ kind_of_obj: item
23
24
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
24
25
 
25
26
  define_Property_Item:
26
27
  subject: Property_Item
27
28
  predicate: sub_class_of
28
29
  obj: Item_Class
30
+ kind_of_obj: item
29
31
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
30
32
 
31
33
  define_Type_Item:
32
34
  subject: Type_Item
33
35
  predicate: sub_class_of
34
36
  obj: Item_Class
37
+ kind_of_obj: item
35
38
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
36
39
 
37
40
  define_String_Value:
38
41
  subject: String_Value
39
42
  predicate: sub_class_of
40
43
  obj: Type_Item
44
+ kind_of_obj: item
41
45
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
42
46
 
43
47
  define_Integer_Value:
44
48
  subject: Integer_Value
45
49
  predicate: sub_class_of
46
50
  obj: Type_Item
51
+ kind_of_obj: item
47
52
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
48
53
 
49
54
  define_Number_Value:
50
55
  subject: Number_Value
51
56
  predicate: sub_class_of
52
57
  obj: Type_Item
58
+ kind_of_obj: item
53
59
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
54
60
 
55
61
  define_Boolean_Value:
56
62
  subject: Boolean_Value
57
63
  predicate: sub_class_of
58
64
  obj: Type_Item
65
+ kind_of_obj: item
59
66
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
60
67
 
61
68
  define_Value_True:
62
69
  subject: Value_True
63
70
  predicate: is_instance_of
64
71
  obj: Boolean_Value
72
+ kind_of_obj: item
65
73
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
66
74
 
67
75
  define_Value_False:
68
76
  subject: Value_False
69
77
  predicate: is_instance_of
70
78
  obj: Boolean_Value
79
+ kind_of_obj: item
71
80
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
72
81
 
73
82
  define_URL_Value:
74
83
  subject: URL_Value
75
84
  predicate: sub_class_of
76
85
  obj: String_Value
86
+ kind_of_obj: item
87
+ flags: <%= Connection::DATA_IS_UNALTERABLE %>
88
+
89
+ define_Value_ItemType_Category:
90
+ subject: Value_ItemType_Category
91
+ predicate: is_instance_of
92
+ obj: ItemType_Item
93
+ kind_of_obj: item
94
+ flags: <%= Connection::DATA_IS_UNALTERABLE %>
95
+
96
+ define_Value_ItemType_Individual:
97
+ subject: Value_ItemType_Individual
98
+ predicate: is_instance_of
99
+ obj: ItemType_Item
100
+ kind_of_obj: item
101
+ flags: <%= Connection::DATA_IS_UNALTERABLE %>
102
+
103
+ define_Value_ItemType_Property:
104
+ subject: Value_ItemType_Property
105
+ predicate: is_instance_of
106
+ obj: ItemType_Item
107
+ kind_of_obj: item
77
108
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
78
109
 
79
110
  set_ordered_class:
80
111
  subject: ordered_relationship
81
112
  predicate: sub_class_of
82
113
  obj: Property_Item
114
+ kind_of_obj: item
83
115
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
84
116
 
85
117
  set_hierarchical_class:
86
118
  subject: hierarchical_relationship
87
119
  predicate: sub_class_of
88
120
  obj: Property_Item
121
+ kind_of_obj: item
89
122
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
90
123
 
91
124
  set_value_class:
92
125
  subject: value_relationship
93
126
  predicate: sub_class_of
94
127
  obj: Property_Item
128
+ kind_of_obj: item
95
129
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
96
130
 
97
131
  set_symmetric_class:
98
132
  subject: symmetric_relationship
99
133
  predicate: sub_class_of
100
134
  obj: Property_Item
135
+ kind_of_obj: item
101
136
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
102
137
 
103
138
  define_sub_property_of:
104
139
  subject: sub_property_of
105
140
  predicate: sub_property_of
106
141
  obj: hierarchical_relationship
142
+ kind_of_obj: item
107
143
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
108
144
 
109
145
  define_sub_class_of:
110
146
  subject: sub_class_of
111
147
  predicate: sub_property_of
112
148
  obj: hierarchical_relationship
149
+ kind_of_obj: item
113
150
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
114
151
 
115
152
  define_is_instance_of:
116
153
  subject: is_instance_of
117
154
  predicate: sub_property_of
118
155
  obj: hierarchical_relationship
156
+ kind_of_obj: item
119
157
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
120
158
 
121
159
  define_inverse_relationship:
122
160
  subject: inverse_relationship
123
161
  predicate: sub_property_of
124
162
  obj: symmetric_relationship
163
+ kind_of_obj: item
125
164
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
126
165
 
127
166
  define_parent_of:
128
167
  subject: parent_of
129
168
  predicate: sub_property_of
130
169
  obj: hierarchical_relationship
170
+ kind_of_obj: item
131
171
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
132
172
 
133
173
  define_child_of:
134
174
  subject: child_of
135
175
  predicate: sub_property_of
136
176
  obj: hierarchical_relationship
177
+ kind_of_obj: item
137
178
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
138
179
 
139
180
  define_parent_to_child_symmetry:
140
181
  subject: parent_of
141
182
  predicate: inverse_relationship
142
183
  obj: child_of
184
+ kind_of_obj: item
143
185
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
144
186
 
145
187
  define_child_to_parent_symmetry:
146
188
  subject: child_of
147
189
  predicate: inverse_relationship
148
190
  obj: parent_of
191
+ kind_of_obj: item
149
192
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
150
193
 
151
194
  define_property_subject_is:
152
195
  subject: property_subject_is
153
196
  predicate: sub_property_of
154
- obj: symmetric_relationship
197
+ obj: value_relationship
198
+ kind_of_obj: item
155
199
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
156
200
 
157
201
  define_property_object_is:
158
202
  subject: property_object_is
159
203
  predicate: sub_property_of
160
- obj: symmetric_relationship
204
+ obj: value_relationship
205
+ kind_of_obj: item
161
206
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
162
207
 
163
208
  define_applies_to_class:
164
209
  subject: applies_to_class
165
210
  predicate: sub_property_of
166
- obj: symmetric_relationship
211
+ obj: value_relationship
212
+ kind_of_obj: item
213
+ flags: <%= Connection::DATA_IS_UNALTERABLE %>
214
+
215
+ define_class_item_type_is:
216
+ subject: applies_to_class
217
+ predicate: sub_property_of
218
+ obj: value_relationship
219
+ kind_of_obj: item
167
220
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
168
221
 
169
222
  define_has_scalar_object:
170
223
  subject: has_scalar_object
171
224
  predicate: sub_property_of
172
225
  obj: value_relationship
226
+ kind_of_obj: item
173
227
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
174
228
 
175
229
  define_has_item_object:
176
230
  subject: has_item_object
177
231
  predicate: sub_property_of
178
232
  obj: value_relationship
233
+ kind_of_obj: item
179
234
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
180
235
 
181
236
  define_max_uses_per_item:
182
237
  subject: max_uses_per_item
183
238
  predicate: sub_property_of
184
239
  obj: value_relationship
240
+ kind_of_obj: item
185
241
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
186
242
 
187
243
  mupi_is_scalar:
188
244
  subject: max_uses_per_item
189
245
  predicate: has_scalar_object
190
246
  obj: Value_True
247
+ kind_of_obj: item
191
248
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
192
249
 
193
250
  define_peer_of:
194
251
  subject: peer_of
195
252
  predicate: sub_property_of
196
253
  obj: symmetric_relationship
254
+ kind_of_obj: item
197
255
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
198
256
 
199
257
  define_one_of:
200
258
  subject: one_of
201
259
  predicate: sub_property_of
202
260
  obj: child_of
261
+ kind_of_obj: item
262
+ flags: <%= Connection::DATA_IS_UNALTERABLE %>
263
+
264
+ define_part_of:
265
+ subject: part_of
266
+ predicate: sub_property_of
267
+ obj: child_of
203
268
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
204
269
 
205
270
  define_contains:
206
271
  subject: contains
207
272
  predicate: sub_property_of
208
273
  obj: parent_of
274
+ kind_of_obj: item
275
+ flags: <%= Connection::DATA_IS_UNALTERABLE %>
276
+
277
+ define_part_of_to_contains_symmetry:
278
+ subject: part_of
279
+ predicate: inverse_relationship
280
+ obj: contains
281
+ flags: <%= Connection::DATA_IS_UNALTERABLE %>
282
+
283
+ define_contains_to_part_of_symmetry:
284
+ subject: contains
285
+ predicate: inverse_relationship
286
+ obj: part_of
209
287
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
210
288
 
211
289
  define_predecessor_to_successor_symmetry:
212
290
  subject: predecessor_of
213
291
  predicate: inverse_relationship
214
292
  obj: successor_of
293
+ kind_of_obj: item
215
294
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
216
295
 
217
296
  define_successor_to_predecessor_symmetry:
218
297
  subject: successor_of
219
298
  predicate: inverse_relationship
220
299
  obj: predecessor_of
300
+ kind_of_obj: item
221
301
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
222
302
 
223
303
  define_predecessor_of:
224
304
  subject: predecessor_of
225
305
  predicate: sub_property_of
226
306
  obj: ordered_relationship
307
+ kind_of_obj: item
227
308
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
228
309
 
229
310
  define_successor_of:
230
311
  subject: successor_of
231
312
  predicate: sub_property_of
232
313
  obj: ordered_relationship
314
+ kind_of_obj: item
233
315
  flags: <%= Connection::DATA_IS_UNALTERABLE %>
234
-
@@ -81,6 +81,20 @@ Type_Item:
81
81
  "String_Value" type.)
82
82
 
83
83
 
84
+ ItemType_Item:
85
+ name: ItemType_Item
86
+ sti_type: CategoryItem
87
+ flags: <%= Item::DATA_IS_UNALTERABLE %>
88
+ title: Group of items representing possible Item Types (foundation class)
89
+ description: >-
90
+ This category item is part of the representation of the system's
91
+ basic classification scheme for items (Category, Individual,
92
+ Property) within the database of connections and items itself.
93
+ Having items representing the available Item Types allows
94
+ connections to be created that make statements about the types of
95
+ items that are acceptable as members of a class.
96
+
97
+
84
98
  String_Value:
85
99
  name: String_Value
86
100
  sti_type: CategoryItem
@@ -127,6 +141,28 @@ Number_Value:
127
141
  figures.
128
142
 
129
143
 
144
+ Date_Value:
145
+ name: Date_Value
146
+ sti_type: CategoryItem
147
+ flags: <%= Item::DATA_IS_UNALTERABLE %>
148
+ title: A Date (optionally with time, scalar type)
149
+ description: >-
150
+ This item represents a particular date (and time). It is a
151
+ relatively free-form field, allowingg a mix of letters, numbers,
152
+ and punctuation to allow easily human-readable dates to be
153
+ entered. The date/time can be as accurate as the information you
154
+ have allows. Depending on the context, it could be as general as
155
+ a single year or even a century, or it could be a date and time
156
+ down to the second: "March 24, 2010 at 12:15:22pm (Pacific)".
157
+ But it cannot be ambiguous. For example, if you spell out the
158
+ month when entering a birth date, then both "4 January 1955" and
159
+ "Jan 4, 1955" are acceptable. However, you should not type
160
+ something like "1/4/55" because of both the month/day ambiguity
161
+ (difference between U.S. and European common ordering) and because
162
+ of the century ambiguity (probably 1955, but what if it was
163
+ 1855?).
164
+
165
+
130
166
  Boolean_Value:
131
167
  name: Boolean_Value
132
168
  sti_type: CategoryItem
@@ -192,6 +228,36 @@ URL_Value:
192
228
  the actual web address.
193
229
 
194
230
 
231
+ Value_ItemType_Category:
232
+ name: Value_ItemType_Category
233
+ sti_type: IndividualItem
234
+ flags: <%= Item::DATA_IS_UNALTERABLE %>
235
+ title: Item Type 'Category' (a constant value)
236
+ description: >-
237
+ This item represents the "Category" type of system items. See
238
+ the description of ItemType_Item.
239
+
240
+
241
+ Value_ItemType_Individual:
242
+ name: Value_ItemType_Individual
243
+ sti_type: IndividualItem
244
+ flags: <%= Item::DATA_IS_UNALTERABLE %>
245
+ title: Item Type 'Individual' (a constant value)
246
+ description: >-
247
+ This item represents the "Individual" type of system items. See
248
+ the description of ItemType_Item.
249
+
250
+
251
+ Value_ItemType_Property:
252
+ name: Value_ItemType_Property
253
+ sti_type: IndividualItem
254
+ flags: <%= Item::DATA_IS_UNALTERABLE %>
255
+ title: Item Type 'Property' (a constant value)
256
+ description: >-
257
+ This item represents the "Property" type of system items. See
258
+ the description of ItemType_Item.
259
+
260
+
195
261
  #### Minimal set of types (predicates) for connections
196
262
  #### this is WontoMedia's native "schema", and represents the minimal
197
263
  #### typing information used by the UI
@@ -255,6 +321,35 @@ applies_to_class:
255
321
  fill in.
256
322
 
257
323
 
324
+ class_item_type_is:
325
+ name: class_item_type_is
326
+ sti_type: PropertyItem
327
+ flags: <%= Item::DATA_IS_UNALTERABLE %>
328
+ title: Class' Item-Type is (defining relationship)
329
+ description: >-
330
+ This property is used to constrain the type (Individual, Category,
331
+ or Property) of item that is acceptable for items that are to be
332
+ instances of the subject class. For example, assume that
333
+ ChemicalElement is a class. It is reasonable to require that all
334
+ items which are instances of this class be "individual" items,
335
+ since it is unlikely to be appropriate to represent a single
336
+ chemical element as a "category". (What would go into the "Carbon
337
+ category"?) So, the connection "ChemicalElement
338
+ class_item_type_is Value_ItemType_Individual" states that all of
339
+ ChemicalElement' instance items are (must be Individual-type
340
+ items). With this connection in place, the system will only
341
+ permit the creation of new items whose class is ChemicalElement to
342
+ be of type Individual. (Note that this connection is provided to
343
+ be an aid to data entry and editing, and is not enforced as a
344
+ completely strict prohibition. For example, since class
345
+ membership is represented by the presence of "is_instance_of"
346
+ connections, like "Carbon is_instance_of ChemicalElement",
347
+ explicitly editing the connection that establishes an items class
348
+ after that item is created will circumvent the class/type checking
349
+ and can produce a wontology containing contradictory
350
+ statements&mdash<em>caveat editor</em>.)
351
+
352
+
258
353
  has_scalar_object:
259
354
  name: has_scalar_object
260
355
  sti_type: PropertyItem
@@ -365,7 +460,43 @@ one_of:
365
460
  'Contains' are approximate opposites of each other. However,
366
461
  making a 'One Of' relationship between two items will not
367
462
  automatically cause the symmetric 'Contains' relationship to be
368
- created.
463
+ created/assumed.
464
+
465
+
466
+ part_of:
467
+ name: part_of
468
+ sti_type: PropertyItem
469
+ flags: <%= Item::DATA_IS_UNALTERABLE %>
470
+ title: Part Of (basic relationship)
471
+ description: >-
472
+ A relationship of this type between two items is hierarchical.
473
+ This relationship states that the subject (left-hand side) of the
474
+ relationship ("A" in the relationship "A is Part-Of B", and like
475
+ "SoftwareTesting" in "SoftwareTesting is Part-Of ComputerSoftware"
476
+ in a categorization of engineering disciplines) is assumed to be
477
+ more specific/narrow than, and contained within, what corresponds
478
+ to the object of the relationship ("B" and "ComputerSoftware").
479
+ When showing a graph of connections between items, the system will
480
+ attempt to indicate 'Part-Of' relationships as primarily vertical,
481
+ with the object-item drawn nearer "the root" of the graph and the
482
+ subject-item toward "the leaves".
483
+
484
+ 'Part Of' is most appropriate for showing relationships that would
485
+ be indicated by complete inclusion when drawing a Ven Diagram.
486
+ That is, if drawing a Ven Diagram of how categories relate to each
487
+ other, the category corresponding to the subject item of this
488
+ relationship would be drawn entirely within the category
489
+ corresponding to the object item. In this way, it is more
490
+ restrictive than the 'One Of' relationship, which indicates
491
+ membership without implying complete overlap.
492
+
493
+ 'Part Of' is the opposite of 'Contains'. Creating a relationship
494
+ that states one category is 'Part Of' another is exactly the same
495
+ as creating a 'Contains' relationship with the subject and object
496
+ reversed, and the system will list the relationship between them
497
+ using both relationship names. 'Part Of' is itself a child of
498
+ 'Child Of'. (And 'Child Of' is the opposite of 'Parent Of', and
499
+ finally 'Contains' is a child of 'Parent Of'.)
369
500
 
370
501
 
371
502
  contains:
@@ -389,13 +520,14 @@ contains:
389
520
  are better indicated with 'Parent Of', as in "vehicle Contains
390
521
  spacecraft" (assuming, of course, that both are categories).
391
522
 
392
- 'Contains' is actually Child-Of 'Parent Of'. 'Parent Of' and
393
- 'Child Of' are opposites of each other, and 'One Of' is a child of
394
- 'Child Of'. But this does not make 'Contains' and 'Child Of'
395
- opposites of each other, though an approximation of opposite-ness
396
- could be inferred. The system will not automatically cause a
397
- 'Child Of' relationship to be created when a 'Contains'
398
- relationship is.
523
+ 'Contains' is the opposite of 'Part Of'. Creating a relationship
524
+ that states one category 'Contains' another is exactly the same as
525
+ creating a 'Part Of' relationship with the subject and object
526
+ revesed, and the system will list the relationship between them
527
+ using both relationship names.'Contains' is also Child-Of 'Parent
528
+ Of'. (And 'Parent Of' and 'Child Of' are opposites of each other,
529
+ and 'One Of' is another child of 'Child Of'. But this does not
530
+ make 'Contains' and 'Child Of' opposites of each other.)
399
531
 
400
532
 
401
533
  parent_of: