Skip to content

Commit 0a44eb8

Browse files
authored
Merge pull request #262 from Simaris/258/create_resources_only_ones
Create resources only once
2 parents 86c1893 + 7901328 commit 0a44eb8

File tree

15 files changed

+133
-25
lines changed

15 files changed

+133
-25
lines changed

lib/jekyll/drops/rdf_resource.rb

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@ class RdfResource < RdfTerm
4242
#
4343
attr_accessor :page
4444

45-
##
46-
#
47-
#
48-
attr_reader :covered
49-
5045
##
5146
#
5247
#
@@ -55,7 +50,7 @@ class RdfResource < RdfTerm
5550
##
5651
#
5752
#
58-
def initialize(term, site = nil, page = nil, covered = false)
53+
def initialize(term, site = nil, page = nil)
5954
super(term)
6055
if(site.is_a?(Jekyll::Site))
6156
@site = site
@@ -64,7 +59,6 @@ def initialize(term, site = nil, page = nil, covered = false)
6459
@page = page
6560
end
6661
@subResources = {}
67-
@covered = covered
6862
@iri = term.to_s
6963
@blank = false
7064
begin
@@ -87,6 +81,20 @@ def ready?
8781
return (@site.is_a?(Jekyll::Site)||@page.is_a?(Jekyll::Page))
8882
end
8983

84+
##
85+
# Returns true if the resource base containes this resource
86+
#
87+
def covered
88+
return @covered unless @covered.nil?
89+
ask_exist = "ASK WHERE {{#{term.to_ntriples} ?p ?o}UNION{?s #{term.to_ntriples} ?o}UNION{?s ?p #{term.to_ntriples}}} "
90+
@covered = Jekyll::JekyllRdf::Helper::RdfHelper::sparql.query(ask_exist)
91+
if(@covered.instance_of? RDF::Literal::Boolean)
92+
@covered = @covered.true?
93+
else
94+
@covered = false || @covered #take care of compatibility with virtuoso
95+
end
96+
end
97+
9098
##
9199
# Return a list of Jekyll::JekyllRdf::Drops::RdfStatements whose subject, predicate or object is the RDF resource represented by the receiver
92100
#

lib/jekyll/drops/rdf_term.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def ===(other_obj)
9090
def self.build_term_drop(term, site, covered)
9191
case term
9292
when RDF::URI, RDF::Node
93-
return RdfResource.new(term, site, nil, covered)
93+
return Jekyll::JekyllRdf::Helper::RdfHelper.resources(term)
9494
when RDF::Literal
9595
return RdfLiteral.new(term)
9696
else

lib/jekyll/filters/rdf_get.rb

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,7 @@ def rdf_get(request_uri)
3636
request_uri = to_string_wrap(rdf_page_to_resource(request_uri))
3737
return unless valid_resource?(request_uri) && (!request_uri[0..1].eql? "_:")
3838
request_uri = rdf_resolve_prefix(request_uri)
39-
ask_exist = "ASK WHERE {{#{request_uri} ?p ?o}UNION{?s #{request_uri} ?o}UNION{?s ?p #{request_uri}}} "
40-
exists = Jekyll::JekyllRdf::Helper::RdfHelper::sparql.query(ask_exist)
41-
if(exists.instance_of? RDF::Literal::Boolean)
42-
exists = exists.true?
43-
else
44-
exists = false || exists #take care of compatibility with virtuoso
45-
end
46-
Jekyll::JekyllRdf::Drops::RdfResource.new(RDF::URI(request_uri[1..-2]), Jekyll::JekyllRdf::Helper::RdfHelper::site, Jekyll::JekyllRdf::Helper::RdfHelper::page, exists)
39+
Jekyll::JekyllRdf::Helper::RdfHelper.resources(request_uri[1..-2])
4740
end
4841
end
4942
end

lib/jekyll/filters/rdf_property.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def filter_statements(n_triples, predicate, inverse = false, lang = nil)
7474
query = "SELECT ?s WHERE{ ?s #{predicate} #{n_triples} }"
7575
result = client.query(query).map do |solution|
7676
subject = RDF::URI(solution.s)
77-
Jekyll::JekyllRdf::Drops::RdfResource.new(subject, Jekyll::JekyllRdf::Helper::RdfHelper::site, Jekyll::JekyllRdf::Helper::RdfHelper::page, true)
77+
Jekyll::JekyllRdf::Helper::RdfHelper.resources(subject)
7878
end
7979
else
8080
query = "SELECT ?o ?dt ?lit ?lang WHERE{ #{n_triples} #{predicate} ?o BIND(datatype(?o) AS ?dt) BIND(isLiteral(?o) AS ?lit) BIND(lang(?o) AS ?lang) #{lang_query} }"
@@ -95,7 +95,7 @@ def dist_literal_resource(solution)
9595
result = Jekyll::JekyllRdf::Drops::RdfLiteral.new(object)
9696
else
9797
object = RDF::URI(solution.o)
98-
result = Jekyll::JekyllRdf::Drops::RdfResource.new(object, Jekyll::JekyllRdf::Helper::RdfHelper::site, Jekyll::JekyllRdf::Helper::RdfHelper::page, true)
98+
result = Jekyll::JekyllRdf::Helper::RdfHelper.resources(object)
9999
end
100100
return result
101101
end

lib/jekyll/helper/rdf_general_helper.rb

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ module Helper
3232
module RdfHelper
3333
@@prefixes = {}
3434
@@usePage = false
35+
@@resources = {}
36+
@@site = nil
37+
@@page = nil
3538

3639
def self.sparql= sparql
3740
@@sparql = sparql
@@ -105,8 +108,32 @@ def self.pathiri= path
105108
def self.pathiri
106109
@@baseiri
107110
end
108-
end
109111

110-
end
111-
end
112-
end
112+
##
113+
# Constructs and returns a Jekyll::JekyllRdf::Drops::RdfResource. If the
114+
# uri refers to an already created resource, this method wont create a
115+
# new resource.
116+
#
117+
def self.resources uri
118+
resource = @@resources[uri.to_s]
119+
if resource.nil?
120+
resource = Jekyll::JekyllRdf::Drops::RdfResource.new(RDF::URI(uri.to_s), @@site, @@page)
121+
@@resources[uri.to_s] = resource
122+
end
123+
return resource
124+
end
125+
126+
##
127+
# resets RdfHelper to its initialization values
128+
#
129+
def self.reinitialize
130+
@@prefixes.clear
131+
@@usePage = false
132+
@@resources.clear
133+
@@site = nil
134+
@@page = nil
135+
end
136+
end #RdfHelper
137+
end #Helper
138+
end #JekyllRdf
139+
end #Jekyll

lib/jekyll/helper/rdf_generator_helper.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def parse_resources (resources)
2020
@pageResources={};
2121
@blanknodes=[]
2222
resources.each do |uri|
23-
resource = Jekyll::JekyllRdf::Drops::RdfResource.new(uri, nil, nil, true)
23+
resource = Jekyll::JekyllRdf::Helper::RdfHelper.resources(uri)
2424
if(uri.instance_of? RDF::URI)
2525
uriString = uri.to_s
2626
if((uriString.include? "#") && (uriString.index("#") < (uriString.length - 1))) #sorting in uris with a #
@@ -41,7 +41,7 @@ def parse_resources (resources)
4141
end
4242
# give parents to orphaned resources
4343
@pageResources.each_key{|key|
44-
@pageResources[key]['./'] = Jekyll::JekyllRdf::Drops::RdfResource.new(RDF::URI(key)) if @pageResources[key]['./'].nil?
44+
@pageResources[key]['./'] = Jekyll::JekyllRdf::Helper::RdfHelper.resources(key) if @pageResources[key]['./'].nil?
4545
}
4646
end
4747

test/RdfTestUtility.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ def setup_jekyll path
33
@source = path
44
config = Jekyll.configuration(YAML.load_file(File.join(@source, '_config.yml')).merge!({'source' => @source, 'destination' => File.join(@source, "_site")}))
55
site = Jekyll::Site.new(config)
6+
Jekyll::JekyllRdf::Helper::RdfHelper.reinitialize
67
site.process
78
end
89

910
def setup_site_jekyll path
1011
@source = path
1112
config = Jekyll.configuration(YAML.load_file(File.join(@source, '_config.yml')).merge!({'source' => @source, 'destination' => File.join(@source, "_site")}))
1213
@site = Jekyll::Site.new(config)
14+
Jekyll::JekyllRdf::Helper::RdfHelper.reinitialize
1315
@site.process
1416
end
1517
end

test/cases/filter/test_rdf_filters.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ def config
335335
end
336336

337337
should "return the input if the input is a resource" do
338-
resource = Jekyll::JekyllRdf::Drops::RdfResource.new("http://example.org/instance/resource", nil, nil, true)
338+
resource = Jekyll::JekyllRdf::Drops::RdfResource.new("http://example.org/instance/resource")
339339
assert_equal resource, rdf_get(resource)
340340
end
341341

test/cases/uniqueResources/Gemfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
source 'https://rubygems.org'
2+
group :jekyll_plugins do
3+
gem 'jekyll-rdf', :path => '../../../'
4+
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
baseurl: "/instance" # the subpath of your site, e.g. /blog
2+
url: "http://example.org/" # the base hostname & protocol for your site
3+
# Build settings
4+
markdown: kramdown
5+
plugins:
6+
- jekyll-rdf
7+
jekyll_rdf:
8+
path: "_data/knowledge-base.ttl"
9+
restriction: "SELECT ?resourceUri WHERE {?resourceUri ?p ?o}"
10+
default_template: "default"
11+

0 commit comments

Comments
 (0)