rdf-rdfa 0.3.19 → 0.3.19.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/rdf/rdfa/expansion.rb +39 -46
- data/lib/rdf/rdfa/reader.rb +52 -51
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.19
|
1
|
+
0.3.19.1
|
data/lib/rdf/rdfa/expansion.rb
CHANGED
@@ -34,21 +34,18 @@ module RDF::RDFa
|
|
34
34
|
# scm-sco
|
35
35
|
# {c1 rdfs:subClassOf c2 . c2 rdfs:subClassOf c3} => {c1 rdfs:subClassOf c3}
|
36
36
|
#
|
37
|
-
# @
|
37
|
+
# @param [RDF::Repository] repository
|
38
38
|
# @see [OWL2 PROFILES](http://www.w3.org/TR/2009/REC-owl2-profiles-20091027/#Reasoning_in_OWL_2_RL_and_RDF_Graphs_using_Rules)
|
39
|
-
def expand
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
count = repo.count
|
44
|
-
add_debug("expand") {"Loaded #{repo.size} triples into default graph"}
|
39
|
+
def expand(repository)
|
40
|
+
count = repository.count
|
41
|
+
add_debug("expand") {"Repository has #{repository.size} statements"}
|
45
42
|
|
46
43
|
# Vocabularies managed in vocab_repo, and copied to repo for processing.
|
47
44
|
# This allows for persistent storage of vocabularies
|
48
45
|
@@vocab_repo = @options[:vocab_repository] if @options.has_key?(:vocab_repository)
|
49
46
|
@@vocab_repo ||= RDF::Repository.new.insert(*COOKED_VOCAB_STATEMENTS)
|
50
47
|
|
51
|
-
vocabs =
|
48
|
+
vocabs = repository.query(:predicate => RDF::RDFA.usesVocabulary).to_a.map(&:object)
|
52
49
|
vocabs.each do |vocab|
|
53
50
|
begin
|
54
51
|
unless @@vocab_repo.has_context?(vocab)
|
@@ -63,17 +60,11 @@ module RDF::RDFa
|
|
63
60
|
|
64
61
|
@@vocab_repo.each do |statement|
|
65
62
|
if vocabs.include?(statement.context)
|
66
|
-
|
63
|
+
repository << statement
|
67
64
|
end
|
68
65
|
end
|
69
66
|
|
70
|
-
|
71
|
-
|
72
|
-
# Return graph with default context
|
73
|
-
graph = RDF::Graph.new
|
74
|
-
repo.statements.each {|st| graph << st if st.context.nil?}
|
75
|
-
|
76
|
-
graph
|
67
|
+
entailment(repository)
|
77
68
|
end
|
78
69
|
|
79
70
|
##
|
@@ -83,14 +74,11 @@ module RDF::RDFa
|
|
83
74
|
#
|
84
75
|
# Subsequently, remove reference rdfa:Prototype objects.
|
85
76
|
#
|
86
|
-
# @
|
77
|
+
# @param [RDF::Repository] repository
|
87
78
|
# @see [HTML+RDFa](http://www.w3.org/TR/rdfa-in-html/#rdfa-reference-folding)
|
88
|
-
def fold_references
|
89
|
-
|
90
|
-
|
91
|
-
add_debug("fold") {"Loaded #{graph.size} triples into default graph"}
|
92
|
-
|
93
|
-
fold(graph)
|
79
|
+
def fold_references(repository)
|
80
|
+
add_debug("expand") {"Repository has #{repository.size} statements"}
|
81
|
+
fold(repository)
|
94
82
|
end
|
95
83
|
|
96
84
|
def rule(name, &block)
|
@@ -233,58 +221,63 @@ module RDF::RDFa
|
|
233
221
|
|
234
222
|
##
|
235
223
|
# Perform OWL entailment rules on repository
|
236
|
-
# @param [RDF::Repository]
|
224
|
+
# @param [RDF::Repository] repository
|
237
225
|
# @return [RDF::Repository]
|
238
|
-
def entailment(
|
226
|
+
def entailment(repository)
|
239
227
|
old_count = 0
|
240
228
|
|
241
|
-
# Continue as long as new statements are added to
|
242
|
-
while old_count < (count =
|
243
|
-
add_debug("entailment"
|
229
|
+
# Continue as long as new statements are added to repository
|
230
|
+
while old_count < (count = repository.count)
|
231
|
+
#add_debug("entailment") {"old: #{old_count} count: #{count}"}
|
244
232
|
old_count = count
|
245
233
|
to_add = []
|
246
234
|
|
247
235
|
RULES.each do |rule|
|
248
|
-
rule.execute(
|
249
|
-
add_debug("entailment(#{rule.name})") {statement.inspect}
|
236
|
+
rule.execute(repository) do |statement|
|
237
|
+
#add_debug("entailment(#{rule.name})") {statement.inspect}
|
250
238
|
to_add << statement
|
251
239
|
end
|
252
240
|
end
|
253
241
|
|
254
|
-
|
242
|
+
repository.insert(*to_add)
|
255
243
|
end
|
256
244
|
|
257
245
|
add_debug("entailment", "final count: #{count}")
|
258
|
-
repo
|
259
246
|
end
|
260
247
|
|
261
248
|
##
|
262
249
|
# Perform RDFa folding rules on repository
|
263
|
-
# @param [RDF::
|
264
|
-
|
265
|
-
|
266
|
-
to_add = []
|
250
|
+
# @param [RDF::Repository] repository
|
251
|
+
def fold(repository)
|
252
|
+
old_count = 0
|
267
253
|
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
254
|
+
# Continue as long as new statements are added to repository
|
255
|
+
while old_count < (count = repository.count)
|
256
|
+
#add_debug("fold") {"old: #{old_count} count: #{count}"}
|
257
|
+
old_count = count
|
258
|
+
to_add = []
|
259
|
+
|
260
|
+
FOLDING_RULES.each do |rule|
|
261
|
+
rule.execute(repository) do |statement|
|
262
|
+
#add_debug("fold(#{rule.name})") {statement.inspect}
|
263
|
+
to_add << statement
|
264
|
+
end
|
272
265
|
end
|
273
|
-
end
|
274
266
|
|
275
|
-
|
267
|
+
repository.insert(*to_add)
|
268
|
+
end
|
276
269
|
|
277
270
|
# Remove statements matched by removal rules
|
278
271
|
to_remove = []
|
279
272
|
REMOVAL_RULES.each do |rule|
|
280
|
-
rule.execute(
|
281
|
-
add_debug("removal(#{rule.name})") {statement.inspect}
|
273
|
+
rule.execute(repository) do |statement|
|
274
|
+
#add_debug("removal(#{rule.name})") {statement.inspect}
|
282
275
|
to_remove << statement
|
283
276
|
end
|
284
277
|
end
|
285
|
-
|
278
|
+
repository.delete(*to_remove)
|
286
279
|
|
287
|
-
|
280
|
+
add_debug("fold", "final count: #{count}")
|
288
281
|
end
|
289
282
|
end
|
290
283
|
end
|
data/lib/rdf/rdfa/reader.rb
CHANGED
@@ -89,6 +89,17 @@ module RDF::RDFa
|
|
89
89
|
# @return [:"rdfa1.0", :"rdfa1.1"]
|
90
90
|
attr_reader :version
|
91
91
|
|
92
|
+
# Repository used for collecting triples.
|
93
|
+
# @!attribute [r] repository
|
94
|
+
# @return [RDF::Repository]
|
95
|
+
attr_reader :repository
|
96
|
+
|
97
|
+
# Returns the XML implementation module for this reader instance.
|
98
|
+
#
|
99
|
+
# @!attribute [rw] implementation
|
100
|
+
# @return [Module]
|
101
|
+
attr_reader :implementation
|
102
|
+
|
92
103
|
# The Recursive Baggage
|
93
104
|
# @private
|
94
105
|
class EvaluationContext # :nodoc:
|
@@ -232,12 +243,6 @@ module RDF::RDFa
|
|
232
243
|
end
|
233
244
|
end
|
234
245
|
|
235
|
-
# Returns the XML implementation module for this reader instance.
|
236
|
-
#
|
237
|
-
# @!attribute [rw] implementation
|
238
|
-
# @return [Module]
|
239
|
-
attr_reader :implementation
|
240
|
-
|
241
246
|
##
|
242
247
|
# Initializes the RDFa reader instance.
|
243
248
|
#
|
@@ -273,7 +278,8 @@ module RDF::RDFa
|
|
273
278
|
super do
|
274
279
|
@debug = options[:debug]
|
275
280
|
@options = {:reference_folding => true}.merge(@options)
|
276
|
-
|
281
|
+
@repository = RDF::Repository.new
|
282
|
+
|
277
283
|
@options[:rdfagraph] = case @options[:rdfagraph]
|
278
284
|
when String, Symbol then @options[:rdfagraph].to_s.split(',').map(&:strip).map(&:to_sym)
|
279
285
|
when Array then @options[:rdfagraph].map {|o| o.to_s.to_sym}
|
@@ -349,30 +355,13 @@ module RDF::RDFa
|
|
349
355
|
# @yieldparam [RDF::Statement] statement
|
350
356
|
# @return [void]
|
351
357
|
def each_statement(&block)
|
352
|
-
|
353
|
-
if @options[:vocab_expansion]
|
354
|
-
# Process vocabulary expansion after normal processing
|
355
|
-
@options[:vocab_expansion] = false
|
356
|
-
expand.each_statement(&block)
|
357
|
-
@options[:vocab_expansion] = true
|
358
|
-
elsif @options[:reference_folding]
|
359
|
-
# Process reference folding after normal processing
|
360
|
-
@options[:reference_folding] = false
|
361
|
-
fold_references.each_statement(&block)
|
362
|
-
@options[:reference_folding] = true
|
363
|
-
else
|
364
|
-
@callback = block
|
365
|
-
|
366
|
-
# Process any saved callbacks (processor graph issues)
|
367
|
-
@saved_callbacks.each {|s| @callback.call(s) } if @saved_callbacks
|
368
|
-
|
358
|
+
unless @processed || @root.nil?
|
369
359
|
# Add prefix definitions from host defaults
|
370
360
|
@host_defaults[:uri_mappings].each_pair do |prefix, value|
|
371
361
|
prefix(prefix, value)
|
372
362
|
end
|
373
363
|
|
374
364
|
# parse
|
375
|
-
return unless @root
|
376
365
|
parse_whole_document(@doc, RDF::URI(base_uri))
|
377
366
|
|
378
367
|
def extract_script(el, input, type, options, &block)
|
@@ -396,7 +385,7 @@ module RDF::RDFa
|
|
396
385
|
# Look for Embedded Turtle and RDF/XML
|
397
386
|
unless @root.xpath("//rdf:RDF", "xmlns:rdf" => "http://www.w3.org/1999/02/22-rdf-syntax-ns#").empty?
|
398
387
|
extract_script(@root, @doc, "application/rdf+xml", @options) do |statement|
|
399
|
-
|
388
|
+
@repository << statement
|
400
389
|
end
|
401
390
|
end
|
402
391
|
|
@@ -405,7 +394,7 @@ module RDF::RDFa
|
|
405
394
|
type = el.attribute("type")
|
406
395
|
|
407
396
|
extract_script(el, el.inner_text, type, @options) do |statement|
|
408
|
-
|
397
|
+
@repository << statement
|
409
398
|
end
|
410
399
|
end
|
411
400
|
|
@@ -414,11 +403,31 @@ module RDF::RDFa
|
|
414
403
|
begin
|
415
404
|
require 'rdf/microdata'
|
416
405
|
add_debug(@doc, "process microdata")
|
417
|
-
RDF::Microdata::Reader.new(@doc, options)
|
406
|
+
@repository << RDF::Microdata::Reader.new(@doc, options)
|
418
407
|
rescue
|
419
408
|
add_debug(@doc, "microdata detected, not processed")
|
420
409
|
end
|
421
410
|
end
|
411
|
+
|
412
|
+
# Perform reference folding
|
413
|
+
fold_references(@repository) if @options[:reference_folding]
|
414
|
+
|
415
|
+
# Perform vocabulary expansion
|
416
|
+
expand(@repository) if @options[:vocab_expansion]
|
417
|
+
|
418
|
+
@processed = true
|
419
|
+
end
|
420
|
+
|
421
|
+
# Return statements in the default graph for
|
422
|
+
# statements in the associated named or default graph from the
|
423
|
+
# processed repository
|
424
|
+
@repository.each do |statement|
|
425
|
+
case statement.context
|
426
|
+
when nil
|
427
|
+
yield statement if @options[:rdfagraph].include?(:output)
|
428
|
+
when RDF::RDFA.ProcessorGraph
|
429
|
+
yield RDF::Statement.new(*statement.to_triple) if @options[:rdfagraph].include?(:processor)
|
430
|
+
end
|
422
431
|
end
|
423
432
|
end
|
424
433
|
|
@@ -477,33 +486,25 @@ module RDF::RDFa
|
|
477
486
|
puts "#{node_path(node)}: #{message}" if ::RDF::RDFa.debug?
|
478
487
|
@debug << "#{node_path(node)}: #{message}" if @debug.is_a?(Array)
|
479
488
|
if @options[:processor_callback] || @options[:rdfagraph].include?(:processor)
|
480
|
-
g = RDF::Graph.new
|
481
489
|
n = RDF::Node.new
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
490
|
+
processor_statements = [
|
491
|
+
RDF::Statement.new(n, RDF["type"], process_class, :context => RDF::RDFA.ProcessorGraph),
|
492
|
+
RDF::Statement.new(n, RDF::DC.description, message, :context => RDF::RDFA.ProcessorGraph),
|
493
|
+
RDF::Statement.new(n, RDF::DC.date, RDF::Literal::Date.new(DateTime.now), :context => RDF::RDFA.ProcessorGraph)
|
494
|
+
]
|
495
|
+
processor_statements << RDF::Statement.new(n, RDF::RDFA.context, base_uri, :context => RDF::RDFA.ProcessorGraph) if base_uri
|
486
496
|
if node.respond_to?(:path)
|
487
497
|
nc = RDF::Node.new
|
488
|
-
|
489
|
-
|
490
|
-
|
498
|
+
processor_statements += [
|
499
|
+
RDF::Statement.new(n, RDF::RDFA.context, nc, :context => RDF::RDFA.ProcessorGraph),
|
500
|
+
RDF::Statement.new(nc, RDF["type"], RDF::PTR.XPathPointer, :context => RDF::RDFA.ProcessorGraph),
|
501
|
+
RDF::Statement.new(nc, RDF::PTR.expression, node.path, :context => RDF::RDFA.ProcessorGraph)
|
502
|
+
]
|
491
503
|
end
|
492
504
|
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
# Yield as result
|
498
|
-
if @options[:rdfagraph].include?(:processor)
|
499
|
-
if @callback
|
500
|
-
@callback.call(s)
|
501
|
-
else
|
502
|
-
# Save messages for later callback
|
503
|
-
@saved_callbacks ||= []
|
504
|
-
@saved_callbacks << s
|
505
|
-
end
|
506
|
-
end
|
505
|
+
@repository.insert(*processor_statements)
|
506
|
+
if cb = @options[:processor_callback]
|
507
|
+
processor_statements.each {|s| cb.call(s)}
|
507
508
|
end
|
508
509
|
end
|
509
510
|
end
|
@@ -523,7 +524,7 @@ module RDF::RDFa
|
|
523
524
|
add_error(node, "statement #{RDF::NTriples.serialize(statement)} is invalid") unless statement.valid?
|
524
525
|
if subject && predicate && object # Basic sanity checking
|
525
526
|
add_info(node, "statement: #{RDF::NTriples.serialize(statement)}")
|
526
|
-
|
527
|
+
repository << statement
|
527
528
|
end
|
528
529
|
end
|
529
530
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-rdfa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.19
|
4
|
+
version: 0.3.19.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-12-
|
13
|
+
date: 2012-12-30 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rdf
|