glossarist 2.8.2 → 2.8.5

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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +78 -64
  3. data/glossarist.gemspec +1 -1
  4. data/lib/glossarist/bibliography_data.rb +41 -0
  5. data/lib/glossarist/bibliography_entry.rb +13 -0
  6. data/lib/glossarist/citation.rb +8 -2
  7. data/lib/glossarist/cli/export_command.rb +10 -5
  8. data/lib/glossarist/cli/validate_command.rb +21 -5
  9. data/lib/glossarist/collection.rb +2 -2
  10. data/lib/glossarist/collections/bibliography_collection.rb +2 -1
  11. data/lib/glossarist/collections/collection.rb +2 -2
  12. data/lib/glossarist/collections/localization_collection.rb +4 -4
  13. data/lib/glossarist/concept_collector.rb +6 -6
  14. data/lib/glossarist/concept_document.rb +2 -1
  15. data/lib/glossarist/concept_manager.rb +6 -7
  16. data/lib/glossarist/concept_reference.rb +4 -0
  17. data/lib/glossarist/concept_set.rb +4 -4
  18. data/lib/glossarist/concept_store.rb +38 -50
  19. data/lib/glossarist/dataset_register.rb +72 -0
  20. data/lib/glossarist/dataset_validator.rb +2 -1
  21. data/lib/glossarist/gcr_metadata.rb +8 -5
  22. data/lib/glossarist/gcr_package_definition.rb +35 -0
  23. data/lib/glossarist/gcr_statistics.rb +2 -2
  24. data/lib/glossarist/glossary_definition.rb +1 -1
  25. data/lib/glossarist/glossary_store.rb +198 -0
  26. data/lib/glossarist/managed_concept_collection.rb +2 -2
  27. data/lib/glossarist/rdf/gloss_citation.rb +8 -4
  28. data/lib/glossarist/rdf/gloss_concept.rb +6 -3
  29. data/lib/glossarist/rdf/gloss_concept_date.rb +4 -2
  30. data/lib/glossarist/rdf/gloss_concept_reference.rb +6 -3
  31. data/lib/glossarist/rdf/gloss_concept_source.rb +6 -3
  32. data/lib/glossarist/rdf/gloss_designation.rb +56 -25
  33. data/lib/glossarist/rdf/gloss_grammar_info.rb +19 -9
  34. data/lib/glossarist/rdf/gloss_locality.rb +6 -3
  35. data/lib/glossarist/rdf/gloss_localized_concept.rb +14 -7
  36. data/lib/glossarist/rdf/gloss_non_verbal_rep.rb +9 -4
  37. data/lib/glossarist/rdf/gloss_pronunciation.rb +13 -6
  38. data/lib/glossarist/rdf/gloss_reference.rb +8 -4
  39. data/lib/glossarist/rdf/namespaces.rb +3 -2
  40. data/lib/glossarist/rdf/relationship_predicates.rb +14 -7
  41. data/lib/glossarist/rdf.rb +2 -1
  42. data/lib/glossarist/register_data.rb +72 -18
  43. data/lib/glossarist/schema_migration.rb +8 -5
  44. data/lib/glossarist/section.rb +39 -0
  45. data/lib/glossarist/transforms/concept_to_gloss_transform.rb +24 -11
  46. data/lib/glossarist/v2/concept_data.rb +2 -1
  47. data/lib/glossarist/v2/concept_document.rb +1 -1
  48. data/lib/glossarist/v3/concept_data.rb +2 -1
  49. data/lib/glossarist/v3/concept_document.rb +1 -1
  50. data/lib/glossarist/validation/asset_index.rb +2 -2
  51. data/lib/glossarist/validation/bibliography_index.rb +2 -1
  52. data/lib/glossarist/validation/rules/asciidoc_xref_rule.rb +2 -1
  53. data/lib/glossarist/validation/rules/authoritative_source_rule.rb +1 -1
  54. data/lib/glossarist/validation/rules/bibliography_yaml_rule.rb +1 -1
  55. data/lib/glossarist/validation/rules/citation_completeness_rule.rb +1 -1
  56. data/lib/glossarist/validation/rules/concept_count_rule.rb +2 -3
  57. data/lib/glossarist/validation/rules/concept_id_rule.rb +0 -1
  58. data/lib/glossarist/validation/rules/concept_id_uniqueness_rule.rb +0 -1
  59. data/lib/glossarist/validation/rules/concept_mention_rule.rb +1 -2
  60. data/lib/glossarist/validation/rules/concept_status_rule.rb +1 -2
  61. data/lib/glossarist/validation/rules/concept_uri_rule.rb +1 -1
  62. data/lib/glossarist/validation/rules/date_type_rule.rb +5 -3
  63. data/lib/glossarist/validation/rules/date_validity_rule.rb +1 -1
  64. data/lib/glossarist/validation/rules/definition_content_rule.rb +1 -2
  65. data/lib/glossarist/validation/rules/domain_target_rule.rb +1 -1
  66. data/lib/glossarist/validation/rules/duplicate_term_rule.rb +1 -2
  67. data/lib/glossarist/validation/rules/entry_status_rule.rb +1 -2
  68. data/lib/glossarist/validation/rules/filename_id_rule.rb +2 -3
  69. data/lib/glossarist/validation/rules/image_reference_rule.rb +3 -2
  70. data/lib/glossarist/validation/rules/l10n_uuid_integrity_rule.rb +1 -2
  71. data/lib/glossarist/validation/rules/language_coverage_rule.rb +1 -2
  72. data/lib/glossarist/validation/rules/language_list_rule.rb +2 -3
  73. data/lib/glossarist/validation/rules/locality_completeness_rule.rb +3 -1
  74. data/lib/glossarist/validation/rules/localization_consistency_rule.rb +1 -1
  75. data/lib/glossarist/validation/rules/localization_presence_rule.rb +0 -1
  76. data/lib/glossarist/validation/rules/model_validity_rule.rb +1 -1
  77. data/lib/glossarist/validation/rules/orphaned_bibliography_rule.rb +2 -1
  78. data/lib/glossarist/validation/rules/orphaned_images_rule.rb +6 -4
  79. data/lib/glossarist/validation/rules/orphaned_l10n_files_rule.rb +1 -2
  80. data/lib/glossarist/validation/rules/preferred_term_rule.rb +1 -2
  81. data/lib/glossarist/validation/rules/related_concept_cycle_rule.rb +2 -2
  82. data/lib/glossarist/validation/rules/related_concept_rule.rb +1 -2
  83. data/lib/glossarist/validation/rules/related_concept_symmetry_rule.rb +1 -1
  84. data/lib/glossarist/validation/rules/related_concept_target_rule.rb +1 -1
  85. data/lib/glossarist/validation/rules/source_type_rule.rb +2 -2
  86. data/lib/glossarist/validation/rules/source_urn_format_rule.rb +2 -2
  87. data/lib/glossarist/validation/rules/terms_presence_rule.rb +1 -1
  88. data/lib/glossarist/validation/rules/uuid_format_rule.rb +1 -1
  89. data/lib/glossarist/version.rb +1 -1
  90. data/lib/glossarist.rb +7 -0
  91. data/scripts/migrate_dataset.rb +14 -8
  92. data/scripts/migrate_isotc204_to_v3.rb +3 -1
  93. data/scripts/migrate_isotc211_to_v3.rb +5 -3
  94. data/scripts/migrate_osgeo_to_v3.rb +4 -2
  95. data/scripts/upgrade_dataset_to_v3.rb +0 -0
  96. metadata +15 -5
@@ -5,20 +5,30 @@ require "lutaml/model"
5
5
  module Glossarist
6
6
  module Rdf
7
7
  COMMON_DESIGNATION_PREDICATES = lambda { |dsl|
8
- dsl.predicate :literalForm, namespace: Namespaces::SkosxlNamespace, to: :designation
9
- dsl.predicate :normativeStatus, namespace: Namespaces::GlossaristNamespace, to: :normative_status, uri_reference: true
10
- dsl.predicate :hasTermType, namespace: Namespaces::GlossaristNamespace, to: :term_type, uri_reference: true
11
- dsl.predicate :isInternational, namespace: Namespaces::GlossaristNamespace, to: :international
12
- dsl.predicate :isAbsent, namespace: Namespaces::GlossaristNamespace, to: :absent
13
- dsl.predicate :geographicalArea, namespace: Namespaces::GlossaristNamespace, to: :language
14
- dsl.predicate :language, namespace: Namespaces::DctermsNamespace, to: :lang_code
15
- dsl.predicate :script, namespace: Namespaces::GlossaristNamespace, to: :script
16
- dsl.predicate :conversionSystem, namespace: Namespaces::GlossaristNamespace, to: :system
8
+ dsl.predicate :literalForm, namespace: Namespaces::SkosxlNamespace,
9
+ to: :designation
10
+ dsl.predicate :normativeStatus,
11
+ namespace: Namespaces::GlossaristNamespace, to: :normative_status, uri_reference: true
12
+ dsl.predicate :hasTermType, namespace: Namespaces::GlossaristNamespace,
13
+ to: :term_type, uri_reference: true
14
+ dsl.predicate :isInternational,
15
+ namespace: Namespaces::GlossaristNamespace, to: :international
16
+ dsl.predicate :isAbsent, namespace: Namespaces::GlossaristNamespace,
17
+ to: :absent
18
+ dsl.predicate :geographicalArea,
19
+ namespace: Namespaces::GlossaristNamespace, to: :language
20
+ dsl.predicate :language, namespace: Namespaces::DctermsNamespace,
21
+ to: :lang_code
22
+ dsl.predicate :script, namespace: Namespaces::GlossaristNamespace,
23
+ to: :script
24
+ dsl.predicate :conversionSystem,
25
+ namespace: Namespaces::GlossaristNamespace, to: :system
17
26
  dsl.members :pronunciations, link: "gloss:hasPronunciation"
18
27
  dsl.members :sources
19
28
 
20
29
  RelationshipPredicates::DESIGNATION_REL_PREDICATES.each do |type, (ns, name)|
21
- dsl.predicate name, namespace: ns, to: :"#{type}_targets", uri_reference: true
30
+ dsl.predicate name, namespace: ns, to: :"#{type}_targets",
31
+ uri_reference: true
22
32
  end
23
33
  }.freeze
24
34
 
@@ -53,7 +63,9 @@ module Glossarist
53
63
  rdf do
54
64
  namespace(*DESIGNATION_NAMESPACES)
55
65
 
56
- subject { |d| "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}" }
66
+ subject do |d|
67
+ "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}"
68
+ end
57
69
 
58
70
  types "gloss:Designation", "skosxl:Label"
59
71
 
@@ -70,14 +82,19 @@ module Glossarist
70
82
  rdf do
71
83
  namespace(*DESIGNATION_NAMESPACES)
72
84
 
73
- subject { |d| "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}" }
85
+ subject do |d|
86
+ "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}"
87
+ end
74
88
 
75
89
  types "gloss:Expression", "skosxl:Label"
76
90
 
77
91
  COMMON_DESIGNATION_PREDICATES.call(self)
78
- predicate :prefix, namespace: Namespaces::GlossaristNamespace, to: :prefix
79
- predicate :usageInfo, namespace: Namespaces::GlossaristNamespace, to: :usage_info
80
- predicate :fieldOfApplication, namespace: Namespaces::GlossaristNamespace, to: :field_of_application
92
+ predicate :prefix, namespace: Namespaces::GlossaristNamespace,
93
+ to: :prefix
94
+ predicate :usageInfo, namespace: Namespaces::GlossaristNamespace,
95
+ to: :usage_info
96
+ predicate :fieldOfApplication,
97
+ namespace: Namespaces::GlossaristNamespace, to: :field_of_application
81
98
  members :grammar_info, link: "gloss:hasGrammarInfo"
82
99
  end
83
100
  end
@@ -90,18 +107,26 @@ module Glossarist
90
107
  rdf do
91
108
  namespace(*DESIGNATION_NAMESPACES)
92
109
 
93
- subject { |d| "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}" }
110
+ subject do |d|
111
+ "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}"
112
+ end
94
113
 
95
114
  types "gloss:Abbreviation", "skosxl:Label"
96
115
 
97
116
  COMMON_DESIGNATION_PREDICATES.call(self)
98
- predicate :prefix, namespace: Namespaces::GlossaristNamespace, to: :prefix
99
- predicate :usageInfo, namespace: Namespaces::GlossaristNamespace, to: :usage_info
100
- predicate :fieldOfApplication, namespace: Namespaces::GlossaristNamespace, to: :field_of_application
117
+ predicate :prefix, namespace: Namespaces::GlossaristNamespace,
118
+ to: :prefix
119
+ predicate :usageInfo, namespace: Namespaces::GlossaristNamespace,
120
+ to: :usage_info
121
+ predicate :fieldOfApplication,
122
+ namespace: Namespaces::GlossaristNamespace, to: :field_of_application
101
123
  members :grammar_info, link: "gloss:hasGrammarInfo"
102
- predicate :isAcronym, namespace: Namespaces::GlossaristNamespace, to: :acronym
103
- predicate :isInitialism, namespace: Namespaces::GlossaristNamespace, to: :initialism
104
- predicate :isTruncation, namespace: Namespaces::GlossaristNamespace, to: :truncation
124
+ predicate :isAcronym, namespace: Namespaces::GlossaristNamespace,
125
+ to: :acronym
126
+ predicate :isInitialism, namespace: Namespaces::GlossaristNamespace,
127
+ to: :initialism
128
+ predicate :isTruncation, namespace: Namespaces::GlossaristNamespace,
129
+ to: :truncation
105
130
  end
106
131
  end
107
132
 
@@ -109,7 +134,9 @@ module Glossarist
109
134
  rdf do
110
135
  namespace(*DESIGNATION_NAMESPACES)
111
136
 
112
- subject { |d| "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}" }
137
+ subject do |d|
138
+ "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}"
139
+ end
113
140
 
114
141
  types "gloss:Symbol", "skosxl:Label"
115
142
 
@@ -123,7 +150,9 @@ module Glossarist
123
150
  rdf do
124
151
  namespace(*DESIGNATION_NAMESPACES)
125
152
 
126
- subject { |d| "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}" }
153
+ subject do |d|
154
+ "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}"
155
+ end
127
156
 
128
157
  types "gloss:LetterSymbol", "skosxl:Label"
129
158
 
@@ -139,7 +168,9 @@ module Glossarist
139
168
  rdf do
140
169
  namespace(*DESIGNATION_NAMESPACES)
141
170
 
142
- subject { |d| "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}" }
171
+ subject do |d|
172
+ "concept/#{d.concept_id}/#{d.lang_code}/designation/#{d.index}"
173
+ end
143
174
 
144
175
  types "gloss:GraphicalSymbol", "skosxl:Label"
145
176
 
@@ -15,18 +15,28 @@ module Glossarist
15
15
  rdf do
16
16
  namespace Namespaces::GlossaristNamespace
17
17
 
18
- subject { |g| "concept/#{g.concept_id}/#{g.lang_code}/designation/#{g.index}/grammar" }
18
+ subject do |g|
19
+ "concept/#{g.concept_id}/#{g.lang_code}/designation/#{g.index}/grammar"
20
+ end
19
21
 
20
22
  types "gloss:GrammarInfo"
21
23
 
22
- predicate :gender, namespace: Namespaces::GlossaristNamespace, to: :gender, uri_reference: true
23
- predicate :number, namespace: Namespaces::GlossaristNamespace, to: :number, uri_reference: true
24
- predicate :isNoun, namespace: Namespaces::GlossaristNamespace, to: :noun?
25
- predicate :isVerb, namespace: Namespaces::GlossaristNamespace, to: :verb?
26
- predicate :isAdjective, namespace: Namespaces::GlossaristNamespace, to: :adjective?
27
- predicate :isAdverb, namespace: Namespaces::GlossaristNamespace, to: :adverb?
28
- predicate :isPreposition, namespace: Namespaces::GlossaristNamespace, to: :preposition?
29
- predicate :isParticiple, namespace: Namespaces::GlossaristNamespace, to: :participle?
24
+ predicate :gender, namespace: Namespaces::GlossaristNamespace,
25
+ to: :gender, uri_reference: true
26
+ predicate :number, namespace: Namespaces::GlossaristNamespace,
27
+ to: :number, uri_reference: true
28
+ predicate :isNoun, namespace: Namespaces::GlossaristNamespace,
29
+ to: :noun?
30
+ predicate :isVerb, namespace: Namespaces::GlossaristNamespace,
31
+ to: :verb?
32
+ predicate :isAdjective, namespace: Namespaces::GlossaristNamespace,
33
+ to: :adjective?
34
+ predicate :isAdverb, namespace: Namespaces::GlossaristNamespace,
35
+ to: :adverb?
36
+ predicate :isPreposition, namespace: Namespaces::GlossaristNamespace,
37
+ to: :preposition?
38
+ predicate :isParticiple, namespace: Namespaces::GlossaristNamespace,
39
+ to: :participle?
30
40
  end
31
41
 
32
42
  def noun?
@@ -16,9 +16,12 @@ module Glossarist
16
16
 
17
17
  types "gloss:Locality"
18
18
 
19
- predicate :localityType, namespace: Namespaces::GlossaristNamespace, to: :locality_type
20
- predicate :referenceFrom, namespace: Namespaces::GlossaristNamespace, to: :reference_from
21
- predicate :referenceTo, namespace: Namespaces::GlossaristNamespace, to: :reference_to
19
+ predicate :localityType, namespace: Namespaces::GlossaristNamespace,
20
+ to: :locality_type
21
+ predicate :referenceFrom, namespace: Namespaces::GlossaristNamespace,
22
+ to: :reference_from
23
+ predicate :referenceTo, namespace: Namespaces::GlossaristNamespace,
24
+ to: :reference_to
22
25
  end
23
26
  end
24
27
  end
@@ -32,13 +32,20 @@ module Glossarist
32
32
 
33
33
  types "gloss:LocalizedConcept", "skos:Concept"
34
34
 
35
- predicate :language, namespace: Namespaces::DctermsNamespace, to: :language_code
36
- predicate :hasEntryStatus, namespace: Namespaces::GlossaristNamespace, to: :entry_status, uri_reference: true
37
- predicate :domain, namespace: Namespaces::GlossaristNamespace, to: :domain
38
- predicate :release, namespace: Namespaces::GlossaristNamespace, to: :release
39
- predicate :lineageSimilarity, namespace: Namespaces::GlossaristNamespace, to: :lineage_similarity
40
- predicate :script, namespace: Namespaces::GlossaristNamespace, to: :script
41
- predicate :conversionSystem, namespace: Namespaces::GlossaristNamespace, to: :system
35
+ predicate :language, namespace: Namespaces::DctermsNamespace,
36
+ to: :language_code
37
+ predicate :hasEntryStatus, namespace: Namespaces::GlossaristNamespace,
38
+ to: :entry_status, uri_reference: true
39
+ predicate :domain, namespace: Namespaces::GlossaristNamespace,
40
+ to: :domain
41
+ predicate :release, namespace: Namespaces::GlossaristNamespace,
42
+ to: :release
43
+ predicate :lineageSimilarity,
44
+ namespace: Namespaces::GlossaristNamespace, to: :lineage_similarity
45
+ predicate :script, namespace: Namespaces::GlossaristNamespace,
46
+ to: :script
47
+ predicate :conversionSystem,
48
+ namespace: Namespaces::GlossaristNamespace, to: :system
42
49
 
43
50
  members :designations,
44
51
  link: ->(d) { GlossLocalizedConcept.skosxl_label_for(d) }
@@ -16,13 +16,18 @@ module Glossarist
16
16
  rdf do
17
17
  namespace Namespaces::GlossaristNamespace
18
18
 
19
- subject { |n| "concept/#{n.concept_id}/#{n.lang_code}/nonverbal/#{n.index}" }
19
+ subject do |n|
20
+ "concept/#{n.concept_id}/#{n.lang_code}/nonverbal/#{n.index}"
21
+ end
20
22
 
21
23
  types "gloss:NonVerbalRepresentation"
22
24
 
23
- predicate :representationType, namespace: Namespaces::GlossaristNamespace, to: :representation_type
24
- predicate :representationRef, namespace: Namespaces::GlossaristNamespace, to: :representation_ref
25
- predicate :representationText, namespace: Namespaces::GlossaristNamespace, to: :representation_text
25
+ predicate :representationType,
26
+ namespace: Namespaces::GlossaristNamespace, to: :representation_type
27
+ predicate :representationRef,
28
+ namespace: Namespaces::GlossaristNamespace, to: :representation_ref
29
+ predicate :representationText,
30
+ namespace: Namespaces::GlossaristNamespace, to: :representation_text
26
31
 
27
32
  members :sources
28
33
  end
@@ -17,15 +17,22 @@ module Glossarist
17
17
  rdf do
18
18
  namespace Namespaces::GlossaristNamespace
19
19
 
20
- subject { |p| "concept/#{p.concept_id}/#{p.lang_code}/pronunciation/#{p.index}" }
20
+ subject do |p|
21
+ "concept/#{p.concept_id}/#{p.lang_code}/pronunciation/#{p.index}"
22
+ end
21
23
 
22
24
  types "gloss:Pronunciation"
23
25
 
24
- predicate :pronunciationContent, namespace: Namespaces::GlossaristNamespace, to: :content
25
- predicate :pronunciationLanguage, namespace: Namespaces::GlossaristNamespace, to: :language
26
- predicate :pronunciationScript, namespace: Namespaces::GlossaristNamespace, to: :script
27
- predicate :pronunciationCountry, namespace: Namespaces::GlossaristNamespace, to: :country
28
- predicate :pronunciationSystem, namespace: Namespaces::GlossaristNamespace, to: :system
26
+ predicate :pronunciationContent,
27
+ namespace: Namespaces::GlossaristNamespace, to: :content
28
+ predicate :pronunciationLanguage,
29
+ namespace: Namespaces::GlossaristNamespace, to: :language
30
+ predicate :pronunciationScript,
31
+ namespace: Namespaces::GlossaristNamespace, to: :script
32
+ predicate :pronunciationCountry,
33
+ namespace: Namespaces::GlossaristNamespace, to: :country
34
+ predicate :pronunciationSystem,
35
+ namespace: Namespaces::GlossaristNamespace, to: :system
29
36
  end
30
37
  end
31
38
  end
@@ -30,12 +30,16 @@ module Glossarist
30
30
 
31
31
  types "gloss:Reference"
32
32
 
33
- predicate :citationText, namespace: Namespaces::GlossaristNamespace, to: :text
34
- predicate :source, namespace: Namespaces::GlossaristNamespace, to: :source
33
+ predicate :citationText, namespace: Namespaces::GlossaristNamespace,
34
+ to: :text
35
+ predicate :source, namespace: Namespaces::GlossaristNamespace,
36
+ to: :source
35
37
  predicate :refId, namespace: Namespaces::GlossaristNamespace, to: :id
36
- predicate :version, namespace: Namespaces::GlossaristNamespace, to: :version
38
+ predicate :version, namespace: Namespaces::GlossaristNamespace,
39
+ to: :version
37
40
  predicate :link, namespace: Namespaces::GlossaristNamespace, to: :link
38
- predicate :refType, namespace: Namespaces::GlossaristNamespace, to: :ref_type
41
+ predicate :refType, namespace: Namespaces::GlossaristNamespace,
42
+ to: :ref_type
39
43
  predicate :urn, namespace: Namespaces::GlossaristNamespace, to: :urn
40
44
  predicate :term, namespace: Namespaces::GlossaristNamespace, to: :term
41
45
  members :locality, link: "gloss:hasLocality"
@@ -3,8 +3,9 @@
3
3
  module Glossarist
4
4
  module Rdf
5
5
  module Namespaces
6
- autoload :DctermsNamespace, "#{__dir__}/namespaces/dcterms_namespace"
7
- autoload :GlossaristNamespace, "#{__dir__}/namespaces/glossarist_namespace"
6
+ autoload :DctermsNamespace, "#{__dir__}/namespaces/dcterms_namespace"
7
+ autoload :GlossaristNamespace,
8
+ "#{__dir__}/namespaces/glossarist_namespace"
8
9
  autoload :IsoThesNamespace, "#{__dir__}/namespaces/iso_thes_namespace"
9
10
  autoload :OwlNamespace, "#{__dir__}/namespaces/owl_namespace"
10
11
  autoload :RdfNamespace, "#{__dir__}/namespaces/rdf_namespace"
@@ -18,7 +18,8 @@ module Glossarist
18
18
  broader_partitive: [Namespaces::IsoThesNamespace, :broaderPartitive],
19
19
  narrower_partitive: [Namespaces::IsoThesNamespace, :narrowerPartitive],
20
20
  broader_instantial: [Namespaces::IsoThesNamespace, :broaderInstantial],
21
- narrower_instantial: [Namespaces::IsoThesNamespace, :narrowerInstantial],
21
+ narrower_instantial: [Namespaces::IsoThesNamespace,
22
+ :narrowerInstantial],
22
23
  equivalent: [Namespaces::SkosNamespace, :exactMatch],
23
24
  close_match: [Namespaces::SkosNamespace, :closeMatch],
24
25
  broad_match: [Namespaces::SkosNamespace, :broadMatch],
@@ -30,17 +31,23 @@ module Glossarist
30
31
  superseded_by: [Namespaces::GlossaristNamespace, :supersededBy],
31
32
  compare: [Namespaces::GlossaristNamespace, :compares],
32
33
  contrast: [Namespaces::GlossaristNamespace, :contrasts],
33
- sequentially_related_concept: [Namespaces::GlossaristNamespace, :sequentiallyRelated],
34
- spatially_related_concept: [Namespaces::GlossaristNamespace, :spatiallyRelated],
35
- temporally_related_concept: [Namespaces::GlossaristNamespace, :temporallyRelated],
36
- related_concept_broader: [Namespaces::GlossaristNamespace, :relatedConceptBroader],
37
- related_concept_narrower: [Namespaces::GlossaristNamespace, :relatedConceptNarrower],
34
+ sequentially_related_concept: [Namespaces::GlossaristNamespace,
35
+ :sequentiallyRelated],
36
+ spatially_related_concept: [Namespaces::GlossaristNamespace,
37
+ :spatiallyRelated],
38
+ temporally_related_concept: [Namespaces::GlossaristNamespace,
39
+ :temporallyRelated],
40
+ related_concept_broader: [Namespaces::GlossaristNamespace,
41
+ :relatedConceptBroader],
42
+ related_concept_narrower: [Namespaces::GlossaristNamespace,
43
+ :relatedConceptNarrower],
38
44
  }.freeze
39
45
 
40
46
  DESIGNATION_REL_PREDICATES = {
41
47
  homograph: [Namespaces::GlossaristNamespace, :hasHomograph],
42
48
  false_friend: [Namespaces::GlossaristNamespace, :hasFalseFriend],
43
- abbreviated_form_for: [Namespaces::GlossaristNamespace, :abbreviatedFormFor],
49
+ abbreviated_form_for: [Namespaces::GlossaristNamespace,
50
+ :abbreviatedFormFor],
44
51
  short_form_for: [Namespaces::GlossaristNamespace, :shortFormFor],
45
52
  }.freeze
46
53
 
@@ -12,7 +12,8 @@ module Glossarist
12
12
  autoload :GlossLocality, "#{__dir__}/rdf/gloss_locality"
13
13
  autoload :GlossCitation, "#{__dir__}/rdf/gloss_citation"
14
14
  autoload :GlossConceptSource, "#{__dir__}/rdf/gloss_concept_source"
15
- autoload :GlossDetailedDefinition, "#{__dir__}/rdf/gloss_detailed_definition"
15
+ autoload :GlossDetailedDefinition,
16
+ "#{__dir__}/rdf/gloss_detailed_definition"
16
17
  autoload :GlossPronunciation, "#{__dir__}/rdf/gloss_pronunciation"
17
18
  autoload :GlossGrammarInfo, "#{__dir__}/rdf/gloss_grammar_info"
18
19
  autoload :GlossNonVerbalRep, "#{__dir__}/rdf/gloss_non_verbal_rep"
@@ -2,38 +2,92 @@
2
2
 
3
3
  module Glossarist
4
4
  class RegisterData < Lutaml::Model::Serializable
5
- attribute :data, :hash, default: -> { {} }
5
+ attribute :key, :string, default: -> { "register" }
6
+ attribute :shortname, :string
7
+ attribute :name, :string
8
+ attribute :description, :string
9
+ attribute :schema_version, :string
10
+ attribute :version, :string
11
+ attribute :owner, :string
12
+ attribute :languages, :string, collection: true
13
+ attribute :subregisters, :hash, default: -> { {} }
14
+ attribute :uri_prefix, :string
15
+ attribute :concept_uri_template, :string
16
+ attribute :homepage, :string
17
+ attribute :repository, :string
18
+ attribute :license, :string
19
+ attribute :tags, :string, collection: true
20
+ attribute :translations, :hash, default: -> { {} }
6
21
 
7
22
  key_value do
8
- map nil, to: :data, with: { from: :data_from, to: :data_to }
9
- end
10
-
11
- def self.from_file(path)
12
- from_yaml(File.read(path))
13
- rescue Errno::ENOENT
14
- nil
23
+ map %i[id shortname], to: :shortname
24
+ map "name", to: :name
25
+ map "description", to: :description
26
+ map "schema_version", to: :schema_version
27
+ map "version", to: :version
28
+ map "owner", to: :owner
29
+ map "languages", to: :languages
30
+ map "subregisters", to: :subregisters
31
+ map "uri_prefix", to: :uri_prefix
32
+ map "concept_uri_template", to: :concept_uri_template
33
+ map "homepage", to: :homepage
34
+ map "repository", to: :repository
35
+ map "license", to: :license
36
+ map "tags", to: :tags
37
+ map "translations", to: :translations
15
38
  end
16
39
 
17
40
  def [](key)
18
- data[key]
41
+ case key
42
+ when "shortname", "id" then shortname
43
+ when "name" then name
44
+ when "description" then description
45
+ when "schema_version" then schema_version
46
+ when "version" then version
47
+ when "owner" then owner
48
+ when "languages" then languages
49
+ when "subregisters" then subregisters
50
+ when "uri_prefix" then uri_prefix
51
+ when "concept_uri_template" then concept_uri_template
52
+ when "homepage" then homepage
53
+ when "repository" then repository
54
+ when "license" then license
55
+ when "tags" then tags
56
+ when "translations" then translations
57
+ end
19
58
  end
20
59
 
21
60
  def dig(*keys)
22
- data.dig(*keys)
61
+ return nil if keys.empty?
62
+
63
+ first = self[keys.first]
64
+ keys.length == 1 ? first : nil
23
65
  end
24
66
 
25
67
  def to_h
26
- data
68
+ h = {}
69
+ h["shortname"] = shortname if shortname
70
+ h["name"] = name if name
71
+ h["description"] = description if description
72
+ h["schema_version"] = schema_version if schema_version
73
+ h["version"] = version if version
74
+ h["owner"] = owner if owner
75
+ h["languages"] = languages if languages && !languages.empty?
76
+ h["subregisters"] = subregisters if subregisters && !subregisters.empty?
77
+ h["uri_prefix"] = uri_prefix if uri_prefix
78
+ h["concept_uri_template"] = concept_uri_template if concept_uri_template
79
+ h["homepage"] = homepage if homepage
80
+ h["repository"] = repository if repository
81
+ h["license"] = license if license
82
+ h["tags"] = tags if tags && !tags.empty?
83
+ h["translations"] = translations if translations && !translations.empty?
84
+ h
27
85
  end
28
86
 
29
- def data_from(model, value)
30
- model.data = value
31
- end
87
+ def self.from_file(path)
88
+ return nil unless File.exist?(path)
32
89
 
33
- def data_to(model, doc)
34
- model.data.each do |key, value|
35
- doc[key] = value
36
- end
90
+ from_yaml(File.read(path, encoding: "utf-8"))
37
91
  end
38
92
  end
39
93
  end
@@ -23,7 +23,10 @@ module Glossarist
23
23
  end
24
24
  end
25
25
 
26
- raise Error, "Migration chain too long or unresolvable" unless current == target
26
+ unless current == target
27
+ raise Error,
28
+ "Migration chain too long or unresolvable"
29
+ end
27
30
 
28
31
  concept.schema_version = target
29
32
  concept
@@ -53,8 +56,8 @@ module Glossarist
53
56
 
54
57
  LANG_CODES = Glossarist::LANG_CODES
55
58
 
56
- IEV_PATTERN = /\{\{([^,}]+),\s*IEV:([^}]+)\}\}/.freeze
57
- URN_PATTERN = /\{urn:iso:std:iso:(\d+):([^,}]+),([^}]+)\}/.freeze
59
+ IEV_PATTERN = /\{\{([^,}]+),\s*IEV:([^}]+)\}\}/
60
+ URN_PATTERN = /\{urn:iso:std:iso:(\d+):([^,}]+),([^}]+)\}/
58
61
 
59
62
  attr_reader :from_version, :to_version
60
63
 
@@ -149,7 +152,7 @@ module Glossarist
149
152
  src = lc.delete("authoritative_source")
150
153
  return if lc.key?("sources")
151
154
 
152
- sources = (src.is_a?(Array) ? src : [src]).map do |s|
155
+ sources = (src.is_a?(Array) ? src : [src]).filter_map do |s|
153
156
  next unless s.is_a?(Hash)
154
157
 
155
158
  origin = {}
@@ -166,7 +169,7 @@ module Glossarist
166
169
  end
167
170
  end
168
171
  entry
169
- end.compact
172
+ end
170
173
 
171
174
  lc["sources"] = sources if sources.any?
172
175
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Glossarist
4
+ class Section < Lutaml::Model::Serializable
5
+ attribute :id, :string
6
+ attribute :names, :hash
7
+ attribute :ordering, :string
8
+ attribute :children, Section, collection: true
9
+
10
+ key_value do
11
+ map :id, to: :id
12
+ map :names, to: :names
13
+ map :ordering, to: :ordering
14
+ map :children, to: :children
15
+ end
16
+
17
+ def name(lang = nil)
18
+ return names&.dig("eng") if lang.nil?
19
+
20
+ names&.dig(lang) || names&.dig("eng")
21
+ end
22
+
23
+ def descendant_by_id(target_id)
24
+ children&.each do |child|
25
+ return child if child.id == target_id
26
+
27
+ found = child.descendant_by_id(target_id)
28
+ return found if found
29
+ end
30
+ nil
31
+ end
32
+
33
+ def self.from_file(path)
34
+ return nil unless File.exist?(path)
35
+
36
+ from_yaml(File.read(path, encoding: "utf-8"))
37
+ end
38
+ end
39
+ end