65 lines
1.8 KiB
Ruby
Executable file
65 lines
1.8 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
|
|
require 'sparql/client'
|
|
require 'rdf'
|
|
require 'pry'
|
|
|
|
found_one = File.open('found_countries_one.ttl', 'w')
|
|
found_zero = File.open('found_countries_zero.ttl', 'w')
|
|
found_many = File.open('found_countries_many.ttl', 'w')
|
|
|
|
wikidata = SPARQL::Client.new('https://query.wikidata.org/sparql')
|
|
|
|
# Vocabularies
|
|
wd = RDF::Vocabulary.new('http://www.wikidata.org/entity/')
|
|
wdt = RDF::Vocabulary.new('http://www.wikidata.org/prop/direct/')
|
|
rdfs = RDF::Vocabulary.new('http://www.w3.org/2000/01/rdf-schema#')
|
|
|
|
# binding.pry
|
|
|
|
# query = wikidata.select.where([:s, :p, :o]).limit(10)
|
|
|
|
# query.each_solution do |solution|
|
|
# p solution
|
|
# end
|
|
|
|
require_relative 'database'
|
|
|
|
COUNTRIES = {}
|
|
|
|
DB[:location].each do |location|
|
|
unless location[:Country].nil? or COUNTRIES.include? location[:Country]
|
|
COUNTRIES[location[:Country]] = {
|
|
id: "region:#{location[:country]}"
|
|
}
|
|
end
|
|
end
|
|
|
|
def country_definition(country_name_literal, wd_solutions)
|
|
wd_ids = wd_solutions.map do |solution|
|
|
country_uri = solution[:country].to_s
|
|
get_wd_name(country_uri)
|
|
end
|
|
"country:#{toName(country_name_literal.to_s)} a tm:Country ;\n" \
|
|
" rdfs:label #{country_name_literal.to_ntriples} ;\n" \
|
|
" tm:wikidataID #{wd_ids.join(' , ')} .\n"
|
|
end
|
|
|
|
COUNTRIES.each do |country_name, country_attrs|
|
|
p country_name
|
|
country_name_literal = RDF::Literal.new(country_name, language: :en)
|
|
query = wikidata.select
|
|
.where([:country, rdfs.label, country_name_literal])
|
|
.where([:country, wdt.P31, wd.Q6256])
|
|
solutions = query.solutions
|
|
case solutions.size
|
|
when 0
|
|
found_zero << "#{country_name}\n"
|
|
when 1
|
|
found_one << country_definition(country_name_literal, solutions)
|
|
else
|
|
found_many << country_definition(country_name_literal, solutions)
|
|
end
|
|
sleep(1)
|
|
end
|
|
|