-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
MasterLCModel.xml
5368 lines (5360 loc) · 410 KB
/
MasterLCModel.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<!--
WARNING 0: If you add any C# value data type property (int, bool, GenDate, DateTime, etc) to any class (new or old), you **must** make sure
you also add an explicit xml element in a DM to every instance that gains the new property, with the C# default (e.g., 'false' for boolean),
or another domain driven default.
WARNING 1: Don't even think of not bumping up the version number,
unless you are ONLY doing one, or more, of the following three exceptions.
ALL other changes to this file REQUIRE a change of the 'version' attribute of the main "EntireModel" element
to the next higher number.
If the model changes do not require a formal data migration in the C# code, you MUST then add the 'do-nothing'
data migration to the system in C#.
The ONLY exceptions to incrementing the version number are:
1) Add/remove/modify optional <comment> and <notes> elements,
2) Add/remove/modify regular xml comments, and
3) Add stuff that only affects the code generator
(e.g., optional singleton attribute added to class element and to the code generator)
WARNING 2: You should be using a schema-aware editor, when you edit this file,
or you run the risk of leaving it in a state where it becomes invalid.
The schema this file is associated with is MasterLCModel.xsd,
and it is in the same folder as this file.
WARNING 3: Comments and notes within the model:
These *must* follow the MS code documentation conventions, with the following exceptions:
1. Must be one or more <para> elements, and
2. <para> elements must not have newlines in them. (The build will likely fail, otherwise.)
WARNING 4: Any update of the model number *requires* a matching update in the FLEx Bridge metadata cache.
That MDC is designed to adjust to the model number of the given data set, starting from DM37.
Updates here also need to be made in the other MDC, along with tests for the new model.
1. MetadataCache (FLEx_ChorusPlugin.Infrastructure), and
2. UpdateMetaDataCacheTests (FLEx_ChorusPluginTests.Integration).
The original version number was: 7000000. Be sure it has the right number of zeros after
editing it.
Change History: (Be sure to update the 'version' attribute in the EntireModel, when needed. (Almost always.))
17 January 2018 (7000072): Change model so that Reversals reference senses instead of using back references
16 March 2015 (7000071): Migrate LDML files to version 3.
05 December 2016 (7000070): No actual model change, but a data migration to clean up bad LexRefTypes [ postponed semantic versioning until version 9 ]
08 Aug 2016 (7000069): Make multiple model changes:
* Add/modify LexEtymology fields and make LexEntry->Etymology an owning sequence.
* Add Language list to LexDb.
* Add DoNotPublishIn fields to CmPicture and LexPronunciation.
* Make LexEntry and LexSense Restrictions a MultiString field.
* Add ReverseName to LexEntryType as a MultiUnicode field. Swap Abbreviation and ReverseAbbr fields.
* Add UsageNote to LexSense as a MultiString field.
* Add Exemplar to LexSense as a MultiString field.
* Add LexExtendedNote cluster, add ExtendedNoteTypes property to LexDb.
* Add owning sequence of LexExtendedNote to LexSense as ExtendedNote property.
* Add DialectLabels list to LexDb. Also add reference to this list in LexEntry and LexSense.
9 July 2013 (7000068): Make ReversalIndexEntry subentries be a sequence instead of a collection (LT-6468). No DM needed.
7 May 2013 (7000067): Remove illegal attributes from <Uni> element. (Appears to come from FW 6.0.x.)
22 March 2013 (7000066): Redux of DM64, but with real DM code.
15 March 2013 (7000065): Add a valid Name to each Reversal Index's PartOfSpeech possibility list.
This allows merge conflicts when users add to these lists to have a better 'address'.
15 February 2013 (7000064): Do nothing DM that will trigger a rewrite of all CmoObjects.
15 October 2012 (7000063): Added LangProject property HomographWs (#57) so the ws used homogragh numbering is persisted.
12 October 2012 (7000062): No actual model change, but a data migration to:
1. Redo the new styles guids properly, since the styles updating code didn't make it into the DM61 commit.
A. Remove any unowned StStyle instances, since 38014 didn't remove the old ones or add the new ones to respective owners,
B. Reset the "Version" properties to the respective fooStyles.xml files, *before* changeset 38014.
This is for CmResource instances with names of "TeStyles" and "FlexStyles", if they are in the data set.
13 September 2012 (7000061): No actual model change, but a data migration to:
1. Do the new styles guids properly.
A. Remove any unowned StStyle instances, since 38014 didn't remove the old ones or add the new ones to respective owners,
B. Reset the "Version" properties to the respective fooStyles.xml files, *before* changeset 38014.
This is for CmResource instances with names of "TeStyles" and "FlexStyles", if they are in the data set.
2. Remove all but the first <objsur> elements in all atomic owning and reference properties. Also remove all corresponding owned objects. This is to fix bad FW 6.0 data.
3. Run Delint method to clean up everything.
29 Aug 2012 (no model update): Remove 'big' attribute from system.
16 Aug 2012 (7000060): Change configuration layout files from X_Layouts.xml to X.fwlayout. No model change, just need to run migration.
29 May 2012 (7000059): Make IText objects unowned to avoid S/R Merge problems.
25 April 2012 (7000058): No actual model change, but a data migration to fill GlossAppend fields
for the standard system Plural and Past variant types. See LT-7581.
24 April 2012 (7000057): No actual model change, but a data migration to upgrade each Irregularly Inflected Form LexEntryType possibility to LexEntryInflType.
See LT-7581.
6 April 2012 (7000056): No actual model change, but a data migration to instantiate PhonRuleFeats possibility list in PhPhonData.
See LT-10621 Hermit Crab: Enable phonological rules to apply only when certain morpho-syntactic features are present (or not present)
16 March 2012 (7000055): Created class LexEntryInflType (num 133 in Ling) based on LexEntryType.
Added atomic reference attribute InflType to WfiMorphBundle with target of LexEntryInflType.
See LT-7581 "Have parser know about inflectional variant entries". No data migration needed.
8 March 2012 (7000054): Added "ProcliticSlots" and "EncliticSlots" reference sequence properties to MoInflAffixTemplate.
Also added "Slots" reference collection property to MoStemMsa. No data migration needed for this optional new capability.
See LT-9137 "Allow proclitics or enclitics to be constrained by order".
7 March 2012 (7000053): Added "Disabled" property to PhSegmentRule, MoCompoundRule, MoAdhocProhib, MoInflAffixTemplate.
No data migration necessary because default is false (rule/template is Enabled/Active.)
See LT-10471 "Allow user ability to turn phonological rules on or off".
30 January 2012 (7000052): No actual model change but a data migration to copy all linked Morph Forms to their WfiMorphBundle Forms. See LT-12532: Retain the Form of a WfiMorphBundle even when fully analyzed.
14 January 2012 (7000051): No actual model change. Change Guid id on LangProject to ensure it really is unique between different projects.
1 December 2011 (7000050): Add Speaker to Segment. (Only the do-nothing DM needed in C#.)
17 November 2011 (7000049): Added CmMediaContainer, CmMediaURI classes, changed Segment to reference a CmMediaURI and include a begin and end time offset
Modified Text to include a CmMediaContainer, and elminated the soundfilelocation attribute no significant migration should be required, the removed attribute
is believed to have been unused.
13 October 2011 (7000048): No actual model change. Reorder the xml output in the xml BEP. This version lets the BEP know to do the first reorderinng.
22 September 2011 (7000047): No actual model change. DM to clean up legacy ChkRendering objects with null SurfaceForms.
8 September 2011 (7000046): Added RnGenericRec.Text.
24 August 2011 (7000045): Added Reference property to Segment
13 July 2011 (7000044): Migrate LDML files to Palaso version 2, and correct all data using changed IDs.
24 June 2011 (7000043): Added ScrBook.ImportedBtCheckSum field.
27 May 2011 (7000042): Fixed wrong guids for standard LexEntryTypes, added missing standard LexEntryTypes,
and ensured that all standard LexEntryTypes have IsProtected set to true.
15 April 2011 (7000041): Replaced LexEntry property ExcludeAsHeadword with DoNotShowMainEntryIn to exclude user designated main entries from a publication.
6 April 2011 (7000040): Added LexEntryRef.ShowComplexFormsIn
5 April 2011: Added lack of owner to VirtualOrdering class (not a model change, since none exist yet).
1 April 2011: (7000039): Added ScrBook.ImportedCheckSum field.
29 March 2011: (7000038): Added possibility list LexDb.Publications and fields DoNotPublishIn to LexEntry, LexSense, and LexExampleSentence.
Added class VirtualOrdering.
16 February 2011: Made Segment.BeginOffset's setter internal (this was not a model change).
10 February 2011 (7000037): No actual model change, fix externalLink attributes converted from
FW 6.0 to work for FW 7.0 (FWR-782,3364).
2 Febuary 2011 (7000036): Added DateModified to StText.
31 January 2011 (7000035): No actual model change, this one triggers fixing un-owned footnote ORCs in vernacular Scripture.
18 January 2011 (7000034): No actual model change, this one fixes duplicate CmFile objects that were created by the FW 6.0 TE code
and put into the LangProject.PicturesOC collection which should only contain CmFolders.
14 December 2010 (7000033): No actual model change, this one triggers fixing custom field refs in settings files.
23 November 2010 (7000032): No actual model change, this one triggers moving settings to project folder.
15 November 2010 (7000031): Removed all UserViews, UserViewRec, UserViewField from the DB
10 November 2010 (7000030): Make externalLink's found in TsStrings a relative path for any files relative to LinkedFilesRootDir
Also create a FilePathsInTsStrings element in LangProject which owns a CmFolder which owns a set of CmFile. Each of these
new CmFile's is created for a filePath found in in externalLink attribute of a TsString.
27 October 2010 (7000029): Make CmFile.InternalPath a relative path for any files relative to LinkedFilesRootDir
25 October 2010 (7000028): Make LexEntries be unowned.
5 October 2010 (7000027): Added a reference on ScrFootnotes to the paragraph that contains the
ORC for that footnote. (Originally 7000021.)
1 October 2010 (7000025): LangProject.ExtLinkRootDir changed to LangProject.LinkedFilesRootDir
23 September 2010 (7000025): Change all DateTime properties (sig of "Time" in this file)
to use UTC when serialized. (Code change that requires DM, but not a model change.)
15 September 2010 (7000024): Combine Status and Sense Status lists.
1. Rename LangProject_AnalysisStatus to LangProject_Status.
2. Remove LexDb_Status property.
14 September 2010 (7000023): Shift case from upper to lower on all guids,
to make it easier for the Chorus diff/merge code to work.
25 August 2010 (7000022): Added localizations to 26 CmPossibilityList Name properties.
26 July 2010 (7000021): This is now a no-op (see 7000027).
1 July 2010 (7000020): Implements FWR-1175 by removing all UserView, UserViewRec, and
UserViewField objects that were used by Data Notebook or List Editor.
5 April 2010 (7000019):
1. Removed LgWritingSystem and changed all references to LgWritingSystem to string properties.
2. Removed LgCollation.
3. Removed CmSortSpec.
19 May 2010 [7000018]: Implements much of FWR-1163, removing the Styles property from LexDb.
The LexDb styles are moved to the LangProject Styles property if they don't already exist
there.
18 May 2010 [7000017]: Implements FWR-465 by removing the WeatherConditions list from
LangProject and the Weather field from RnGenericRec. If the data is in use, the data
migration moves the list to unowned (ie, a custom list), and creates a custom field in
RnGenericRec to hold the references.
5 April 2010 (7000016):
No model change. Implements FWR-463 to add a few new record types for Data Notebook, and to
rearrange the record type list hierarchy.
20 March 2010 (7000015):
No model change in this version. This one just works over the xml
to remove the class-level elements, and move their child elements up one level to be
children of the main <rt> element.
8 March 2010 (7000014):
1. Added new properties Approves and Disapproves, owning atomic CmAgentEvaluations, to CmAgent.
2. Added new property Evaluations to WfiAnalysis, a reference collection of CmAgentEvaluations.
3. Removed property Evaluations from CmAgent.
4. Removed properties CmAgentEvaluation.DateModified, Target, Details, and Accepted.
The information previously represented by a CmAgentEvaluation owned by agentX with tartget WfiAnalysisY
is now represented by a reference from WfiAnalysisY.Evaluations to either the Approves or Disapproves
evaluation owned by agentX. Accepted is replaced by the new virtual property Approves on CmAgentEvaluation.
If it becomes necessary to specify agent evaluations of other object types, they will need their own
Evaluations properties.
22 February 2010 (7000013):
Changed ConstChartWordGroup to ConstChartTag where the previous had BeginSegment == null
22 January 2010 (7000011):
Updated Data Notebook RecTypes possibility GUIDs
[Note: This change was purely extant data related, and had no affect on the model.]
8 December 2009 (7000010):
1. Add new class called “Note” with these properties
a. Content : multistring
2. Add new class called “Segment” with these properties
a. FreeTranslation : multistring
b. LiteralTranslation : multistring
c. Notes : owning sequence of Note
d. Analyses : reference sequence of IAnalysis
3. Add new owning sequence property to StTxtPara called Segments with a signature of Segment
4. Lots of other changes for discourse and text tagging. (cf. https://www.wiki.insitehome.org/display/LSDEV/Getting+rid+of+XFics?ticket=ST-ZUvKBoORGvh5WnuQpvdDsa1qgWbmryS1HKhIJUYlrznu9kPTbhJAelI60lPEg for full details.)
5. Reordered the classes and properties to be in numerical order to make it easier to find the next number when adding new classes or properties.
30 November 2009 (7000009):
Remove own flid and own ord from data. (No actual model change.)
11 November 2009 (7000008):
1) Remove orphaned CmBaseAnnotations (cf. FWR-98)
[Note: This change was purely extant data related, and had no affect on the model.]
13 October 2009 (7000007):
1) Remove ScrImportSet.ImportSettings
2) Remove StFootnote.DisplayFootnoteReference and DisplayFootnoteMarker
3) Remove StPara.StyleName
24 September 2009 (7000006-Change model to remove the Name field from CmProject )
30 September 2009 (NA): Add optional 'generateBasicCreateMethod' attribute to class element
which controls the code generator's production of the default factory Create method.
16 September 2009 (7000005): Change model for Data Notebook to combine the RnEvent and RnAnalysis classes into RnGenericRec.)
14 September 2009 (7000004): [Note: This one will start the use of 'DoNothingDataMigration' step.]
1) Restore class accidently deleted in 7000001 (PhVariable).
2) Add ParseIsCurrent to StTxtPara
3) Move ScrTxtPara and ScrFootnote from Cellar module to Scripture module.
9 September 2009 (7000003): Changed all StFootnotes to ScrFootnotes [cf. DataMigration7000003 class.]
8 September 2009 (7000002): Changed all StTxtParas owned by Scripture to be ScrTxtParas [cf. DataMigration7000002 class.]
3 September 2009 (7000001): Remove WordformInventory class from model. [cf. DataMigration7000001 class.]
2 September 2009 (NA): Add schema and optional 'singleton' and 'owner' attributes to <class> element. [Nothing at all for data migration.]
8 August 2009 (7000000): Original file created
-->
<EntireModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="7000072" xsi:noNamespaceSchemaLocation="MasterLCModel.xsd">
<CellarModule id="Cellar" num="0">
<class num="0" id="CmObject" abstract="false" abbr="obj">
<props/>
</class>
<class num="1" id="CmProject" abstract="true" abbr="proj" base="CmObject" depth="0">
<props>
<basic num="2" id="DateCreated" sig="Time"/>
<basic num="4" id="DateModified" sig="Time"/>
<basic num="5" id="Description" sig="MultiString"/>
</props>
</class>
<class num="2" id="CmFolder" abstract="false" abbr="fold" base="CmObject" depth="0">
<props>
<basic num="1" id="Name" sig="MultiUnicode"/>
<owning num="3" id="SubFolders" card="col" sig="CmFolder"/>
<basic num="5" id="Description" sig="MultiString"/>
<owning num="6" id="Files" card="col" sig="CmFile"/>
</props>
</class>
<class num="3" id="Note" abstract="false" abbr="nt" base="CmObject" depth="0">
<comment>
<para>Used for all manner of notes.</para>
</comment>
<props>
<basic num="1" id="Content" sig="MultiString"/>
</props>
</class>
<class num="4" id="FsComplexFeature" abstract="false" abbr="comf" base="FsFeatDefn" depth="1">
<props>
<rel num="1" id="Type" card="atomic" sig="FsFeatStrucType"/>
</props>
</class>
<class num="5" id="CmMajorObject" abstract="true" abbr="mobj" base="CmObject" depth="0">
<props>
<basic num="1" id="Name" sig="MultiUnicode"/>
<basic num="2" id="DateCreated" sig="Time"/>
<basic num="3" id="DateModified" sig="Time"/>
<basic num="4" id="Description" sig="MultiString"/>
<owning num="5" id="Publications" card="col" sig="Publication">
<comment>
<para>A collection of all of the publication layouts available for output from the translated scripture database.</para>
</comment>
</owning>
<owning num="6" id="HeaderFooterSets" card="col" sig="PubHFSet">
<comment>
<para>Used to define preset header/footer layouts that can be selected and copied to a publication division.</para>
<para>Reason: needed to implement TE-1468</para>
</comment>
</owning>
</props>
</class>
<class num="6" id="Segment" abstract="false" abbr="seg" base="CmObject" depth="0">
<comment>
<para>Represents a sentence or segment length part of a paragraph.</para>
</comment>
<props>
<basic num="1" id="BeginOffset" sig="Integer" internalSetter="true"/>
<basic num="2" id="FreeTranslation" sig="MultiString"/>
<basic num="3" id="LiteralTranslation" sig="MultiString"/>
<owning num="4" id="Notes" sig="Note" card="seq"/>
<rel num="5" id="Analyses" sig="IAnalysis" card="seq"/>
<basic num="6" id="Reference" sig="String">
<comment>
<para>This string can be used to store a user specified reference for a segment.</para>
<para>This is displayed in the Ref (short for reference) column in the Concordance view.</para>
<para>As of Aug 2011 this can not be specified in FLEx, but can be imported. -NaylorJ</para>
</comment>
</basic>
<rel num="7" id="MediaURI" sig="CmMediaURI" card="atomic">
<comment>
<para>This references a media file in the interlinear text.</para>
</comment>
</rel>
<basic num="8" id="BeginTimeOffset" sig="Unicode">
<comment>
<para>This string can be used to store the time offset into the mediaFile for the beginning of this segment.</para>
<para>Currently intended to hold ELAN information, not modified by FLEx as of Nov 2011 -NaylorJ.</para>
</comment>
<notes>
<para>Type is string so ELAN could optionally store their timeslot concept: http://flexelan.blogspot.com/2011/11/proposed-schema.html#comment-form</para>
</notes>
</basic>
<basic num="9" id="EndTimeOffset" sig="Unicode">
<comment>
<para>This string can be used to store the time offset into the mediaFile for the end of this segment.</para>
<para>Currently intended to hold ELAN information, not modified by FLEx as of Nov 2011 -NaylorJ.</para>
</comment>
<notes>
<para>Type is string so ELAN could optionally store their timeslot concept: http://flexelan.blogspot.com/2011/11/proposed-schema.html#comment-form</para>
</notes>
</basic>
<rel num="10" id="Speaker" card="atomic" sig="CmPerson">
<comment>
<para>The person who spoke this sentence, ELAN info.</para>
</comment>
</rel>
</props>
</class>
<class num="7" id="CmPossibility" abstract="false" abbr="pss" base="CmObject" depth="0">
<comment>
<para>In regards to how this is implemented in FieldWorks, Ken says ...</para>
<para>In SQL code, you could place a CmPerson in a "MoMorphTypeList" and</para>
<para>it would be perfectly happy. However, our list editor always uses the</para>
<para>ItemClsid to create any new items that are created in the list, so it is</para>
<para>enforced in this way. Presumably, any other application that might create</para>
<para>possibilities would also check ItemClsid and create the correct type of</para>
<para>object for the list. If not, it is a bug.</para>
</comment>
<props>
<basic num="1" id="Name" sig="MultiUnicode"/>
<basic num="2" id="Abbreviation" sig="MultiUnicode"/>
<basic num="3" id="Description" sig="MultiString"/>
<owning num="4" id="SubPossibilities" card="seq" sig="CmPossibility"/>
<basic num="6" id="SortSpec" sig="Integer"/>
<rel num="7" id="Restrictions" card="col" sig="CmPossibility">
<comment>
<para>Indicates whether the data for this possibility item has restrictions for presentation to certain audiences. This value comes from a user-defined list that is used by many different FieldWorks objects (Events, Analysis Records, Lexical Entries and their Senses, etc.) These values are user-definable and initially include: No restrictions, Do not publish, Case by case, Unknown</para>
</comment>
</rel>
<rel num="8" id="Confidence" card="atomic" sig="CmPossibility">
<comment>
<para>Indicates confidence in the data collected for this possibility item. This value comes from a user-defined list that is used by many different FieldWorks objects (Events, Analysis Records, Lexical Entries and their Senses, etc.) These values are user-definable and initially include: Low, Medium and High as possibilities.</para>
</comment>
</rel>
<rel num="9" id="Status" card="atomic" sig="CmPossibility">
<comment>
<para>The status of this Possibility. This is a user-definable list but initial list will include: Confirmed, Disproved, Pending.</para>
</comment>
</rel>
<basic num="10" id="DateCreated" sig="Time"/>
<basic num="11" id="DateModified" sig="Time"/>
<owning num="12" id="Discussion" card="atomic" sig="StText">
<comment>
<para>Any pertinent discussion for this Possibility.</para>
</comment>
</owning>
<rel num="13" id="Researchers" card="col" sig="CmPerson">
<comment>
<para>The person(s) who created/modified this Possibility record or any of its fields.</para>
</comment>
</rel>
<basic num="14" id="HelpId" sig="Unicode">
<comment>
<para>Used by the help system to launch the appropriate help topic for the Possibility item.</para>
</comment>
</basic>
<basic num="15" id="ForeColor" sig="Integer">
<comment>
<para>ForeColor for overlay functionality.</para>
</comment>
</basic>
<basic num="16" id="BackColor" sig="Integer">
<comment>
<para>BackColor for overlay functionality.</para>
</comment>
</basic>
<basic num="17" id="UnderColor" sig="Integer">
<comment>
<para>UnderColor for overlay functionality - the color of the "underline" style when used in Overlays. </para>
</comment>
</basic>
<basic num="18" id="UnderStyle" sig="Integer" min="0" max="127">
<comment>
<para>UnderStyle - style of the underline used in overlays functionality. </para>
</comment>
</basic>
<basic num="19" id="Hidden" sig="Boolean">
<comment>
<para>Indicates whether overlay bracketing should be hidden or not. True = Hidden.</para>
</comment>
</basic>
<basic num="20" id="IsProtected" sig="Boolean">
<comment>
<para>This flag is set for items that are accessed by the software via GUIDs. The software is assuming that this item is always present with the same GUID on all machines. When set, a user can still edit the item, but it cannot be deleted.</para>
</comment>
</basic>
</props>
</class>
<class num="8" id="CmPossibilityList" abstract="false" abbr="pssl" base="CmMajorObject" depth="1" owner="optional">
<!-- GJM 22 June 2010: Custom Lists are unowned in the model, so owner needs to be optional (FWR-133) -->
<props>
<basic num="2" id="Depth" sig="Integer" min="0" max="127"/>
<basic num="3" id="PreventChoiceAboveLevel" sig="Integer" min="0" max="8"/>
<basic num="4" id="IsSorted" sig="Boolean"/>
<basic num="5" id="IsClosed" sig="Boolean"/>
<basic num="6" id="PreventDuplicates" sig="Boolean"/>
<basic num="7" id="PreventNodeChoices" sig="Boolean"/>
<owning num="8" id="Possibilities" card="seq" sig="CmPossibility"/>
<basic num="10" id="Abbreviation" sig="MultiUnicode"/>
<basic num="11" id="HelpFile" sig="Unicode"/>
<basic num="12" id="UseExtendedFields" sig="Boolean"/>
<basic num="13" id="DisplayOption" sig="Integer" min="0" max="2">
<comment>
<para>This determines whether we display name (kpntName = 0), name and abbreviation (kpntNameAndAbbrev = 1), or abbreviation (kpntAbbreviation = 2) when we display names.</para>
</comment>
</basic>
<basic num="14" id="ItemClsid" sig="Integer">
<comment>
<para>This is the clsid of the items that can be inserted into this list.</para>
</comment>
</basic>
<basic num="15" id="IsVernacular" sig="Boolean">
<comment>
<para>This indicates whether the list will display vernacular (True) or analysis encodings (false) as the default.</para>
</comment>
</basic>
<basic num="17" id="WritingSystem" sig="Unicode"/>
<basic num="18" id="WsSelector" sig="Integer">
<comment>
<para>// the application to get the appropriate writing system from the application. For example,</para>
<para>// a language project has a list of one or more analysis encodings. kwsAnal would</para>
<para>// tell the program to use the first writing system in this list.</para>
<para>#define kwsAnal 0xffffffff // (-1) The first analysis writing system.</para>
<para>#define kwsVern 0xfffffffe // (-2) The first vernacular writing system.</para>
<para>#define kwsAnals 0xfffffffd // (-3) All analysis writing system.</para>
<para>#define kwsVerns 0xfffffffc // (-4) All vernacular writing system.</para>
<para>#define kwsAnalVerns 0xfffffffb // (-5) All analysis then All vernacular writing system.</para>
<para>#define kwsVernAnals 0xfffffffa // (-6) All vernacular then All analysis writing system.</para>
<para>#define kwsLim 0xfffffff9 // (-7) One beyond the last magic value.</para>
</comment>
</basic>
<basic num="21" id="ListVersion" sig="Guid">
<comment>
<para>Uniquely identifies a particular version of the possiblity llist so that version changes can be detected and update routines run.</para>
</comment>
</basic>
</props>
</class>
<class num="9" id="CmFilter" abstract="false" abbr="fil" base="CmObject" depth="0">
<props>
<basic num="1" id="Name" sig="Unicode"/>
<basic num="2" id="ClassId" sig="Integer"/>
<basic num="3" id="FieldId" sig="Integer"/>
<basic num="4" id="FieldInfo" sig="Unicode"/>
<basic num="5" id="App" sig="Guid"/>
<basic num="6" id="Type" sig="Integer" min="0" max="127"/>
<owning num="7" id="Rows" card="seq" sig="CmRow"/>
<basic num="8" id="ColumnInfo" sig="Unicode"/>
<basic num="9" id="ShowPrompt" sig="Integer" min="0" max="127"/>
<basic num="10" id="PromptText" sig="Unicode"/>
</props>
</class>
<class num="10" id="CmRow" abstract="false" abbr="frow" base="CmObject" depth="0">
<props>
<owning num="1" id="Cells" card="seq" sig="CmCell"/>
</props>
</class>
<class num="11" id="CmCell" abstract="false" abbr="fcel" base="CmObject" depth="0">
<props>
<basic num="1" id="Contents" sig="String"/>
</props>
</class>
<class num="12" id="CmLocation" abstract="false" abbr="loc" base="CmPossibility" depth="1">
<props>
<basic num="1" id="Alias" sig="MultiUnicode"/>
</props>
</class>
<class num="13" id="CmPerson" abstract="false" abbr="per" base="CmPossibility" depth="1">
<props>
<basic num="1" id="Alias" sig="MultiUnicode"/>
<basic num="3" id="Gender" sig="Integer" min="0" max="2"/>
<basic num="4" id="DateOfBirth" sig="GenDate"/>
<rel num="6" id="PlaceOfBirth" card="atomic" sig="CmLocation"/>
<basic num="8" id="IsResearcher" sig="Boolean"/>
<rel num="9" id="PlacesOfResidence" card="col" sig="CmLocation"/>
<rel num="10" id="Education" card="atomic" sig="CmPossibility"/>
<basic num="11" id="DateOfDeath" sig="GenDate"/>
<rel num="13" id="Positions" card="col" sig="CmPossibility"/>
</props>
</class>
<class num="14" id="StText" abstract="false" abbr="stxt" base="CmObject" depth="0">
<comment>
<para>An object used to represent a moderately structured text (a sequence of styled paragraphs).</para>
</comment>
<props>
<owning num="1" id="Paragraphs" card="seq" sig="StPara"/>
<basic num="2" id="RightToLeft" sig="Boolean">
<comment>
<para>Specifies whether the overall document direction for this structured text is right-to-left (true) or not (false).</para>
</comment>
</basic>
<owning num="3" id="Tags" sig="TextTag" card="col"/>
<basic num="4" id="DateModified" sig="Time"/>
</props>
</class>
<class num="15" id="StPara" abstract="true" abbr="spar" base="CmObject" depth="0">
<comment>
<para>An abstract class used to group the StTxtPara and (non-existent) StTable classes</para>
</comment>
<props>
<basic num="2" id="StyleRules" sig="TextPropBinary">
<comment>
<para>When the user applies formatting to a specific paragraph apart from using a pre-defined style, that formatting information is stored here. It includes information such as font, font style, margins, etc.</para>
</comment>
</basic>
</props>
</class>
<class num="16" id="StTxtPara" abstract="false" abbr="tpar" base="StPara" depth="1">
<comment>
<para>This represents a standard paragraph found in text.</para>
</comment>
<props>
<basic num="1" id="Label" sig="String">
<comment>
<para>Label to appear at start of paragraph (in margin, if negative first line indent). </para>
<para>Note: This attribute is not currently used. </para>
<para>John Thomson's original intent was to use it for the kind of paragraph that has something hanging out in the left margin that isn't predictable (as a bullet or number is) from the stylesheet. The classic example would be a list of terms, with the term sticking out to the left. Since we don't yet have tabs implemented, we could set things up to allow the main body of the paragraph to be aligned, and the label out in the margin. </para>
</comment>
</basic>
<basic num="2" id="Contents" sig="String">
<comment>
<para>The string of text found within a paragraph. The signature here is string which allows for embedded formatting and language encodings. </para>
</comment>
</basic>
<basic num="3" id="ParseIsCurrent" sig="Boolean">
<comment>
<para>This would be set true whenever the paragraph is parsed (tokenized), and false whenever it is edited (changes to StTxtPara.Contents or StText.Paragraphs). This allows us to re-parse only the texts that need it, now that the parser always makes real, persistent annotations.</para>
</comment>
</basic>
<rel num="4" id="TextObjects" card="seq" sig="CmObject">
<comment>
<para>The Contents of StTxtPara are parsed into TextObjects as a side-effect of setting the Contents. Parsed objects include Wordforms and Punctuation (and possibly References or ???). A sequence of references are set to each of these objects as they are found in their respective inventories (Wordform Inventory, Punctuation Inventory, and (future?) ReferenceScheme)</para>
<para>This attribute exists in order to allow for a concordance by WfiWordform, (currently including punctuation) and/or PunctuationForm. This attribute is a "lite" version of AnalyzedTextObjects.</para>
<para>This attribute should only be used if a particular application of StTxtPara requires concordances.</para>
</comment>
</rel>
<owning num="5" id="AnalyzedTextObjects" card="seq" sig="CmObject">
<comment>
<para>AnalyzedTextObjects is used when there are associated analyses with any objects in the text. It is primarily meant for morphological interlinear analysis of text.</para>
<para>Reference pointers to TxtWordformInContext (one for every word, punctuation and reference in the text) are set in a sequence.</para>
<para>Note: the name of the class will likely change to TxtObjInContext because it handles more than just words.</para>
<para>Refer to the documentation on TxtWordformInContext for more information.</para>
<para>This attribute is used only if the application requires it. It does not obviate the need for TextObjects</para>
</comment>
</owning>
<owning num="6" id="Segments" sig="Segment" card="seq"/>
<owning num="8" id="Translations" card="col" sig="CmTranslation">
<comment>
<para>Refer to the documentation on LpTranslation.</para>
</comment>
</owning>
</props>
</class>
<class num="17" id="StStyle" abstract="false" abbr="ssty" base="CmObject" depth="0">
<comment>
<para>Represents a style used to display a kind of paragraph</para>
</comment>
<props>
<basic num="1" id="Name" sig="Unicode"/>
<rel num="2" id="BasedOn" card="atomic" sig="StStyle"/>
<rel num="3" id="Next" card="atomic" sig="StStyle"/>
<basic num="4" id="Type" sig="Integer" min="0" max="255"/>
<basic num="5" id="Rules" sig="TextPropBinary"/>
<basic num="6" id="IsPublishedTextStyle" sig="Boolean">
<comment>
<para>TRUE = the style is for use in published text; FALSE = the style is for non-published text</para>
</comment>
</basic>
<basic num="7" id="IsBuiltIn" sig="Boolean">
<comment>
<para>TRUE means this style was in the default FW style sheet and that the user will not be allowed to delete or rename these styles; </para>
<para>FALSE means this style was added by the user.</para>
<para>For further discussion, see below: </para>
<para>John W. (Mar 20, 2002) adds that in the "Default Style Sheet" specification, we talk about "factory" styles:</para>
<para>"This document describes the style sheet that will ship with the FieldWorks Translation Editor. Generally speaking, users can add, modify or delete styles; this document is concerned with the style sheet as it is installed from the factory, and thus the "factory styles" which cannot be renamed or deleted..</para>
<para>There are two sets of styles, one for published materials (Scripture text, introductions, etc.) and one for non-published materials (back translation, consultant notes, etc.) For the former we started with the main styles found in the Paratext stylesheet for the TEV, and modified it as is appropriate for the FieldWorks environment. </para>
<para>For the styles listed below (that is, in the specification refered to by John W.)</para>
<para>1. The user will not be permitted to rename or delete these. </para>
<para>2. The user is permitted to change their attributes, including paragraph, font, etc.</para>
<para>3. The user is permitted to edit their "Usage" attribute. "</para>
<para>Ken Z. added on Mar 20, 2002:</para>
<para>We need some way of saying that certain styles are used by code, and thus can't be deleted or renamed. I believe this might be done right now by hard coding these style names in the styles dialog to keep them from being changed. It seems like IsBuiltIn should be able to serve this function so that we can designate certain styles as built-in and therefore guaranteed to always be there. Unless Bryan or someone else sees a reason not to do this, I think we should add this to the specification. As such, it will be used by more than just the Translation Editor.</para>
<para>Ken Z. also notes the following:</para>
<para>As for Lela-Teli sample styles, they should not have the IsBuiltIn property set even though they are delivered "from the factory". From all responses, I think it is safe to say that any style that has the IsBuiltIn flag set should not be deleted or renamed by any program.</para>
</comment>
</basic>
<basic num="8" id="IsModified" sig="Boolean">
<comment>
<para>This applies only to built-in styles; TRUE means the user changed its properties.</para>
</comment>
</basic>
<basic num="9" id="UserLevel" sig="Integer">
<comment>
<para>A number 0-4 indicating the level of user likely to use this style. Default = 0</para>
</comment>
</basic>
<basic num="11" id="Context" sig="Integer">
<comment>
<para>The high level structure to which the application of a style is limited. To be enumerated as follows:</para>
<para> stcnGeneral – indicating Not limited to a single context.</para>
<para> stcnText – The main text (eg. of scripture).</para>
<para> stcnScrIntro – Introduction to a book of scripture</para>
<para> stcnScrAnnotation – Annotation to the scripture text (e.g. consultant notes)</para>
<para> stcnFigure – Captions, etc. associated with graphic elements</para>
<para> stcnInternal – Styles that are applied by the program and modifiable by the user</para>
<para> stcnScrTitle – The title of a scripture book.</para>
<para> (others as needed)</para>
</comment>
</basic>
<basic num="12" id="Structure" sig="Integer">
<comment>
<para>The substructure of a Context to which the application of a style is limited. (Presently only used to distinguish the substructures of scripture sections.) To be enumerated as follows:</para>
<para> ststHeading - indicating The Heading of a scripture or scripture introduction section. </para>
<para> ststContent - indicating The Content of a scripture or scripture introduction section. </para>
<para> null - indicating Style is unrestricted for use within this context. </para>
<para> (others as needed)</para>
</comment>
</basic>
<basic num="13" id="Function" sig="Integer">
<comment>
<para>The functional context for a style within a given structural context (presently only defined for section ‘body’ structures). To be enumerated as follows:</para>
<para> stusProse - indicating prose within a section body structure </para>
<para> stusLine - indicating poetry within a section body structure </para>
<para> stusList - indicating a list within a section body structure </para>
<para> stusTable - indicating a table within a section body structure </para>
<para> stusChapter - indicating a reference chapter number within a scripture section body structure</para>
<para> stusVerse - indicating a reference verse number within a scripture section body structure</para>
<para> null - indicating Style is unrestricted for use within the context and structure. </para>
<para> (others as needed)</para>
</comment>
</basic>
<basic num="14" id="Usage" sig="MultiUnicode">
<comment>
<para>A description of the expected usage of the style, displayed on the General tab in the Style dialog.</para>
</comment>
</basic>
</props>
</class>
<class num="21" id="CmOverlay" abstract="false" abbr="ovl" base="CmObject" depth="0">
<comment>
<para>An overlay is a collection of CmPossibilities used to mark up text in a StText. The formatting for each item is defined by properties on the CmPossibiliy.</para>
<para>In the original model, we had model CmOverlayTag that could carry their own formatting apart from the formatting defined in the CmPossibility. In the current model, we have removed this capability.</para>
</comment>
<props>
<basic num="1" id="Name" sig="Unicode"/>
<rel num="2" id="PossList" card="atomic" sig="CmPossibilityList">
<comment>
<para>The list that a CmOverlay gets its PossItems from.</para>
</comment>
</rel>
<rel num="4" id="PossItems" card="col" sig="CmPossibility">
<comment>
<para>An Overlay can have a number of CmPossibilities associated with it for the purposes of tagging text. These CmPossibilities come from a particular CmPossibilityList (defined by PossList). For example, the user might have an overlay for OCM codes having to do with marriage and fishing. He might have another overlay with OCM codes that have to do with cooking.</para>
</comment>
</rel>
</props>
</class>
<class num="22" id="TextTag" abstract="false" abbr="tt" base="CmObject" depth="0">
<props>
<rel num="1" id="BeginSegment" sig="Segment" card="atomic"/>
<rel num="2" id="EndSegment" sig="Segment" card="atomic"/>
<basic num="3" id="BeginAnalysisIndex" sig="Integer">
<comment>
<para>These indices refer to the index of an IAnalysis object in a Segment.Analyses sequence.</para>
</comment>
</basic>
<basic num="4" id="EndAnalysisIndex" sig="Integer">
<comment>
<para>These indices refer to the index of an IAnalysis object in a Segment.Analyses sequence.</para>
</comment>
</basic>
<rel num="5" id="Tag" sig="CmPossibility" card="atomic"/>
</props>
</class>
<class num="23" id="CmAgent" abstract="false" abbr="laag" base="CmObject" depth="0">
<comment>
<para>A human or computational analysis agent associated with various linguistic analyses. Currently (Jan, 2002) are used only by the morphological parsing system for words. Using agents, the system stores whether or not a particular word parse is validated by the lexicon and the state of the word grammar. The UI will allow the user to also create word parses manually (thus a human agent) or to indicate to the system that he, the user, has verified a computational parse.</para>
</comment>
<props>
<basic num="1" id="Name" sig="MultiUnicode">
<comment>
<para>Arbitrary name of the agent. Examples: Larry, AMPLE, XEROXParser, HermitCrab.</para>
</comment>
</basic>
<basic num="2" id="StateInformation" sig="Unicode">
<comment>
<para>Defines what constraint groups are turned off. (Example: in morphological parsing we might turn off a set of rules). It is represented as XML and is empty unless the morphological system is in debug mode. We have not yet determined the nature of the XML representation (Jan 17, 2002).</para>
</comment>
</basic>
<basic num="3" id="Human" sig="Boolean">
<comment>
<para>T = human, F = computational agent.</para>
</comment>
</basic>
<owning num="4" id="Notes" card="atomic" sig="StText"/>
<basic num="5" id="Version" sig="Unicode">
<comment>
<para>This attribute is not finalized but for now possible values include:Normal - represents the parser using the current state of the grammar and lexicon. Debug - represents the parser using a limited grammar (user has turned off some group of constraints) Milestone - represents the parser using a particular grammar and lexicon at a particular time as recorded on CmObject (date created). Works in conjunction with StateInformation.</para>
</comment>
</basic>
<owning num="7" id="Approves" card="atomic" sig="CmAgentEvaluation">
<comment>
<para>The agent evaluation which objects being evaluated refer to in order to indicate that this agent approves or accepts them.</para>
</comment>
</owning>
<owning num="8" id="Disapproves" card="atomic" sig="CmAgentEvaluation">
<comment>
<para>The agent evaluation which objects being evaluated refer to in order to indicate that this agent disapproves or does not accept them.</para>
</comment>
</owning>
</props>
</class>
<class num="26" id="CmAnthroItem" abstract="false" abbr="anit" base="CmPossibility" depth="1">
<props/>
</class>
<class num="27" id="CmCustomItem" abstract="false" abbr="cci" base="CmPossibility" depth="1">
<comment>
<para>Purpose is to allow users to add custom fields to custom lists without affecting standard lists.Since these lists are global in a database (since we are modifying the Field$ table) they can't be owned by a language project, so custom lists will be another unowned object.</para>
</comment>
<props/>
</class>
<class num="28" id="CrossReference" abstract="false" abbr="cref" base="CmObject" depth="0">
<comment>
<para>May 23, 2001. This is to be used for cross references between objects. In its current state, it will be used ONLY for bidirectional (cf. unidirectional or cross-reference sets of greater than 2) cross-references. Although there is a comment attribute on this object, it will not be used in version 1 of the Research Notebook.</para>
</comment>
<props>
<basic num="1" id="Comment" sig="MultiString">
<comment>
<para>To be used after version 1 for indicating the reason for a cross-reference. It is quite likely that a pointer to a list of types of cross-references will also be included in the future.</para>
</comment>
</basic>
</props>
</class>
<class num="29" id="CmTranslation" abstract="false" abbr="tran" base="CmObject" depth="0" generateBasicCreateMethod="false">
<comment>
<para>Used for handling various types of translations of a paragraph. For Scripture this includes a back translation. For vernacular texts, this includes free and literal translations.</para>
</comment>
<props>
<basic num="1" id="Translation" sig="MultiString">
<comment>
<para>The signature is multiString allowing us to have translations in multiple languages (e.g. ENG, FRN, SPN). </para>
</comment>
</basic>
<rel num="2" id="Type" card="atomic" sig="CmPossibility">
<comment>
<para>The type of translation: free, literal, back, front, etc.</para>
</comment>
</rel>
<basic num="3" id="Status" sig="MultiUnicode">
<comment>
<para>A label to hold any kind of metadata about the Translation, in particular used for its status (as in “fresh” or “stale”, etc.). These labels can be stored and retrieved independently for each writing system and so correspond the parallel string in the Translation for each writing system. Different types of CmTranslations can have different sets of status labels according to the need of the type.</para>
</comment>
</basic>
</props>
</class>
<class num="32" id="CmAgentEvaluation" abstract="false" abbr="caev" base="CmObject" depth="0">
<comment>
<para>A CmAgentEvaluation indicates that an object is approved or disapproved by the agent that owns it. Approval is indicated by referring to the instance in CmAgent.Approves, disapproval by referrng to the one in CmAgent.Disapproves.</para>
</comment>
<props/>
</class>
<class num="34" id="CmAnnotation" abstract="true" abbr="anno" base="CmObject" depth="0">
<comment>
<para>The user can annotate another object in any number of ways. An annotation represents some level of analysis or tagging on a object or fragment of an object (a portion of text, or a media file). Analyses can include a freeform comment, a tag from a tag list, a featureStructure or combination of the above.</para>
<para>There are two particular uses of this object that we are thinking of right now: a. tagging texts or media files with various types of annotations (OCM, grammatical, semantic, etc.) and b. tagging objects with system level annotations ... for example, parses with "incomplete analysis".</para>
<para>This model is extremely generalized and it may be that we need to add subclasses for specialized behaviours.</para>
<para>We may want to subclass the current Annotation class to make lighter annotation classes. For example, EndObject and OtherObjects might go on a "MultiObjectAnnotation". TextWordformInContext (which has been removed from the model ... we may perhaps need a subclass) will definitely not care about the endObject. The majority of annotations won't need an EndObject ... only those that span multiple paragraphs.</para>
<para>For now, Annotations are ownerless. Might need to have it owned by LangProject for cache purposes.</para>
<para>Question: Can an annotation point to two or more objects from different projects? At this point it cannot cross databases because we would need an attribute for the database itself.</para>
</comment>
<props>
<basic num="1" id="CompDetails" sig="Unicode">
<comment>
<para>Data stored and used by specialized computer agents (e.g. computational parsers) in the FieldWorks system. Most likely will be stored in XML format. </para>
</comment>
</basic>
<basic num="2" id="Comment" sig="MultiString">
<comment>
<para>Not sure what the signature here should be yet. multiUnicode, StText?</para>
<para><p></para>
<para>Probably, in most cases, only string will be needed. </para>
</comment>
</basic>
<rel num="3" id="AnnotationType" card="atomic" sig="CmAnnotationDefn">
<comment>
<para>An annotation is of a particular type. The AnnotationDefn defines possible behaviors for an annotation.</para>
</comment>
</rel>
<rel num="4" id="Source" card="atomic" sig="CmAgent">
<comment>
<para>Who made this annotation. If a computer parser, the agent will be that parser.</para>
</comment>
</rel>
<rel num="6" id="InstanceOf" card="atomic" sig="CmObject">
<comment>
<para>Annotations, in many cases, are tags from a predefined list of objects.</para>
<para>We might want to mark up a text for OCM codes. A particular annotation in context may tag an instance of OCM code 152.</para>
<para>WordformsInContext are tagged with Wordforms found in the Wordform Repository.</para>
</comment>
</rel>
<owning num="7" id="Text" card="atomic" sig="StText">
<comment>
<para>To handle multiparagraph annotations.</para>
</comment>
</owning>
<owning num="8" id="Features" card="atomic" sig="FsFeatStruc"/>
<basic num="9" id="DateCreated" sig="Time">
<comment>
<para>Date stamp for when this annotation was created, for display to the user. This may differ from the internally generated timestamp that is used for record locking and conflict detection.</para>
</comment>
</basic>
<basic num="10" id="DateModified" sig="Time">
<comment>
<para>Date and time that this annotation was last modified, for display to the user and for use by automated checking tools. Allows explicit tracking of relevent modifications versus the automatic date stamp created by the database engine.</para>
</comment>
</basic>
</props>
</class>
<class num="35" id="CmAnnotationDefn" abstract="false" abbr="annd" base="CmPossibility" depth="1">
<comment>
<para>In all likelyhood, a subclass of CmPossibility. Defines a possible type of annotation.</para>
</comment>
<props>
<basic num="3" id="AllowsComment" sig="Boolean">
<comment>
<para>True = user can type in a comment associated with the Annotation. </para>
<para>False = user cannot type in a comment.</para>
<para>Example: a user may tag a section of text with OCM 152 but also want to provide a comment as to why he tagged it in this way.</para>
</comment>
</basic>
<basic num="4" id="AllowsFeatureStructure" sig="Boolean">
<comment>
<para>T = Annotation can carry a FsFeatStruc.</para>
</comment>
</basic>
<basic num="5" id="AllowsInstanceOf" sig="Boolean">
<comment>
<para>T = Annotation can be selected from a list of instances of a particular CmObject. </para>
<para>Example: OCM annotations are contextual instances of the AnthroList items.</para>
</comment>
</basic>
<basic num="6" id="InstanceOfSignature" sig="Integer">
<comment>
<para>ClassDefn id from metatable. States that this AnnotationDefn allows instances of a particular class.</para>
</comment>
</basic>
<basic num="7" id="UserCanCreate" sig="Boolean">
<comment>
<para>Perhaps the only reason for this attribute is so that we can limit the AnnotationDefns displayed in a GUI that the user selects from. Perhaps it is better to use a boolean: </para>
<para><p></para>
<para>UserCanCreate: T | F</para>
</comment>
</basic>
<basic num="8" id="CanCreateOrphan" sig="Boolean">
<comment>
<para>When the objects an Annotation refers to are deleted:</para>
<para>T = Keep Annotation </para>
<para>F = Delete Annotation </para>
<para>For some types of annotations we may want the annotation to persist, even though the object it annotates no longer exists. </para>
<para>What happens to an annotation when the object it annotates disappears:</para>
<para>1. If the object it points to goes away, get rid of the annotation.</para>
<para>2. If the range becomes empty the Annotation goes away.</para>
<para>QUESTIONS: </para>
<para>3. If something gets deleted at the beginning or the end, do you jump right or left?</para>
<para>4. If an object is owned by another object, do you move the annotation to the owner?</para>
<para>Refer to http://mpj.cx/twiki/bin/view.pl/Wordworks/Mar2003OutcomesMinutesDiscussions for further discussion. </para>
</comment>
</basic>
<basic num="9" id="PromptUser" sig="Boolean">
<comment>
<para>Should the user be prompted before annotated object is deleted? T = Prompt user. F = Delete without prompt.</para>
</comment>
</basic>
<basic num="10" id="CopyCutPastable" sig="Boolean">
<comment>
<para>T = annotations of this type are copied and pasted when their annotated object is copied and pasted. </para>
<para>F = these types of annotations are NOT copied along with their annotation object.</para>
</comment>
</basic>
<basic num="11" id="ZeroWidth" sig="Boolean">
<comment>
<para>T = Annotations of this type are have the same Begin and EndOffset and thus zeroWidth. </para>
<para>Potential example: footnotes markers.</para>
</comment>
</basic>
<basic num="12" id="Multi" sig="Boolean">
<comment>
<para>Indicates whether this annotation type needs "multi" capabilities.</para>
<para>Also need to indicate which encodings to offer the user. Vernacular, Analysis, etc. </para>
</comment>
</basic>
<basic num="13" id="Severity" sig="Integer">
<comment>
<para>For example, we may want to indicate the following with visual cues. </para>
<para>Severity:</para>
<para>0 = NA</para>
<para>1 = Critical</para>
<para>2 = Problem</para>
<para>3 = Warning</para>
<para>4 = Suggestion</para>
<para>User</para>
</comment>
</basic>
<basic num="14" id="MaxDupOccur" sig="Integer">
<comment>
<para>The user should be able to set the limit of each type of checking error, as appropriate for each project and stage. MaxDupOccur stores how many "duplicate" errors are allowed for each type of check. Other types of annotations could use this if it's useful. ("Duplicates" would be defined differently for different types of annotations.)</para>
</comment>
</basic>
</props>
</class>
<class num="36" id="CmIndirectAnnotation" abstract="false" abbr="iann" base="CmAnnotation" depth="1">
<props>
<rel num="1" id="AppliesTo" card="seq" sig="CmAnnotation"/>
</props>
</class>
<class num="37" id="CmBaseAnnotation" abstract="false" abbr="bann" base="CmAnnotation" depth="1">
<props>
<basic num="1" id="BeginOffset" sig="Integer">
<comment>
<para>For Annotations that annotate a text string fragment or a media file fragment, we set the BeginOffset and EndOffset. </para>
</comment>
</basic>
<basic num="3" id="Flid" sig="Integer">
<comment>
<para>An annotation knows what it is annotating through the BeginObject reference attribute and the Begin and EndOffsets. For those annotations that are not on objects themselves but data within the object, we we need to identify which attribute holds the data through the field id (abbrev: FLID) found in the FieldWorks RDBMS. </para>
</comment>
</basic>
<basic num="4" id="EndOffset" sig="Integer">
<comment>
<para>See BeginOffset.</para>
</comment>
</basic>
<rel num="5" id="BeginObject" card="atomic" sig="CmObject"/>
<rel num="6" id="EndObject" card="atomic" sig="CmObject"/>
<rel num="7" id="OtherObjects" card="col" sig="CmObject"/>
<basic num="8" id="WritingSystem" sig="Unicode"/>
<basic num="9" id="WsSelector" sig="Integer">
<comment>
<para>Refer to documentation on CmPossibilityList_WsSelector.</para>
</comment>
</basic>
<basic num="10" id="BeginRef" sig="Integer">
<comment>
<para>For Scripture use, this will be used to store begin Scripture references. The int actually encodes book, chapter, and verse for Consultant Notes, Translator Notes, Change History Notes, etc. The attribute is available for other uses in other applications.</para>
</comment>
</basic>
<basic num="11" id="EndRef" sig="Integer">
<comment>
<para>For Scripture use, this will be used to store end Scripture references. The int actually encodes book, chapter, and verse for Consultant Notes, Translator Notes, Change History Notes, etc. The attribute is available for other uses in other applications.</para>
</comment>
</basic>
</props>
</class>
<class num="38" id="CmMediaAnnotation" abstract="false" abbr="mann" base="CmAnnotation" depth="1">
<comment>
<para>Yet to be defined. Will probably point to a RnMedia item.</para>
</comment>
<props/>
</class>
<class num="39" id="StFootnote" abstract="false" abbr="stfn" base="StText" depth="1">
<props>
<basic num="1" id="FootnoteMarker" sig="String"/>
</props>
</class>
<class num="40" id="UserConfigAcct" abstract="false" abbr="ucac" base="CmObject" depth="0">
<comment>
<para>Renamed from UserConfigAccount for Firebird port.</para>
</comment>
<props>
<basic num="1" id="Sid" sig="Binary">
<comment>
<para>Same as Sid in the Syslogins table in the master DB. </para>
</comment>
</basic>
<basic num="2" id="UserLevel" sig="Integer">
<comment>
<para>Beginner = 1, Intermediate = 3, Advanced = 5</para>
</comment>
</basic>
<basic num="3" id="HasMaintenance" sig="Boolean"/>
</props>
</class>
<class num="41" id="UserAppFeatAct" abstract="false" abbr="uafa" base="CmObject" depth="0">
<comment>
<para>Renamed from UserAppFeatureActivated for the Firebird Port.</para>
</comment>
<props>
<rel num="1" id="UserConfigAcct" card="col" sig="UserConfigAcct"/>
<basic num="2" id="ApplicationId" sig="Guid">
<comment>
<para>From AppCompat$? Which apps are installed? Look in registry?</para>
</comment>
</basic>
<basic num="3" id="FeatureId" sig="Integer">
<comment>
<para>An application returns a hard-coded array of its available features. Features have ids that are referenced in this FeatureId field.</para>
<para>UserConfigAccount, ApplicationId, FeatureId form a unique key for the object. </para>
</comment>
</basic>
<basic num="4" id="ActivatedLevel" sig="Integer"/>
</props>
</class>
<class num="42" id="Publication" abstract="false" abbr="cmpb" base="CmObject" depth="0">