Sha256: cf7d350279f6ce970cd8aeec00816d5f9652084337baa4f6c88a77c8c649cce0

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

module RDF::N3::Algebra::Log
  ##
  # Takes a list of two strings creates a language-tagged literal.
  class LangLit < RDF::N3::Algebra::ListOperator
    NAME = :langlit
    URI = RDF::N3::Log.langlit

    ##
    # Reads the subject into the object.
    #
    # Returns nil if resource does not validate, given its position
    #
    # @param [RDF::N3::List] resource
    # @return [RDF::Term]
    def resolve(resource, position: :subject)
      case position
      when :subject
        RDF::Literal(as_literal(resource.first).to_s, language: resource.last.to_s.to_sym)
      when :object
        return nil unless resource.literal? || resource.variable?
        resource
      end
    end

    def validate(list)
      if super(list)
        if list.length != 2
          log_error(NAME) {"operand is not a list with two elements: #{list.to_sxp}"}
          false
        elsif !list.last.to_s.match?(/^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/)
          log_warn(NAME) {"second component of subject should be BCP47 language tag: #{list.last.to_sxp}"}
          false
        else
          true
        end
      else
        false
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rdf-n3-3.3.0 lib/rdf/n3/algebra/log/langlit.rb
rdf-n3-3.2.1 lib/rdf/n3/algebra/log/langlit.rb
rdf-n3-3.2.0 lib/rdf/n3/algebra/log/langlit.rb