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.
@@ -24,97 +24,96 @@
24
24
  #
25
25
 
26
26
  module Jekyll
27
-
28
- ##
29
- # Internal module to hold the medthod #rdf_property
30
- #
31
- module RdfProperty
32
- include Jekyll::RdfPrefixResolver
27
+ module JekyllRdf
33
28
  ##
34
- # Computes all objects for which statements exist containing the given subject and predicate and returns any of them
35
- #
36
- # * +input+ - is the subject of the statements to be matched
37
- # * +predicate+ - is the predicate of the statements to be matched
38
- # * +lang+ - (optional) preferred language of a the returned object. The precise implementation of choosing which object to return (both in case a language is supplied and in case is not supplied) is undefined
39
- # * +list+ - (optional) decides the format of the return value. If set to true it returns an array, otherwise it returns a singleton String containing a URI.
29
+ # Internal module to hold the medthod #rdf_property
40
30
  #
41
- def rdf_property(input, predicate, lang = nil, list = false)
42
- return map_predicate(input, predicate, lang, list)
43
- end
44
-
45
- def rdf_inverse_property(input, predicate, list = false)
46
- return map_predicate(input, predicate, nil, list, true)
47
- end
31
+ module Filter
32
+ ##
33
+ # Computes all objects for which statements exist containing the given subject and predicate and returns any of them
34
+ #
35
+ # * +input+ - is the subject of the statements to be matched
36
+ # * +predicate+ - is the predicate of the statements to be matched
37
+ # * +lang+ - (optional) preferred language of a the returned object. The precise implementation of choosing which object to return (both in case a language is supplied and in case is not supplied) is undefined
38
+ # * +list+ - (optional) decides the format of the return value. If set to true it returns an array, otherwise it returns a singleton String containing a URI.
39
+ #
40
+ def rdf_property(input, predicate, lang = nil, list = false)
41
+ return map_predicate(input, predicate, lang, list)
42
+ end
48
43
 
49
- private
50
- def map_predicate(input, predicate, lang = nil, list = false, inverse = false)
51
- input = Jekyll::RdfHelper::page.data['rdf'] if(input.nil? || input.class <= (Jekyll::RdfPageData))
52
- return input unless input.is_a?(Jekyll::Drops::RdfResource)
53
- predicate = rdf_resolve_prefix(predicate)
54
- result = filter_statements(input.term.to_ntriples, predicate, inverse, lang)
55
- return unless !result.empty?
56
- if(list)
57
- return result
58
- else
59
- return result.first
44
+ def rdf_inverse_property(input, predicate, list = false)
45
+ return map_predicate(input, predicate, nil, list, true)
60
46
  end
61
- end
62
47
 
63
- def filter_statements(n_triples, predicate, inverse = false, lang = nil)
64
- client = Jekyll::RdfHelper::sparql
65
- query = ""
66
- if (lang.eql? 'cfg')
67
- lang_query = "FILTER(lang(?o) = '#{Jekyll::RdfHelper::site.config['jekyll_rdf']['language']}')"
68
- elsif lang.nil?
69
- lang_query = ""
70
- else
71
- lang_query = "FILTER(lang(?o) = '#{lang}')"
48
+ private
49
+ def map_predicate(input, predicate, lang = nil, list = false, inverse = false)
50
+ input = Jekyll::JekyllRdf::Helper::RdfHelper::page.data['rdf'] if(input.nil? || input.class <= (Jekyll::RdfPageData))
51
+ return input unless input.is_a?(Jekyll::JekyllRdf::Drops::RdfResource)
52
+ predicate = rdf_resolve_prefix(predicate)
53
+ result = filter_statements(input.term.to_ntriples, predicate, inverse, lang)
54
+ return unless !result.empty?
55
+ if(list)
56
+ return result
57
+ else
58
+ return result.first
59
+ end
72
60
  end
73
61
 
74
- if(inverse)
75
- query = "SELECT ?s WHERE{ ?s <#{predicate}> #{n_triples} }"
76
- result = client.query(query).map do |solution|
77
- subject = RDF::URI(solution.s)
78
- Jekyll::Drops::RdfResource.new(subject, Jekyll::RdfHelper::site, Jekyll::RdfHelper::page, true)
62
+ def filter_statements(n_triples, predicate, inverse = false, lang = nil)
63
+ client = Jekyll::JekyllRdf::Helper::RdfHelper::sparql
64
+ query = ""
65
+ if (lang.eql? 'cfg')
66
+ lang_query = "FILTER(lang(?o) = '#{Jekyll::JekyllRdf::Helper::RdfHelper::site.config['jekyll_rdf']['language']}')"
67
+ elsif lang.nil?
68
+ lang_query = ""
69
+ else
70
+ lang_query = "FILTER(lang(?o) = '#{lang}')"
79
71
  end
80
- else
81
- 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} }"
82
- result = client.query(query).map do |solution|
83
- dist_literal_resource(solution)
72
+
73
+ if(inverse)
74
+ query = "SELECT ?s WHERE{ ?s <#{predicate}> #{n_triples} }"
75
+ result = client.query(query).map do |solution|
76
+ subject = RDF::URI(solution.s)
77
+ Jekyll::JekyllRdf::Drops::RdfResource.new(subject, Jekyll::JekyllRdf::Helper::RdfHelper::site, Jekyll::JekyllRdf::Helper::RdfHelper::page, true)
78
+ end
79
+ else
80
+ 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} }"
81
+ result = client.query(query).map do |solution|
82
+ dist_literal_resource(solution)
83
+ end
84
84
  end
85
+ return result
85
86
  end
86
- return result
87
- end
88
87
 
89
- ##
90
- # Distinguishes the solution between an Literal and a Resource
91
- #
92
- def dist_literal_resource(solution)
93
- if solution.lit.true?
94
- check = check_solution(solution)
95
- object = RDF::Literal(solution.o, language: check[:lang], datatype: RDF::URI(check[:dataType]))
96
- result = Jekyll::Drops::RdfLiteral.new(object)
97
- else
98
- object = RDF::URI(solution.o)
99
- result = Jekyll::Drops::RdfResource.new(object, Jekyll::RdfHelper::site, Jekyll::RdfHelper::page, true)
88
+ ##
89
+ # Distinguishes the solution between an Literal and a Resource
90
+ #
91
+ def dist_literal_resource(solution)
92
+ if solution.lit.true?
93
+ check = check_solution(solution)
94
+ object = RDF::Literal(solution.o, language: check[:lang], datatype: RDF::URI(check[:dataType]))
95
+ result = Jekyll::JekyllRdf::Drops::RdfLiteral.new(object)
96
+ else
97
+ object = RDF::URI(solution.o)
98
+ result = Jekyll::JekyllRdf::Drops::RdfResource.new(object, Jekyll::JekyllRdf::Helper::RdfHelper::site, Jekyll::JekyllRdf::Helper::RdfHelper::page, true)
99
+ end
100
+ return result
100
101
  end
101
- return result
102
- end
103
102
 
104
- ##
105
- # check what language and datatype the passed literal has
106
- #
107
- def check_solution(solution)
108
- result = {:lang => nil, :dataType => nil}
109
- if((solution.bound?(:lang)) && (!solution.lang.to_s.eql?("")))
110
- result[:lang] = solution.lang.to_s.to_sym
111
- end
112
- if(solution.bound? :dt)
113
- result[:dataType] = solution.dt
103
+ ##
104
+ # check what language and datatype the passed literal has
105
+ #
106
+ def check_solution(solution)
107
+ result = {:lang => nil, :dataType => nil}
108
+ if((solution.bound?(:lang)) && (!solution.lang.to_s.eql?("")))
109
+ result[:lang] = solution.lang.to_s.to_sym
110
+ end
111
+ if(solution.bound? :dt)
112
+ result[:dataType] = solution.dt
113
+ end
114
+ return result
114
115
  end
115
- return result
116
116
  end
117
117
  end
118
118
  end
119
119
 
120
- Liquid::Template.register_filter(Jekyll::RdfProperty)
@@ -24,24 +24,26 @@
24
24
  #
25
25
 
26
26
  module Jekyll
27
- module RdfPrefixResolver
28
- private
29
- def rdf_resolve_prefix(predicate)
30
- if(predicate[0] == "<" && predicate[-1] == ">")
31
- return predicate[1..-2]
32
- end
33
- arr=predicate.split(":",2) #bad regex, would also devide 'http://example....' into 'http' and '//example....',even though it is already a complete URI; if 'PREFIX http: <http://...> is defined, 'http' in 'http://example....' could be mistaken for a prefix
34
- if((arr[1].include? (":")) || (arr[1][0..1].eql?("//")))
35
- raise UnMarkedUri.new(predicate, Jekyll::RdfHelper::page.data['template'])
36
- end
37
- if(!Jekyll::RdfHelper::page.data["rdf_prefixes"].nil?)
38
- if(!Jekyll::RdfHelper::page.data["rdf_prefix_map"][arr[0]].nil?)
39
- return arr[1].prepend(Jekyll::RdfHelper::page.data["rdf_prefix_map"][arr[0]])
27
+ module JekyllRdf
28
+ module Filter
29
+ private
30
+ def rdf_resolve_prefix(predicate)
31
+ if(predicate[0] == "<" && predicate[-1] == ">")
32
+ return predicate[1..-2]
33
+ end
34
+ arr=predicate.split(":",2) #bad regex, would also devide 'http://example....' into 'http' and '//example....',even though it is already a complete URI; if 'PREFIX http: <http://...> is defined, 'http' in 'http://example....' could be mistaken for a prefix
35
+ if((arr[1].include? (":")) || (arr[1][0..1].eql?("//")))
36
+ raise UnMarkedUri.new(predicate, Jekyll::JekyllRdf::Helper::RdfHelper::page.data['template'])
37
+ end
38
+ if(!Jekyll::JekyllRdf::Helper::RdfHelper::page.data["rdf_prefixes"].nil?)
39
+ if(!Jekyll::JekyllRdf::Helper::RdfHelper::page.data["rdf_prefix_map"][arr[0]].nil?)
40
+ return arr[1].prepend(Jekyll::JekyllRdf::Helper::RdfHelper::page.data["rdf_prefix_map"][arr[0]])
41
+ else
42
+ raise NoPrefixMapped.new(predicate, Jekyll::JekyllRdf::Helper::RdfHelper::page.data['template'], arr[0])
43
+ end
40
44
  else
41
- raise NoPrefixMapped.new(predicate, Jekyll::RdfHelper::page.data['template'], arr[0])
45
+ raise NoPrefixesDefined.new(predicate, Jekyll::JekyllRdf::Helper::RdfHelper::page.data['template'])
42
46
  end
43
- else
44
- raise NoPrefixesDefined.new(predicate, Jekyll::RdfHelper::page.data['template'])
45
47
  end
46
48
  end
47
49
  end
@@ -24,54 +24,53 @@
24
24
  #
25
25
 
26
26
  module Jekyll
27
-
28
- ##
29
- # Internal module to hold the medthod #sparql_query
30
- #
31
- module RdfSparqlQuery
32
- include Jekyll::RdfPrefixResolver
27
+ module JekyllRdf
33
28
  ##
34
- # Executes a SPARQL query. The supplied query is augmented by replacing each occurence of '?resourceUri' by the URI of the context RDF resource.
35
- # Returns an Array of bindings. Each binding is a Hash mapping variables to their values.
36
- #
37
- # * +input+ - the context RDF resource
38
- # * +query+ - the SPARQL query
29
+ # Internal module to hold the medthod #sparql_query
39
30
  #
40
- def sparql_query(resource = nil, query)
41
- if(resource.nil? || resource.class <= (Jekyll::RdfPageData))
42
- query.gsub!('?resourceUri', "<#{Jekyll::RdfHelper::page.data['rdf'].term}>")
43
- elsif(resource.class <= Array)
44
- resource.each_with_index do |uri, index|
45
- if(uri.class <= Jekyll::Drops::RdfResource)
46
- query.gsub!("?resourceUri_#{index}", uri.term.to_ntriples)
47
- else
48
- query.gsub!("?resourceUri_#{index}", "<#{rdf_resolve_prefix(uri.to_s)}>")
31
+ module Filter
32
+
33
+ ##
34
+ # Executes a SPARQL query. The supplied query is augmented by replacing each occurence of '?resourceUri' by the URI of the context RDF resource.
35
+ # Returns an Array of bindings. Each binding is a Hash mapping variables to their values.
36
+ #
37
+ # * +input+ - the context RDF resource
38
+ # * +query+ - the SPARQL query
39
+ #
40
+ def sparql_query(resource = nil, query)
41
+ if(resource.nil? || resource.class <= (Jekyll::RdfPageData))
42
+ query.gsub!('?resourceUri', "<#{Jekyll::JekyllRdf::Helper::RdfHelper::page.data['rdf'].term}>")
43
+ elsif(resource.class <= Array)
44
+ resource.each_with_index do |uri, index|
45
+ if(uri.class <= Jekyll::JekyllRdf::Drops::RdfResource)
46
+ query.gsub!("?resourceUri_#{index}", uri.term.to_ntriples)
47
+ else
48
+ query.gsub!("?resourceUri_#{index}", "<#{rdf_resolve_prefix(uri.to_s)}>")
49
+ end
49
50
  end
51
+ else
52
+ query.gsub!('?resourceUri', "<#{resource}>")
50
53
  end
51
- else
52
- query.gsub!('?resourceUri', "<#{resource}>")
53
- end
54
- if(!Jekyll::RdfHelper::page.data["rdf_prefixes"].nil?)
55
- query = query.prepend(" ").prepend(Jekyll::RdfHelper::page.data["rdf_prefixes"])
56
- end
57
- begin
58
- result = Jekyll::RdfHelper::sparql.query(query).map do |solution|
59
- hsh = solution.to_h
60
- hsh.update(hsh){ |k,v| Jekyll::Drops::RdfTerm.build_term_drop(v, Jekyll::RdfHelper::site, true).add_necessities(Jekyll::RdfHelper::site, Jekyll::RdfHelper::page)}
61
- hsh.collect{|k,v| [k.to_s, v]}.to_h
54
+ if(!Jekyll::JekyllRdf::Helper::RdfHelper::page.data["rdf_prefixes"].nil?)
55
+ query = query.prepend(" ").prepend(Jekyll::JekyllRdf::Helper::RdfHelper::page.data["rdf_prefixes"])
62
56
  end
63
- return result
64
- rescue SPARQL::Client::ClientError => ce
65
- Jekyll.logger.error("client error experienced: \n #{query} \n Error Message: #{ce.message}")
66
- rescue SPARQL::MalformedQuery => mq
67
- Jekyll.logger.error("malformed query found: \n #{query} \n Error Message: #{mq.message}")
68
- rescue Exception => e
69
- Jekyll.logger.error("unknown Exception of class: #{e.class} in sparql_query \n Query: #{query} \nMessage: #{e.message} \nTrace #{e.backtrace.drop(1).map{|s| "\t#{s}"}.join("\n")}")
57
+ begin
58
+ result = Jekyll::JekyllRdf::Helper::RdfHelper::sparql.query(query).map do |solution|
59
+ hsh = solution.to_h
60
+ hsh.update(hsh){ |k,v| Jekyll::JekyllRdf::Drops::RdfTerm.build_term_drop(v, Jekyll::JekyllRdf::Helper::RdfHelper::site, true).add_necessities(Jekyll::JekyllRdf::Helper::RdfHelper::site, Jekyll::JekyllRdf::Helper::RdfHelper::page)}
61
+ hsh.collect{|k,v| [k.to_s, v]}.to_h
62
+ end
63
+ return result
64
+ rescue SPARQL::Client::ClientError => ce
65
+ Jekyll.logger.error("client error experienced: \n #{query} \n Error Message: #{ce.message}")
66
+ rescue SPARQL::MalformedQuery => mq
67
+ Jekyll.logger.error("malformed query found: \n #{query} \n Error Message: #{mq.message}")
68
+ rescue Exception => e
69
+ Jekyll.logger.error("unknown Exception of class: #{e.class} in sparql_query \n Query: #{query} \nMessage: #{e.message} \nTrace #{e.backtrace.drop(1).map{|s| "\t#{s}"}.join("\n")}")
70
+ end
71
+ return []
70
72
  end
71
- return []
72
- end
73
73
 
74
+ end
74
75
  end
75
76
  end
76
-
77
- Liquid::Template.register_filter(Jekyll::RdfSparqlQuery)
@@ -0,0 +1,51 @@
1
+ module Jekyll
2
+ module JekyllRdf
3
+ module Helper
4
+ module RdfClassExtraction
5
+ private
6
+ def search_for_classes(sparql)
7
+ 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}}"
8
+ class_search_results = sparql.query(class_recognition_query).map{ |sol| sol[:resourceUri] }.reject do |s| # Reject literals
9
+ s.class <= RDF::Literal
10
+ end.select do |s| # Select URIs and blank nodes in case of include_blank
11
+ s.class <=RDF::Node || s.class <= RDF::URI
12
+ end
13
+ return class_search_results
14
+ end
15
+
16
+ def create_resource_class(class_search_results, sparql)
17
+ class_search_results.each do |uri|
18
+ @classResources[uri.to_s]=Jekyll::JekyllRdf::Drops::RdfResourceClass.new(uri, sparql)
19
+ end
20
+
21
+ @classResources.each{|key, value|
22
+ value.find_direct_subclasses.each{|s|
23
+ value.add_subclass(@classResources[s])
24
+ }
25
+ }
26
+ end
27
+
28
+ def assign_class_templates(classes_to_templates)
29
+ if(classes_to_templates.is_a?(Hash))
30
+ @classResources.default = StopObject.new
31
+ classes_to_templates.each{|key, value|
32
+ @classResources[key].propagate_template(value,0)
33
+ @classResources[key].traverse_hierarchy_value(0);
34
+ }
35
+ @classResources.default = nil
36
+ end
37
+ end
38
+
39
+ class StopObject #unfortunately next does not work in this setup, it avoids to have "if" in every iteration
40
+ def propagate_template(template, lock)
41
+ return
42
+ end
43
+
44
+ def traverse_hierarchy_value(predecessorHierarchyValue)
45
+ return
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -23,33 +23,37 @@
23
23
  #
24
24
 
25
25
  module Jekyll
26
+ module JekyllRdf
27
+ module Helper
28
+ ##
29
+ # Internal module to hold support for functionalities like submitting sparql queries
30
+ #
31
+ module RdfHelper
32
+ def self.sparql= sparql
33
+ @@sparql = sparql
34
+ end
26
35
 
27
- ##
28
- # Internal module to hold the medthod #rdf_get
29
- #
30
- module RdfHelper
31
- def self.sparql= sparql
32
- @@sparql = sparql
33
- end
34
-
35
- def self.sparql
36
- @@sparql
37
- end
36
+ def self.sparql
37
+ @@sparql
38
+ end
38
39
 
39
- def self.site= site
40
- @@site = site
41
- end
40
+ def self.site= site
41
+ @@site = site
42
+ end
42
43
 
43
- def self.site
44
- @@site
45
- end
44
+ def self.site
45
+ @@site
46
+ end
46
47
 
47
- def self.page= page
48
- @@page = page
49
- end
48
+ def self.page= page
49
+ @@page = page
50
+ end
50
51
 
51
- def self.page
52
- @@page
52
+ def self.page
53
+ @@page
54
+ end
55
+ end
53
56
  end
57
+
54
58
  end
55
59
  end
@@ -0,0 +1,124 @@
1
+ module Jekyll
2
+ module JekyllRdf
3
+ module Helper
4
+ module RdfGeneratorHelper
5
+ private
6
+ def prepare_pages (site, mapper)
7
+ @pageResources.each{|uri, entry|
8
+ resource = entry.delete('./')
9
+ resource.subResources = entry
10
+ create_page(site, resource, mapper, @global_config)
11
+ }
12
+
13
+ @blanknodes.each{|resource|
14
+ create_page(site, resource, mapper, @global_config)
15
+ }
16
+ end
17
+
18
+ def parse_resources (resources)
19
+ @pageResources={};
20
+ @blanknodes=[]
21
+ resources.each do |uri|
22
+ resource = Jekyll::JekyllRdf::Drops::RdfResource.new(uri)
23
+ if(uri.instance_of? RDF::URI)
24
+ uriString = uri.to_s
25
+ if((uriString.include? "#") && (uriString.index("#") < (uriString.length - 1))) #sorting in uris with a #
26
+ preSufUri = uriString.split("#")
27
+ if(!@pageResources.key? preSufUri[0])
28
+ @pageResources[preSufUri[0]] = {}
29
+ end
30
+ @pageResources[preSufUri[0]][preSufUri[1]] = resource
31
+ else #sorting in uris without a #
32
+ if(!@pageResources.key? uriString)
33
+ @pageResources[uriString]={}
34
+ end
35
+ @pageResources[uriString]['./'] = resource
36
+ end
37
+ elsif(uri.instance_of? RDF::Node)
38
+ @blanknodes << resource
39
+ end
40
+ end
41
+ # give parents to orphaned resources
42
+ @pageResources.each_key{|key|
43
+ @pageResources[key]['./'] = Jekyll::JekyllRdf::Drops::RdfResource.new(RDF::URI(key)) if @pageResources[key]['./'].nil?
44
+ }
45
+ end
46
+
47
+ def load_config (site)
48
+ begin
49
+ @config = site.config.fetch('jekyll_rdf')
50
+ rescue KeyError => e
51
+ Jekyll.logger.error("You've included Jekyll-RDF, but it is not configured. Aborting the jekyll-rdf plugin.")
52
+ return false
53
+ end
54
+
55
+ @global_config = Jekyll.configuration({})
56
+
57
+ #small fix because global_config doesn't work in a test enviorment
58
+ if(!@global_config.key? "url")
59
+ @global_config["url"] = site.config["url"]
60
+ @global_config["baseurl"] = site.config["baseurl"]
61
+ end
62
+ return true
63
+ end
64
+ ##
65
+ # #extract_resources returns resources from an RDF Sparql endpoint.
66
+ #
67
+ # Literals are omitted.
68
+ # Blank nodes are only returned if +include_blank+ is true.
69
+ # Duplicate nodes are removed.
70
+ #
71
+ # * +selection+ - choose any of the following:
72
+ # nil ::
73
+ # no restrictions, return subjects, predicates, objects
74
+ # "subjects" ::
75
+ # return only subjects
76
+ # "predicates" ::
77
+ # return only predicates
78
+ # "objects" ::
79
+ # return only objects
80
+ # Otherwise ::
81
+ # consider +selection+ to be a SPARQL query and return answer set to this SPARQL query
82
+ # * +include_blank+ - If true, blank nodes are also returned, otherwise blank nodes are omitted
83
+ # * +sparql+ - The SPARQL client to run queries against
84
+ #
85
+ def extract_resources(selection, include_blank, sparql)
86
+
87
+ case selection
88
+ when nil # Config parameter not present
89
+ object_resources = extract_resources("objects", include_blank, sparql)
90
+ subject_resources = extract_resources("subjects", include_blank, sparql)
91
+ predicate_resources = extract_resources("predicates", include_blank, sparql)
92
+ return object_resources.concat(subject_resources).concat(predicate_resources).uniq
93
+ when "objects"
94
+ query = "SELECT ?resourceUri WHERE{?s ?p ?resourceUri}"
95
+ when "subjects"
96
+ query = "SELECT ?resourceUri WHERE{?resourceUri ?p ?o}"
97
+ when "predicates"
98
+ query = "SELECT ?resourceUri WHERE{?s ?resourceUri ?o}"
99
+ else
100
+ # Custom query
101
+ query = selection
102
+ end
103
+ sparql.query(query).map{ |sol| sol[:resourceUri] }.reject do |s| # Reject literals
104
+ s.class <= RDF::Literal
105
+ end.select do |s| # Select URIs and blank nodes in case of include_blank
106
+ include_blank || s.class == RDF::URI
107
+ end.uniq
108
+ end
109
+
110
+ def create_page(site, resource, mapper, global_config)
111
+ page = RdfPageData.new(site, site.source, resource, mapper, global_config)
112
+ if(page.complete)
113
+ site.pages << page
114
+ resource.add_necessities(site, page)
115
+ resource.subResources.each {|key, value|
116
+ value.add_necessities(site, page)
117
+ } unless resource.subResources.nil?
118
+ end
119
+ end
120
+ end
121
+
122
+ end
123
+ end
124
+ end