require 'rdf' require 'rdf/turtle' class EarlFormatter def initialize(step_mother, io, options) output = RDF::Resource.new("") @graph = RDF::Graph.new @graph << [ CSVLINT, RDF.type, RDF::DOAP.Project ] @graph << [ CSVLINT, RDF.type, EARL.TestSubject ] @graph << [ CSVLINT, RDF.type, EARL.Software ] @graph << [ CSVLINT, RDF::DOAP.name, "csvlint" ] @graph << [ CSVLINT, RDF::DC.title, "csvlint" ] @graph << [ CSVLINT, RDF::DOAP.description, "CSV validator" ] @graph << [ CSVLINT, RDF::DOAP.homepage, RDF::Resource.new("https://github.com/theodi/csvlint.rb") ] @graph << [ CSVLINT, RDF::DOAP.license, RDF::Resource.new("https://raw.githubusercontent.com/theodi/csvlint.rb/master/LICENSE.md") ] @graph << [ CSVLINT, RDF::DOAP["programming-language"], "Ruby" ] @graph << [ CSVLINT, RDF::DOAP.implements, RDF::Resource.new("http://www.w3.org/TR/tabular-data-model/") ] @graph << [ CSVLINT, RDF::DOAP.implements, RDF::Resource.new("http://www.w3.org/TR/tabular-metadata/") ] @graph << [ CSVLINT, RDF::DOAP.developer, ODI ] @graph << [ CSVLINT, RDF::DOAP.maintainer, ODI ] @graph << [ CSVLINT, RDF::DOAP.documenter, ODI ] @graph << [ CSVLINT, RDF::FOAF.maker, ODI ] @graph << [ CSVLINT, RDF::DC.creator, ODI ] @graph << [ output, RDF::FOAF["primaryTopic"], CSVLINT ] @graph << [ output, RDF::DC.issued, DateTime.now ] @graph << [ output, RDF::FOAF.maker, ODI ] @graph << [ ODI, RDF.type, RDF::FOAF.Organization ] @graph << [ ODI, RDF.type, EARL.Assertor ] @graph << [ ODI, RDF::FOAF.name, "Open Data Institute" ] @graph << [ ODI, RDF::FOAF.homepage, "https://theodi.org/" ] end def scenario_name(keyword, name, file_colon_line, source_indent) @test = RDF::Resource.new("http://www.w3.org/2013/csvw/tests/#{name.split(" ")[0]}") end def after_steps(steps) passed = true steps.each do |s| passed = false unless s.status == :passed end a = RDF::Node.new @graph << [ a, RDF.type, EARL.Assertion ] @graph << [ a, EARL.assertedBy, ODI ] @graph << [ a, EARL.subject, CSVLINT ] @graph << [ a, EARL.test, @test ] @graph << [ a, EARL.mode, EARL.automatic ] r = RDF::Node.new @graph << [ a, EARL.result, r ] @graph << [ r, RDF.type, EARL.TestResult ] @graph << [ r, EARL.outcome, passed ? EARL.passed : EARL.failed ] @graph << [ r, RDF::DC.date, DateTime.now ] end def after_features(features) RDF::Writer.for(:ttl).open("csvlint-earl.ttl", { :prefixes => { "earl" => EARL }, :standard_prefixes => true, :canonicalize => true, :literal_shorthand => true }) do |writer| writer << @graph end end private EARL = RDF::Vocabulary.new("http://www.w3.org/ns/earl#") ODI = RDF::Resource.new("https://theodi.org/") CSVLINT = RDF::Resource.new("https://github.com/theodi/csvlint.rb") end