jekyll-rdf 3.0.0.pre.develop.334 → 3.0.0.pre.develop.343
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/jekyll-rdf.rb +5 -3
- data/lib/jekyll/drops/rdf_literal.rb +12 -10
- data/lib/jekyll/drops/rdf_resource.rb +213 -210
- data/lib/jekyll/drops/rdf_resource_class.rb +47 -45
- data/lib/jekyll/drops/rdf_statement.rb +32 -30
- data/lib/jekyll/drops/rdf_term.rb +67 -64
- data/lib/jekyll/filters/rdf_collection.rb +13 -14
- data/lib/jekyll/filters/rdf_container.rb +26 -26
- data/lib/jekyll/filters/rdf_get.rb +13 -13
- data/lib/jekyll/filters/rdf_property.rb +75 -76
- data/lib/jekyll/filters/rdf_resolve_prefix.rb +18 -16
- data/lib/jekyll/filters/rdf_sparql_query.rb +41 -42
- data/lib/jekyll/helper/rdf_class_extraction.rb +51 -0
- data/lib/jekyll/helper/rdf_general_helper.rb +26 -22
- data/lib/jekyll/helper/rdf_generator_helper.rb +124 -0
- data/lib/jekyll/helper/rdf_page_helper.rb +59 -0
- data/lib/jekyll/hooks/rdf_page_pointer.rb +1 -1
- data/lib/jekyll/rdf_main_generator.rb +3 -3
- data/lib/jekyll/rdf_page_data.rb +1 -1
- data/lib/jekyll/rdf_template_mapper.rb +1 -1
- metadata +6 -6
- data/lib/jekyll/rdf_class_extraction.rb +0 -47
- data/lib/jekyll/rdf_generator_helper.rb +0 -120
- data/lib/jekyll/rdf_page_helper.rb +0 -54
@@ -0,0 +1,59 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module JekyllRdf
|
3
|
+
module Helper
|
4
|
+
module RdfPageHelper
|
5
|
+
private
|
6
|
+
##
|
7
|
+
# sets @template to the path of a fitting layout
|
8
|
+
# it will set @complete to false if no fitting template is found
|
9
|
+
# * +resource+ - the resource that will be mapped to a template
|
10
|
+
# * +mapper+ - the mapper that provides the resource mappings
|
11
|
+
def map_template(resource, mapper)
|
12
|
+
@template = mapper.map(resource)
|
13
|
+
if(@template.nil?)
|
14
|
+
Jekyll.logger.warn("Resource #{resource} not rendered: No fitting template or default template found.")
|
15
|
+
@complete = false
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
##
|
20
|
+
# loads the data from the yaml-frontmatter and extends page.data with three key value pairs:
|
21
|
+
# -title -> contains the resource.iri
|
22
|
+
# -rdf -> contains the resource itself
|
23
|
+
# -template -> contains the path to the currenly used template
|
24
|
+
def load_data(site)
|
25
|
+
self.read_yaml(File.join(@base, '_layouts'), @template)
|
26
|
+
self.data['title'] = @resource.iri
|
27
|
+
self.data['rdf'] = @resource
|
28
|
+
self.data['template'] = @template
|
29
|
+
if(!@resource.subResources.nil?)
|
30
|
+
self.data['sub_rdf'] = @resource.subResources.values
|
31
|
+
self.data['sub_rdf'].each { |res|
|
32
|
+
res.page = self
|
33
|
+
res.site = site
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# loads the prefix data passed in the layout yaml-frontmatter into page.data["rdf_prefixes"] and page.data["rdf_prefix_map"]
|
40
|
+
def load_prefixes
|
41
|
+
if !self.data["rdf_prefix_path"].nil?
|
42
|
+
begin
|
43
|
+
prefix_file=File.new(File.join(@base, 'rdf-data', self.data["rdf_prefix_path"].strip)).readlines
|
44
|
+
self.data["rdf_prefixes"] = prefix_file.join(" ")
|
45
|
+
self.data["rdf_prefix_map"] = Hash[ *(prefix_file.collect { |v|
|
46
|
+
arr = v.split(":",2)
|
47
|
+
[arr[0][7..-1].strip, arr[1].strip[1..-2]]
|
48
|
+
}.flatten)]
|
49
|
+
rescue Errno::ENOENT => ex
|
50
|
+
Jekyll.logger.error("context: #{@resource} template: #{@template} file not found: #{File.join(@base, 'rdf-data', self.data["rdf_prefix_path"])}")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
@@ -32,7 +32,7 @@ module Jekyll
|
|
32
32
|
class RdfMainGenerator < Jekyll::Generator
|
33
33
|
safe true
|
34
34
|
priority :highest
|
35
|
-
include Jekyll::RdfGeneratorHelper
|
35
|
+
include Jekyll::JekyllRdf::Helper::RdfGeneratorHelper
|
36
36
|
|
37
37
|
##
|
38
38
|
# #generate performs the enrichment of a Jekyll::Site with rdf triples
|
@@ -52,8 +52,8 @@ module Jekyll
|
|
52
52
|
graph = RDF::Graph.load(@config['path'])
|
53
53
|
sparql = SPARQL::Client.new(graph)
|
54
54
|
|
55
|
-
Jekyll::RdfHelper::sparql = sparql
|
56
|
-
Jekyll::RdfHelper::site = site
|
55
|
+
Jekyll::JekyllRdf::Helper::RdfHelper::sparql = sparql
|
56
|
+
Jekyll::JekyllRdf::Helper::RdfHelper::site = site
|
57
57
|
|
58
58
|
# restrict RDF graph with restriction
|
59
59
|
resources = extract_resources(@config['restriction'], @config['include_blank'], sparql)
|
data/lib/jekyll/rdf_page_data.rb
CHANGED
@@ -29,7 +29,7 @@ module Jekyll
|
|
29
29
|
# JekyllRdf::RdfPageData creates pages for each RDF resource using a given template
|
30
30
|
#
|
31
31
|
class RdfPageData < Jekyll::Page
|
32
|
-
include Jekyll::RdfPageHelper
|
32
|
+
include Jekyll::JekyllRdf::Helper::RdfPageHelper
|
33
33
|
attr_reader :complete
|
34
34
|
|
35
35
|
##
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-rdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.pre.develop.
|
4
|
+
version: 3.0.0.pre.develop.343
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elias Saalmann
|
@@ -17,7 +17,7 @@ authors:
|
|
17
17
|
autorequire:
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
|
-
date: 2017-
|
20
|
+
date: 2017-12-05 00:00:00.000000000 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: linkeddata
|
@@ -172,13 +172,13 @@ files:
|
|
172
172
|
- lib/jekyll/filters/rdf_property.rb
|
173
173
|
- lib/jekyll/filters/rdf_resolve_prefix.rb
|
174
174
|
- lib/jekyll/filters/rdf_sparql_query.rb
|
175
|
+
- lib/jekyll/helper/rdf_class_extraction.rb
|
175
176
|
- lib/jekyll/helper/rdf_general_helper.rb
|
177
|
+
- lib/jekyll/helper/rdf_generator_helper.rb
|
178
|
+
- lib/jekyll/helper/rdf_page_helper.rb
|
176
179
|
- lib/jekyll/hooks/rdf_page_pointer.rb
|
177
|
-
- lib/jekyll/rdf_class_extraction.rb
|
178
|
-
- lib/jekyll/rdf_generator_helper.rb
|
179
180
|
- lib/jekyll/rdf_main_generator.rb
|
180
181
|
- lib/jekyll/rdf_page_data.rb
|
181
|
-
- lib/jekyll/rdf_page_helper.rb
|
182
182
|
- lib/jekyll/rdf_template_mapper.rb
|
183
183
|
homepage: https://github.com/white-gecko/jekyll-rdf
|
184
184
|
licenses:
|
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
200
|
version: 1.3.1
|
201
201
|
requirements: []
|
202
202
|
rubyforge_project:
|
203
|
-
rubygems_version: 2.7.
|
203
|
+
rubygems_version: 2.7.3
|
204
204
|
signing_key:
|
205
205
|
specification_version: 4
|
206
206
|
summary: Hypertext Publication System for Templated Resource Rendering
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module Jekyll
|
2
|
-
module RdfClassExtraction
|
3
|
-
private
|
4
|
-
def search_for_classes(sparql)
|
5
|
-
class_recognition_query = "SELECT DISTINCT ?resourceUri WHERE{ {?resourceUri <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o} UNION{ ?s <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?resourceUri} UNION{ ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?resourceUri}}"
|
6
|
-
class_search_results = sparql.query(class_recognition_query).map{ |sol| sol[:resourceUri] }.reject do |s| # Reject literals
|
7
|
-
s.class <= RDF::Literal
|
8
|
-
end.select do |s| # Select URIs and blank nodes in case of include_blank
|
9
|
-
s.class <=RDF::Node || s.class <= RDF::URI
|
10
|
-
end
|
11
|
-
return class_search_results
|
12
|
-
end
|
13
|
-
|
14
|
-
def create_resource_class(class_search_results, sparql)
|
15
|
-
class_search_results.each do |uri|
|
16
|
-
@classResources[uri.to_s]=Jekyll::Drops::RdfResourceClass.new(uri, sparql)
|
17
|
-
end
|
18
|
-
|
19
|
-
@classResources.each{|key, value|
|
20
|
-
value.find_direct_subclasses.each{|s|
|
21
|
-
value.add_subclass(@classResources[s])
|
22
|
-
}
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
def assign_class_templates(classes_to_templates)
|
27
|
-
if(classes_to_templates.is_a?(Hash))
|
28
|
-
@classResources.default = StopObject.new
|
29
|
-
classes_to_templates.each{|key, value|
|
30
|
-
@classResources[key].propagate_template(value,0)
|
31
|
-
@classResources[key].traverse_hierarchy_value(0);
|
32
|
-
}
|
33
|
-
@classResources.default = nil
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class StopObject #unfortunately next does not work in this setup, it avoids to have "if" in every iteration
|
38
|
-
def propagate_template(template, lock)
|
39
|
-
return
|
40
|
-
end
|
41
|
-
|
42
|
-
def traverse_hierarchy_value(predecessorHierarchyValue)
|
43
|
-
return
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
module Jekyll
|
2
|
-
module RdfGeneratorHelper
|
3
|
-
private
|
4
|
-
def prepare_pages (site, mapper)
|
5
|
-
@pageResources.each{|uri, entry|
|
6
|
-
resource = entry.delete('./')
|
7
|
-
resource.subResources = entry
|
8
|
-
create_page(site, resource, mapper, @global_config)
|
9
|
-
}
|
10
|
-
|
11
|
-
@blanknodes.each{|resource|
|
12
|
-
create_page(site, resource, mapper, @global_config)
|
13
|
-
}
|
14
|
-
end
|
15
|
-
|
16
|
-
def parse_resources (resources)
|
17
|
-
@pageResources={}
|
18
|
-
@blanknodes=[]
|
19
|
-
resources.each do |uri|
|
20
|
-
resource = Jekyll::Drops::RdfResource.new(uri, nil, nil, true)
|
21
|
-
if(uri.instance_of? RDF::URI)
|
22
|
-
uriString = uri.to_s
|
23
|
-
if((uriString.include? "#") && (uriString.index("#") < (uriString.length - 1))) #sorting in uris with a #
|
24
|
-
preSufUri = uriString.split("#")
|
25
|
-
if(!@pageResources.key? preSufUri[0])
|
26
|
-
@pageResources[preSufUri[0]] = {}
|
27
|
-
end
|
28
|
-
@pageResources[preSufUri[0]][preSufUri[1]] = resource
|
29
|
-
else #sorting in uris without a #
|
30
|
-
if(!@pageResources.key? uriString)
|
31
|
-
@pageResources[uriString]={}
|
32
|
-
end
|
33
|
-
@pageResources[uriString]['./'] = resource
|
34
|
-
end
|
35
|
-
elsif(uri.instance_of? RDF::Node)
|
36
|
-
@blanknodes << resource
|
37
|
-
end
|
38
|
-
|
39
|
-
# give parents to orphaned resources
|
40
|
-
@pageResources.each_key{|key|
|
41
|
-
@pageResources[key]['./'] = Jekyll::Drops::RdfResource.new(RDF::URI(key)) if @pageResources[key]['./'].nil?
|
42
|
-
}
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def load_config (site)
|
47
|
-
begin
|
48
|
-
@config = site.config.fetch('jekyll_rdf')
|
49
|
-
rescue KeyError => e
|
50
|
-
Jekyll.logger.error("You've included Jekyll-RDF, but it is not configured. Aborting the jekyll-rdf plugin.")
|
51
|
-
return false
|
52
|
-
end
|
53
|
-
|
54
|
-
@global_config = Jekyll.configuration({})
|
55
|
-
|
56
|
-
#small fix because global_config doesn't work in a test enviorment
|
57
|
-
if(!@global_config.key? "url")
|
58
|
-
@global_config["url"] = site.config["url"]
|
59
|
-
@global_config["baseurl"] = site.config["baseurl"]
|
60
|
-
end
|
61
|
-
return true
|
62
|
-
end
|
63
|
-
##
|
64
|
-
# #extract_resources returns resources from an RDF Sparql endpoint.
|
65
|
-
#
|
66
|
-
# Literals are omitted.
|
67
|
-
# Blank nodes are only returned if +include_blank+ is true.
|
68
|
-
# Duplicate nodes are removed.
|
69
|
-
#
|
70
|
-
# * +selection+ - choose any of the following:
|
71
|
-
# nil ::
|
72
|
-
# no restrictions, return subjects, predicates, objects
|
73
|
-
# "subjects" ::
|
74
|
-
# return only subjects
|
75
|
-
# "predicates" ::
|
76
|
-
# return only predicates
|
77
|
-
# "objects" ::
|
78
|
-
# return only objects
|
79
|
-
# Otherwise ::
|
80
|
-
# consider +selection+ to be a SPARQL query and return answer set to this SPARQL query
|
81
|
-
# * +include_blank+ - If true, blank nodes are also returned, otherwise blank nodes are omitted
|
82
|
-
# * +sparql+ - The SPARQL client to run queries against
|
83
|
-
#
|
84
|
-
def extract_resources(selection, include_blank, sparql)
|
85
|
-
|
86
|
-
case selection
|
87
|
-
when nil # Config parameter not present
|
88
|
-
object_resources = extract_resources("objects", include_blank, sparql)
|
89
|
-
subject_resources = extract_resources("subjects", include_blank, sparql)
|
90
|
-
predicate_resources = extract_resources("predicates", include_blank, sparql)
|
91
|
-
return object_resources.concat(subject_resources).concat(predicate_resources).uniq
|
92
|
-
when "objects"
|
93
|
-
query = "SELECT ?resourceUri WHERE{?s ?p ?resourceUri}"
|
94
|
-
when "subjects"
|
95
|
-
query = "SELECT ?resourceUri WHERE{?resourceUri ?p ?o}"
|
96
|
-
when "predicates"
|
97
|
-
query = "SELECT ?resourceUri WHERE{?s ?resourceUri ?o}"
|
98
|
-
else
|
99
|
-
# Custom query
|
100
|
-
query = selection
|
101
|
-
end
|
102
|
-
sparql.query(query).map{ |sol| sol[:resourceUri] }.reject do |s| # Reject literals
|
103
|
-
s.class <= RDF::Literal
|
104
|
-
end.select do |s| # Select URIs and blank nodes in case of include_blank
|
105
|
-
include_blank || s.class == RDF::URI
|
106
|
-
end.uniq
|
107
|
-
end
|
108
|
-
|
109
|
-
def create_page(site, resource, mapper, global_config)
|
110
|
-
page = RdfPageData.new(site, site.source, resource, mapper, global_config)
|
111
|
-
if(page.complete)
|
112
|
-
site.pages << page
|
113
|
-
resource.add_necessities(site, page)
|
114
|
-
resource.subResources.each {|key, value|
|
115
|
-
value.add_necessities(site, page)
|
116
|
-
} unless resource.subResources.nil?
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
module Jekyll
|
2
|
-
module RdfPageHelper
|
3
|
-
private
|
4
|
-
##
|
5
|
-
# sets @template to the path of a fitting layout
|
6
|
-
# it will set @complete to false if no fitting template is found
|
7
|
-
# * +resource+ - the resource that will be mapped to a template
|
8
|
-
# * +mapper+ - the mapper that provides the resource mappings
|
9
|
-
def map_template(resource, mapper)
|
10
|
-
@template = mapper.map(resource)
|
11
|
-
if(@template.nil?)
|
12
|
-
Jekyll.logger.warn("Resource #{resource} not rendered: No fitting template or default template found.")
|
13
|
-
@complete = false
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
##
|
18
|
-
# loads the data from the yaml-frontmatter and extends page.data with three key value pairs:
|
19
|
-
# -title -> contains the resource.iri
|
20
|
-
# -rdf -> contains the resource itself
|
21
|
-
# -template -> contains the path to the currenly used template
|
22
|
-
def load_data(site)
|
23
|
-
self.read_yaml(File.join(@base, '_layouts'), @template)
|
24
|
-
self.data['title'] = @resource.iri
|
25
|
-
self.data['rdf'] = @resource
|
26
|
-
self.data['template'] = @template
|
27
|
-
if(!@resource.subResources.nil?)
|
28
|
-
self.data['sub_rdf'] = @resource.subResources.values
|
29
|
-
self.data['sub_rdf'].each { |res|
|
30
|
-
res.page = self
|
31
|
-
res.site = site
|
32
|
-
}
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
##
|
37
|
-
# loads the prefix data passed in the layout yaml-frontmatter into page.data["rdf_prefixes"] and page.data["rdf_prefix_map"]
|
38
|
-
def load_prefixes
|
39
|
-
if !self.data["rdf_prefix_path"].nil?
|
40
|
-
begin
|
41
|
-
prefix_file=File.new(File.join(@base, 'rdf-data', self.data["rdf_prefix_path"].strip)).readlines
|
42
|
-
self.data["rdf_prefixes"] = prefix_file.join(" ")
|
43
|
-
self.data["rdf_prefix_map"] = Hash[ *(prefix_file.collect { |v|
|
44
|
-
arr = v.split(":",2)
|
45
|
-
[arr[0][7..-1].strip, arr[1].strip[1..-2]]
|
46
|
-
}.flatten)]
|
47
|
-
rescue Errno::ENOENT => ex
|
48
|
-
Jekyll.logger.error("context: #{@resource} template: #{@template} file not found: #{File.join(@base, 'rdf-data', self.data["rdf_prefix_path"])}")
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|