Class: Lutaml::Rdf::LinkedDataTransform

Inherits:
Transform
  • Object
show all
Defined in:
lib/lutaml/rdf/linked_data_transform.rb

Instance Method Summary collapse

Methods inherited from Transform

#each_member, #extract_language, #member_mapping_for, #resolve_single_type_uri, #resolve_subject_uri, #resolve_type_uris

Instance Method Details

#data_to_model(data, format, options = {}) ⇒ Object



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
# File 'lib/lutaml/rdf/linked_data_transform.rb', line 17

def data_to_model(data, format, options = {})
  mapping = extract_mapping(format, options)
  return model_class.new unless mapping

  hash = data.is_a?(Hash) ? data : {}

  if hash.key?("@graph") && hash["@graph"].is_a?(Array) && !hash["@graph"].empty?
    first = hash["@graph"].first
    hash = first.is_a?(Hash) ? first : {}
  end

  hash = strip_linked_data_keywords(hash)

  attrs = {}
  mapping.rdf_predicates.each do |rule|
    value = hash[rule.predicate_name]
    next if value.nil?

    attrs[rule.to] = if rule.kind == :lang_tagged && value.is_a?(Hash)
                       flatten_language_map(value)
                     else
                       value
                     end
  end

  build_instance(attrs, options)
end

#model_to_data(instance, format, options = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# File 'lib/lutaml/rdf/linked_data_transform.rb', line 6

def model_to_data(instance, format, options = {})
  mapping = extract_mapping(format, options)
  return {} unless mapping

  if mapping.rdf_members.any?
    build_graph_document(mapping, instance, format)
  else
    build_resource_object(mapping, instance, format)
  end
end