Class: Glossarist::Transforms::ConceptToGlossTransform

Inherits:
Object
  • Object
show all
Defined in:
lib/glossarist/transforms/concept_to_gloss_transform.rb

Overview

Transforms Glossarist domain model objects into ontology-faithful RDF using lutaml-model serializable view classes.

Creates GlossConcept/GlossLocalizedConcept/GlossDesignation instances and delegates Turtle/JSON-LD serialization to lutaml-model.

Constant Summary collapse

GLOSS =
Rdf::Namespaces::GlossaristNamespace.uri
SKOS =
Rdf::Namespaces::SkosNamespace.uri
XL =
Rdf::Namespaces::SkosxlNamespace.uri
ISO =
Rdf::Namespaces::IsoThesNamespace.uri
DCT =
Rdf::Namespaces::DctermsNamespace.uri
RDF_NS =
Rdf::Namespaces::RdfNamespace.uri
REL_PROPERTY_MAP =
Rdf::RelationshipPredicates::ALL_REL_PREDICATES
.transform_values { |ns, name| ns[name] }
.transform_keys(&:to_s)
.freeze
DESIGNATION_BUILDERS =

Maps each Designation subclass to the method that builds its RDF counterpart. Lookup is by exact class — a Designation instance is always exactly one of these classes (the STI pattern in Designation::Base#of_yaml enforces this). Adding a new Designation subclass means adding one entry here, not editing a case/when.

{
  Designation::Abbreviation => :build_gloss_abbreviation,
  Designation::Expression => :build_gloss_expression,
  Designation::GraphicalSymbol => :build_gloss_graphical_symbol,
  Designation::LetterSymbol => :build_gloss_letter_symbol,
  Designation::Symbol => :build_gloss_symbol,
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(managed_concept, options = {}) ⇒ ConceptToGlossTransform

Returns a new instance of ConceptToGlossTransform.



46
47
48
49
# File 'lib/glossarist/transforms/concept_to_gloss_transform.rb', line 46

def initialize(managed_concept, options = {})
  @concept = managed_concept
  @options = options
end

Class Method Details

.transform(managed_concept, options = {}) ⇒ Object



36
37
38
# File 'lib/glossarist/transforms/concept_to_gloss_transform.rb', line 36

def self.transform(managed_concept, options = {})
  new(managed_concept, options).build
end

.transform_document(concepts, figures: [], tables: [], formulas: [], **options) ⇒ Object



40
41
42
43
44
# File 'lib/glossarist/transforms/concept_to_gloss_transform.rb', line 40

def self.transform_document(concepts, figures: [], tables: [],
                            formulas: [], **options)
  new(nil, options).build_document(concepts, figures: figures,
                                             tables: tables, formulas: formulas)
end

Instance Method Details

#buildObject



51
52
53
# File 'lib/glossarist/transforms/concept_to_gloss_transform.rb', line 51

def build
  build_gloss_concept(concept)
end

#build_document(concepts, figures: [], tables: [], formulas: []) ⇒ Object



55
56
57
58
59
60
61
62
63
64
# File 'lib/glossarist/transforms/concept_to_gloss_transform.rb', line 55

def build_document(concepts, figures: [], tables: [], formulas: [])
  gloss_concepts = concepts.map { |c| build_gloss_concept(c) }
  doc = Rdf::GlossDocument.new(
    concepts: gloss_concepts,
    figures: figures.map { |f| build_gloss_figure(f) },
    tables: tables.map { |t| build_gloss_table(t) },
    formulas: formulas.map { |f| build_gloss_formula(f) },
  )
  Rdf::GlossDocument.to_turtle(doc)
end

#to_jsonl_lineObject



102
103
104
105
106
107
# File 'lib/glossarist/transforms/concept_to_gloss_transform.rb', line 102

def to_jsonl_line
  return "" unless @concept

  gc = build_gloss_concept(@concept)
  Rdf::GlossConcept.to_jsonld(gc)
end

#to_jsonld(concepts_or_concept = nil, figures: [], tables: [], formulas: []) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/glossarist/transforms/concept_to_gloss_transform.rb', line 80

def to_jsonld(concepts_or_concept = nil, figures: [], tables: [],
              formulas: [])
  if concepts_or_concept.is_a?(Array)
    gloss_concepts = concepts_or_concept.map do |c|
      build_gloss_concept(c)
    end
    doc = Rdf::GlossDocument.new(
      concepts: gloss_concepts,
      figures: figures.map { |f| build_gloss_figure(f) },
      tables: tables.map { |t| build_gloss_table(t) },
      formulas: formulas.map { |f| build_gloss_formula(f) },
    )
    Rdf::GlossDocument.to_jsonld(doc)
  else
    target = concepts_or_concept || @concept
    return "" unless target

    gc = build_gloss_concept(target)
    Rdf::GlossConcept.to_jsonld(gc)
  end
end

#to_turtle(concepts_or_concept = nil, figures: [], tables: [], formulas: []) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/glossarist/transforms/concept_to_gloss_transform.rb', line 66

def to_turtle(concepts_or_concept = nil, figures: [], tables: [],
              formulas: [])
  if concepts_or_concept.is_a?(Array)
    build_document(concepts_or_concept, figures: figures,
                                        tables: tables, formulas: formulas)
  else
    target = concepts_or_concept || @concept
    return "" unless target

    gc = build_gloss_concept(target)
    Rdf::GlossConcept.to_turtle(gc)
  end
end