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 ('@index', '@language', '@index', '@set', '@type', '@id') (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



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

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 unless container_mapping.nil?
  @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

#as_setBoolean (readonly)

If container mapping was defined along with @set

Returns:

  • (Boolean)


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

def as_set
  @as_set
end

#container_mapping'@index', ...

Base container mapping, without @set

Returns:

  • ('@index', '@language', '@index', '@type', '@id')

    Container mapping



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

def container_mapping
  @container_mapping
end

#contextHash{String => Object}

Term-specific context

Returns:

  • (Hash{String => Object})


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

def context
  @context
end

#idRDF::URI

Returns IRI map.

Returns:

  • (RDF::URI)

    IRI map



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

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



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

def language_mapping
  @language_mapping
end

#nestString

Returns Term used for nest properties.

Returns:

  • (String)

    Term used for nest properties



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

def nest
  @nest
end

#prefix=(value) ⇒ Object (writeonly)

Indicate that term may be used as a prefix



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

def prefix=(value)
  @prefix = value
end

#reverse_propertyBoolean

Returns Reverse Property.

Returns:

  • (Boolean)

    Reverse Property



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

def reverse_property
  @reverse_property
end

#simpleBoolean

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

Returns:

  • (Boolean)


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

def simple
  @simple
end

#termString

Returns term name.

Returns:

  • (String)

    term name



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

def term
  @term
end

#type_mappingString

Returns Type mapping.

Returns:

  • (String)

    Type mapping



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

def type_mapping
  @type_mapping
end

Instance Method Details

#inspectObject



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

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



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

def prefix?; @prefix; end

#simple?Boolean

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

Returns:

  • (Boolean)

    simple



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

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})


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

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 = [container_mapping, ('@set' if as_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)


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

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' && as_set
      v = v ? [v, '@set'] : '@set'
    end
    defn << "#{acc}: #{v.inspect}" if v
  end
  defn.join(', ') + ")"
end