Class: RDF::N3::Algebra::Log::Semantics

Inherits:
ResourceOperator
  • Object
show all
Defined in:
lib/rdf/n3/algebra/log/semantics.rb

Overview

The log:semantics of a document is the formula. achieved by parsing representation of the document. For a document in Notation3, log:semantics is the log:parsedAsN3 of the log:contents of the document. For a document in RDF/XML, it is parsed according to the RDF/XML specification to yield an RDF formula (a subclass of N3 log:Formula).

[Aside: Philosophers will be distracted here into worrying about the meaning of meaning. At least we didn’t call this function “meaning”! In as much as N3 is used as an interlingua for interoperability for different systems, this for an N3 based system is the meaning expressed by a document.]

(Cwm knows how to go get a document and parse N3 and RDF/XML it in order to evaluate this. Other languages for web documents may be defined whose N3 semantics are therefore also calculable, and so they could be added in due course. See for example GRDDL, RDFa, etc)

Constant Summary collapse

NAME =
:logSemantics
URI =
RDF::N3::Log.semantics

Instance Attribute Summary

Attributes included from Enumerable

#existentials, #universals

Instance Method Summary collapse

Methods inherited from ResourceOperator

#as_literal, #execute, #input_operand, #valid?

Methods included from Builtin

#each, #evaluate, #hash, #input_operand, #rank, #to_uri

Instance Method Details

#resolve(resource, position: :subject) ⇒ RDF::Term

Parses the subject into a new formula.

Returns nil if resource does not validate, given its position

Parameters:

Returns:



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rdf/n3/algebra/log/semantics.rb', line 19

def resolve(resource, position: :subject)
  case position
  when :subject
    return nil unless resource.literal? || resource.uri?
    begin
      repo = RDF::N3::Repository.new
      repo << RDF::Reader.open(resource, **@options.merge(list_terms: true, base_uri: resource, logger: false))
      content_hash = repo.statements.hash # used as name of resulting formula
      form = RDF::N3::Algebra::Formula.from_enumerable(repo, graph_name: RDF::Node.intern(content_hash))
      log_debug(NAME) {"form hash (#{resource}): #{form.hash}"}
      form
    rescue IOError, RDF::ReaderError => e
      log_error(NAME) {"error loading #{resource}: #{e}"}
      nil
    end
  when :object
    return nil unless resource.literal? || resource.variable?
    resource
  end
end