Class: JSON::LD::Context::TermDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/json/ld/context.rb

Overview

Term Definitions specify how properties and values have to be interpreted as well as the current vocabulary mapping and the default language

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(term, id: nil, type_mapping: nil, container_mapping: nil, language_mapping: nil, reverse_property: false, nest: nil, simple: false, prefix: nil, context: nil) ⇒ TermDefinition

Create a new Term Mapping with an ID

Parameters:

  • term (String)
  • id (String) (defaults to: nil)
  • type_mapping (String) (defaults to: nil)

    Type mapping

  • container_mapping (Array<'@index', '@language', '@index', '@set', '@type', '@id', '@graph'>) (defaults to: nil)
  • language_mapping (String) (defaults to: nil)

    Language mapping of term, ‘false` is used if there is explicitly no language mapping for this term

  • reverse_property (Boolean) (defaults to: false)
  • nest (String) (defaults to: nil)

    term used for nest properties

  • simple (Boolean) (defaults to: false)

    This is a simple term definition, not an expanded term definition

  • prefix (Boolean) (defaults to: nil)

    Term may be used as a prefix



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/json/ld/context.rb', line 86

def initialize(term,
              id: nil,
              type_mapping: nil,
              container_mapping: nil,
              language_mapping: nil,
              reverse_property: false,
              nest: nil,
              simple: false,
              prefix: nil,
              context: nil)
  @term                   = term
  @id                     = id.to_s           unless id.nil?
  @type_mapping           = type_mapping.to_s unless type_mapping.nil?
  self.container_mapping  = container_mapping
  @language_mapping       = language_mapping  unless language_mapping.nil?
  @reverse_property       = reverse_property
  @nest                   = nest              unless nest.nil?
  @simple                 = simple
  @prefix                 = prefix            unless prefix.nil?
  @context                = context           unless context.nil?
end

Instance Attribute Details

#container_mappingObject

Base container mapping, without @set



42
43
44
# File 'lib/json/ld/context.rb', line 42

def container_mapping
  @container_mapping
end

#contextHash{String => Object}

Term-specific context

Returns:

  • (Hash{String => Object})


63
64
65
# File 'lib/json/ld/context.rb', line 63

def context
  @context
end

#idRDF::URI

Returns IRI map.

Returns:



32
33
34
# File 'lib/json/ld/context.rb', line 32

def id
  @id
end

#language_mappingString

Language mapping of term, ‘false` is used if there is explicitly no language mapping for this term.

Returns:

  • (String)

    Language mapping



49
50
51
# File 'lib/json/ld/context.rb', line 49

def language_mapping
  @language_mapping
end

#nestString

Returns Term used for nest properties.

Returns:

  • (String)

    Term used for nest properties



45
46
47
# File 'lib/json/ld/context.rb', line 45

def nest
  @nest
end

#prefix=(value) ⇒ Object (writeonly)

Indicate that term may be used as a prefix



59
60
61
# File 'lib/json/ld/context.rb', line 59

def prefix=(value)
  @prefix = value
end

#reverse_propertyBoolean

Returns Reverse Property.

Returns:

  • (Boolean)

    Reverse Property



52
53
54
# File 'lib/json/ld/context.rb', line 52

def reverse_property
  @reverse_property
end

#simpleBoolean

This is a simple term definition, not an expanded term definition

Returns:

  • (Boolean)


56
57
58
# File 'lib/json/ld/context.rb', line 56

def simple
  @simple
end

#termString

Returns term name.

Returns:

  • (String)

    term name



35
36
37
# File 'lib/json/ld/context.rb', line 35

def term
  @term
end

#type_mappingString

Returns Type mapping.

Returns:

  • (String)

    Type mapping



38
39
40
# File 'lib/json/ld/context.rb', line 38

def type_mapping
  @type_mapping
end

Instance Method Details

#as_set?Boolean

If container mapping was defined along with @set

Returns:

  • (Boolean)


178
# File 'lib/json/ld/context.rb', line 178

def as_set?; @as_set || false; end

#inspectObject



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# File 'lib/json/ld/context.rb', line 180

def inspect
  v = %w([TD)
  v << "id=#{@id}"
  v << "term=#{@term}"
  v << "rev" if reverse_property
  v << "container=#{container_mapping}" if container_mapping
  v << "as_set=#{as_set?.inspect}"
  v << "lang=#{language_mapping.inspect}" unless language_mapping.nil?
  v << "type=#{type_mapping}" unless type_mapping.nil?
  v << "nest=#{nest.inspect}" unless nest.nil?
  v << "simple=true" if @simple
  v << "prefix=#{@prefix.inspect}" unless @prefix.nil?
  v << "has-context" unless context.nil?
  v.join(" ") + "]"
end

#prefix?Boolean

This is an appropriate term to use as the prefix of a compact IRI

Returns:

  • (Boolean)

    simple



71
# File 'lib/json/ld/context.rb', line 71

def prefix?; @prefix; end

#simple?Boolean

This is a simple term definition, not an expanded term definition

Returns:

  • (Boolean)

    simple



67
# File 'lib/json/ld/context.rb', line 67

def simple?; simple; end

#to_context_definition(context) ⇒ String, Hash{String => Array[String], String}

Output Hash or String definition for this definition considering @language and @vocab

Parameters:

Returns:

  • (String, Hash{String => Array[String], String})


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
# File 'lib/json/ld/context.rb', line 123

def to_context_definition(context)
  cid = if context.vocab && id.start_with?(context.vocab)
    # Nothing to return unless it's the same as the vocab
    id == context.vocab ? context.vocab : id.to_s[context.vocab.length..-1]
  else
    # Find a term to act as a prefix
    iri, prefix = context.iri_to_term.detect {|i,p| id.to_s.start_with?(i.to_s)}
    iri && iri != id ? "#{prefix}:#{id.to_s[iri.length..-1]}" : id
  end

  if simple?
     cid.to_s unless cid == term && context.vocab
  else
    defn = {}
    defn[reverse_property ? '@reverse' : '@id'] = cid.to_s unless cid == term && !reverse_property
    if type_mapping
      defn['@type'] = if KEYWORDS.include?(type_mapping)
        type_mapping
      else
        context.compact_iri(type_mapping, vocab: true)
      end
    end

    cm = (Array(container_mapping) + (as_set? ? %w(@set) : [])).compact
    cm = cm.first if cm.length == 1
    defn['@container'] = cm unless cm.empty?
    # Language set as false to be output as null
    defn['@language'] = (@language_mapping ? @language_mapping : nil) unless @language_mapping.nil?
    defn['@context'] = @context if @context
    defn['@nest'] = @nest if @nest
    defn['@prefix'] = @prefix unless @prefix.nil? || (context.processingMode || 'json-ld-1.0') == 'json-ld-1.0'
    defn
  end
end

#to_rbString

Turn this into a source for a new instantiation FIXME: context serialization

Returns:

  • (String)


162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/json/ld/context.rb', line 162

def to_rb
  defn = [%(TermDefinition.new\(#{term.inspect})]
  %w(id type_mapping container_mapping language_mapping reverse_property nest simple prefix context).each do |acc|
    v = instance_variable_get("@#{acc}".to_sym)
    v = v.to_s if v.is_a?(RDF::Term)
    if acc == 'container_mapping'
      v.concat(%w(@set)) if as_set?
      v = v.first if v.length <= 1
    end
    defn << "#{acc}: #{v.inspect}" if v
  end
  defn.join(', ') + ")"
end