rdf-rdfxml 1.99.1 → 2.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +2 -2
- data/VERSION +1 -1
- data/lib/rdf/rdfxml/format.rb +10 -23
- data/lib/rdf/rdfxml/reader.rb +66 -85
- data/lib/rdf/rdfxml/writer.rb +52 -18
- data/lib/rdf/rdfxml/writer/haml_templates.rb +11 -16
- metadata +92 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a97e15f4b3060b84e86264e393b428fc6ed99206
|
4
|
+
data.tar.gz: 4816c1d928adb1d589306ee67a50410f43f3d4b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1951f8988b0e05bcdfe6edee336332286ba1aa93c6bbd70f51928305d895a001ba92b914b771e68f4e616e2fa65334bfd3fe7fbd9c3a7f64fc443b70a534a66
|
7
|
+
data.tar.gz: bccc43775383cf308f9aff69ec8b66089bcc6bb4fc6ed3079e820c5c36b6e64a9ef034165be6fc0d2b15063e8e8316ba3093a63b32d8b755d7cd2abaff8c2a27
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@ Install with `gem install rdf-rdfxml`
|
|
18
18
|
|
19
19
|
* 100% free and unencumbered [public domain](http://unlicense.org/) software.
|
20
20
|
* Implements a complete parser for [RDF/XML][].
|
21
|
-
* Compatible with Ruby >=
|
21
|
+
* Compatible with Ruby >= 2.0.
|
22
22
|
|
23
23
|
## Usage:
|
24
24
|
Instantiate a parser and parse source, specifying type and base-URL
|
@@ -40,7 +40,7 @@ Write a graph to a file:
|
|
40
40
|
end
|
41
41
|
|
42
42
|
## Dependencies
|
43
|
-
* [RDF.rb](http://rubygems.org/gems/rdf) (>=
|
43
|
+
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 2.0)
|
44
44
|
* Soft dependency on [Nokogiri](http://rubygems.org/gems/nokogiri) (>= 1.6.0)
|
45
45
|
|
46
46
|
## Documentation
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0.beta1
|
data/lib/rdf/rdfxml/format.rb
CHANGED
@@ -6,21 +6,21 @@ module RDF::RDFXML
|
|
6
6
|
# RDF::Format.for(:rdf) # RDF::RDFXML::Format
|
7
7
|
# RDF::Format.for(:rdfxml) # RDF::RDFXML::Format
|
8
8
|
# RDF::Format.for("etc/foaf.xml")
|
9
|
-
# RDF::Format.for(:
|
10
|
-
# RDF::Format.for(:
|
11
|
-
# RDF::Format.for(:
|
12
|
-
# RDF::Format.for(:
|
13
|
-
# RDF::Format.for(:
|
9
|
+
# RDF::Format.for(file_name: "etc/foaf.xml")
|
10
|
+
# RDF::Format.for(file_extension: "xml")
|
11
|
+
# RDF::Format.for(file_extension: "rdf")
|
12
|
+
# RDF::Format.for(content_type: "application/xml")
|
13
|
+
# RDF::Format.for(content_type: "application/rdf+xml")
|
14
14
|
#
|
15
15
|
# @example Obtaining serialization format MIME types
|
16
16
|
# RDF::Format.content_types #=> {"application/rdf+xml" => [RDF::RDFXML::Format]}
|
17
17
|
#
|
18
18
|
# @example Obtaining serialization format file extension mappings
|
19
|
-
# RDF::Format.file_extensions #=> {:
|
19
|
+
# RDF::Format.file_extensions #=> {rdf: "application/rdf+xml"}
|
20
20
|
#
|
21
21
|
# @see http://www.w3.org/TR/rdf-testcases/#ntriples
|
22
22
|
class Format < RDF::Format
|
23
|
-
content_type 'application/rdf+xml', :
|
23
|
+
content_type 'application/rdf+xml', extensions: [:rdf, :owl]
|
24
24
|
content_encoding 'utf-8'
|
25
25
|
|
26
26
|
reader { RDF::RDFXML::Reader }
|
@@ -43,22 +43,9 @@ module RDF::RDFXML
|
|
43
43
|
def self.name
|
44
44
|
"RDF/XML"
|
45
45
|
end
|
46
|
-
end
|
47
46
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
#
|
52
|
-
# @example Obtaining an HTML format class
|
53
|
-
# RDF::Format.for(:rdf) # RDF::RDFXML::Lite
|
54
|
-
# RDF::Format.for(:rdf).reader # RDF::RDFXML::Reader
|
55
|
-
# RDF::Format.for(:rdf).writer # RDF::RDFXML::Writer
|
56
|
-
class RDFFormat < RDF::Format
|
57
|
-
content_type 'application/rdf+xml'
|
58
|
-
content_encoding 'utf-8'
|
59
|
-
reader { RDF::RDFXML::Reader }
|
60
|
-
writer { RDF::RDFXML::Writer }
|
61
|
-
|
62
|
-
def self.to_sym; :rdf; end
|
47
|
+
def self.symbols
|
48
|
+
[:rdfxml, :rdf, :owl]
|
49
|
+
end
|
63
50
|
end
|
64
51
|
end
|
data/lib/rdf/rdfxml/reader.rb
CHANGED
@@ -14,6 +14,7 @@ module RDF::RDFXML
|
|
14
14
|
# @author [Gregg Kellogg](http://kellogg-assoc.com/)
|
15
15
|
class Reader < RDF::Reader
|
16
16
|
format Format
|
17
|
+
include RDF::Util::Logger
|
17
18
|
|
18
19
|
CORE_SYNTAX_TERMS = %w(RDF ID about parseType resource nodeID datatype).map {|n| "http://www.w3.org/1999/02/22-rdf-syntax-ns##{n}"}
|
19
20
|
OLD_TERMS = %w(aboutEach aboutEachPrefix bagID).map {|n| "http://www.w3.org/1999/02/22-rdf-syntax-ns##{n}"}
|
@@ -130,8 +131,6 @@ module RDF::RDFXML
|
|
130
131
|
# the prefix mappings to use (not supported by all readers)
|
131
132
|
# @option options [#to_s] :base_uri (nil)
|
132
133
|
# the base URI to use when resolving relative URIs
|
133
|
-
# @option options [Array] :debug
|
134
|
-
# Array to place debug messages
|
135
134
|
# @return [reader]
|
136
135
|
# @yield [reader] `self`
|
137
136
|
# @yieldparam [RDF::Reader] reader
|
@@ -139,16 +138,14 @@ module RDF::RDFXML
|
|
139
138
|
# @raise [Error] Raises RDF::ReaderError if _validate_
|
140
139
|
def initialize(input = $stdin, options = {}, &block)
|
141
140
|
super do
|
142
|
-
@debug = options[:debug]
|
143
|
-
|
144
141
|
@library = case options[:library]
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
142
|
+
when nil
|
143
|
+
# Use Nokogiri when available, and REXML otherwise:
|
144
|
+
defined?(::Nokogiri) ? :nokogiri : :rexml
|
145
|
+
when :nokogiri, :rexml
|
146
|
+
options[:library]
|
147
|
+
else
|
148
|
+
log_fatal("expected :rexml or :nokogiri, but got #{options[:library].inspect}", exception: ArgumentError)
|
152
149
|
end
|
153
150
|
|
154
151
|
require "rdf/rdfxml/reader/#{@library}"
|
@@ -158,10 +155,11 @@ module RDF::RDFXML
|
|
158
155
|
end
|
159
156
|
self.extend(@implementation)
|
160
157
|
|
161
|
-
|
158
|
+
input.rewind if input.respond_to?(:rewind)
|
159
|
+
initialize_xml(input, options) rescue log_fatal($!.message)
|
162
160
|
|
163
|
-
|
164
|
-
|
161
|
+
log_error("Empty document") if root.nil?
|
162
|
+
log_error("Synax errors") {doc_errors} if !doc_errors.empty?
|
165
163
|
|
166
164
|
block.call(self) if block_given?
|
167
165
|
end
|
@@ -183,8 +181,9 @@ module RDF::RDFXML
|
|
183
181
|
if block_given?
|
184
182
|
# Block called from add_statement
|
185
183
|
@callback = block
|
184
|
+
return unless root
|
186
185
|
|
187
|
-
|
186
|
+
log_fatal "root must be a proxy not a #{root.class}" unless root.is_a?(@implementation::NodeProxy)
|
188
187
|
|
189
188
|
add_debug(root, "base_uri: #{base_uri.inspect}")
|
190
189
|
|
@@ -199,7 +198,7 @@ module RDF::RDFXML
|
|
199
198
|
nodeElement(root, ec)
|
200
199
|
else
|
201
200
|
rdf_nodes.each do |node|
|
202
|
-
|
201
|
+
log_fatal "node must be a proxy not a #{node.class}" unless node.is_a?(@implementation::NodeProxy)
|
203
202
|
# XXX Skip this element if it's contained within another rdf:RDF element
|
204
203
|
|
205
204
|
# Extract base, lang and namespaces from parents to create proper evaluation context
|
@@ -209,7 +208,7 @@ module RDF::RDFXML
|
|
209
208
|
end
|
210
209
|
node.children.each {|el|
|
211
210
|
next unless el.element?
|
212
|
-
|
211
|
+
log_fatal "el must be a proxy not a #{el.class}" unless el.is_a?(@implementation::NodeProxy)
|
213
212
|
new_ec = ec.clone(el) do |prefix, value|
|
214
213
|
prefix(prefix, value)
|
215
214
|
end
|
@@ -217,6 +216,10 @@ module RDF::RDFXML
|
|
217
216
|
}
|
218
217
|
end
|
219
218
|
end
|
219
|
+
|
220
|
+
if validate? && log_statistics[:error]
|
221
|
+
raise RDF::ReaderError, "Errors found during processing"
|
222
|
+
end
|
220
223
|
end
|
221
224
|
enum_for(:each_statement)
|
222
225
|
end
|
@@ -251,16 +254,22 @@ module RDF::RDFXML
|
|
251
254
|
"<#{base_uri}>#{node.respond_to?(:display_path) ? node.display_path : node}"
|
252
255
|
end
|
253
256
|
|
254
|
-
#
|
257
|
+
# Log a debug message
|
255
258
|
#
|
256
259
|
# @param [Nokogiri::XML::Node, #to_s] node XML Node or string for showing context
|
257
260
|
# @param [String] message
|
258
261
|
# @yieldreturn [String] appended to message, to allow for lazy-evaulation of message
|
259
|
-
def add_debug(node, message = "")
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
262
|
+
def add_debug(node, message = "", &block)
|
263
|
+
log_debug(node_path(node), message, &block)
|
264
|
+
end
|
265
|
+
|
266
|
+
# Log an error message
|
267
|
+
#
|
268
|
+
# @param [Nokogiri::XML::Node, #to_s] node XML Node or string for showing context
|
269
|
+
# @param [String] message
|
270
|
+
# @yieldreturn [String] appended to message, to allow for lazy-evaulation of message
|
271
|
+
def add_error(node, message = "", &block)
|
272
|
+
log_error(node_path(node), message, &block)
|
264
273
|
end
|
265
274
|
|
266
275
|
# add a statement, object can be literal or URI or bnode
|
@@ -272,7 +281,7 @@ module RDF::RDFXML
|
|
272
281
|
# @return [Statement] Added statement
|
273
282
|
# @raise [RDF::ReaderError] Checks parameter types and raises if they are incorrect if validating.
|
274
283
|
def add_triple(node, subject, predicate, object)
|
275
|
-
statement = RDF::Statement
|
284
|
+
statement = RDF::Statement(subject, predicate, object)
|
276
285
|
add_debug(node) {"statement: #{statement}"}
|
277
286
|
@callback.call(statement)
|
278
287
|
end
|
@@ -284,7 +293,7 @@ module RDF::RDFXML
|
|
284
293
|
# @return [RDF::URI] subject The subject found for the node
|
285
294
|
# @raise [RDF::ReaderError] Raises Exception if validating
|
286
295
|
def nodeElement(el, ec)
|
287
|
-
|
296
|
+
log_fatal "el must be a proxy not a #{el.class}" unless el.is_a?(@implementation::NodeProxy)
|
288
297
|
# subject
|
289
298
|
subject = ec.subject || parse_subject(el, ec)
|
290
299
|
|
@@ -308,7 +317,7 @@ module RDF::RDFXML
|
|
308
317
|
elsif is_propertyAttr?(attr)
|
309
318
|
# Attributes not RDF.type
|
310
319
|
predicate = attr.uri
|
311
|
-
lit = RDF::Literal.new(attr.value, :
|
320
|
+
lit = RDF::Literal.new(attr.value, language: ec.language, validate: validate?, canonicalize: canonicalize?)
|
312
321
|
add_triple(attr, subject, predicate, lit)
|
313
322
|
end
|
314
323
|
end
|
@@ -316,7 +325,7 @@ module RDF::RDFXML
|
|
316
325
|
# Handle the propertyEltList children events in document order
|
317
326
|
li_counter = 0 # this will increase for each li we iterate through
|
318
327
|
el.children.each do |child|
|
319
|
-
|
328
|
+
log_fatal "child must be a proxy not a #{child.class}" unless child.is_a?(@implementation::NodeProxy)
|
320
329
|
next unless child.element?
|
321
330
|
child_ec = ec.clone(child) do |prefix, value|
|
322
331
|
prefix(prefix, value)
|
@@ -326,17 +335,17 @@ module RDF::RDFXML
|
|
326
335
|
propertyElementURI_check(child)
|
327
336
|
|
328
337
|
# Determine the content type of this property element
|
329
|
-
|
338
|
+
log_fatal "child must be a proxy not a #{child.class}" unless child.is_a?(@implementation::NodeProxy)
|
330
339
|
|
331
340
|
text_nodes = child.children.select {|e| e.text? && !e.blank?}
|
332
341
|
element_nodes = child.children.select {|c| c.element? }
|
333
342
|
add_debug(child) {"#{text_nodes.to_a.length} text nodes, #{element_nodes.to_a.length} element nodes"}
|
334
343
|
|
335
344
|
text_nodes.each do |node|
|
336
|
-
|
345
|
+
log_fatal "text node must be a proxy not a #{node.class}" unless node.is_a?(@implementation::NodeProxy)
|
337
346
|
end
|
338
347
|
element_nodes.each do |node|
|
339
|
-
|
348
|
+
log_fatal "element node must be a proxy not a #{node.class}" unless node.is_a?(@implementation::NodeProxy)
|
340
349
|
end
|
341
350
|
|
342
351
|
if element_nodes.size > 1
|
@@ -383,10 +392,7 @@ module RDF::RDFXML
|
|
383
392
|
end
|
384
393
|
end
|
385
394
|
|
386
|
-
if nodeID && resourceAttr
|
387
|
-
add_debug(el, "Cannot have rdf:nodeID and rdf:resource.")
|
388
|
-
raise RDF::ReaderError.new("Cannot have rdf:nodeID and rdf:resource.") if validate?
|
389
|
-
end
|
395
|
+
add_error(el, "Cannot have rdf:nodeID and rdf:resource.") if nodeID && resourceAttr
|
390
396
|
|
391
397
|
# Apply character transformations
|
392
398
|
id = id_check(el, RDF::NTriples.unescape(id), nil) if id
|
@@ -407,7 +413,7 @@ module RDF::RDFXML
|
|
407
413
|
prefix(prefix, value)
|
408
414
|
end
|
409
415
|
new_node_element = element_nodes.first
|
410
|
-
|
416
|
+
log_fatal "new_node_element must be a proxy not a #{new_node_element.class}" unless new_node_element.is_a?(@implementation::NodeProxy)
|
411
417
|
add_debug(child) {"resourcePropertyElt: #{node_path(new_node_element)}"}
|
412
418
|
new_subject = nodeElement(new_node_element, new_ec)
|
413
419
|
add_triple(child, subject, predicate, new_subject)
|
@@ -415,7 +421,7 @@ module RDF::RDFXML
|
|
415
421
|
# Production literalPropertyElt
|
416
422
|
add_debug(child, "literalPropertyElt")
|
417
423
|
|
418
|
-
literal_opts = {:
|
424
|
+
literal_opts = {validate: validate?, canonicalize: canonicalize?}
|
419
425
|
if datatype
|
420
426
|
literal_opts[:datatype] = uri(datatype)
|
421
427
|
else
|
@@ -429,9 +435,7 @@ module RDF::RDFXML
|
|
429
435
|
add_debug(child, "parseTypeResourcePropertyElt")
|
430
436
|
|
431
437
|
unless attrs.empty?
|
432
|
-
|
433
|
-
add_debug(child, warn)
|
434
|
-
raise RDF::ReaderError.new(warn) if validate?
|
438
|
+
add_error(child, "Resource Property with extra attributes") {attrs.inspect}
|
435
439
|
end
|
436
440
|
|
437
441
|
# For element e with possibly empty element content c.
|
@@ -454,7 +458,7 @@ module RDF::RDFXML
|
|
454
458
|
node = el.create_node("Description", child.children)
|
455
459
|
node.add_namespace(nil, RDF.to_uri.to_s)
|
456
460
|
add_debug(node) { "uri: #{node.uri}, namespace: #{node.namespace.inspect}"}
|
457
|
-
new_ec = child_ec.clone(nil, :
|
461
|
+
new_ec = child_ec.clone(nil, subject: n) do |prefix, value|
|
458
462
|
prefix(prefix, value)
|
459
463
|
end
|
460
464
|
nodeElement(node, new_ec)
|
@@ -463,9 +467,7 @@ module RDF::RDFXML
|
|
463
467
|
add_debug(child, "parseTypeCollectionPropertyElt")
|
464
468
|
|
465
469
|
unless attrs.empty?
|
466
|
-
|
467
|
-
add_debug(child, warn)
|
468
|
-
raise RDF::ReaderError.new(warn) if validate?
|
470
|
+
add_error(child, "Resource Property with extra attributes") {attrs.inspect}
|
469
471
|
end
|
470
472
|
|
471
473
|
# For element event e with possibly empty nodeElementList l. Set s:=list().
|
@@ -493,27 +495,23 @@ module RDF::RDFXML
|
|
493
495
|
add_debug(child, parseType == "Literal" ? "parseTypeResourcePropertyElt" : "parseTypeOtherPropertyElt (#{parseType})")
|
494
496
|
|
495
497
|
unless attrs.empty?
|
496
|
-
|
497
|
-
add_debug(child, warn)
|
498
|
-
raise RDF::ReaderError.new(warn) if validate?
|
498
|
+
add_error(child, "Resource Property with extra attributes") {attrs.inspect}
|
499
499
|
end
|
500
500
|
|
501
501
|
if resourceAttr
|
502
|
-
|
503
|
-
add_debug(child, warn)
|
504
|
-
raise RDF::ReaderError.new(warn) if validate?
|
502
|
+
add_error(child, "illegal rdf:resource") {resourceAttr.inspect}
|
505
503
|
end
|
506
504
|
|
507
505
|
begin
|
508
506
|
c14nxl = child.children.c14nxl(
|
509
|
-
:
|
510
|
-
:
|
511
|
-
:
|
507
|
+
library: @library,
|
508
|
+
language: ec.language,
|
509
|
+
namespaces: child_ec.uri_mappings)
|
512
510
|
object = RDF::Literal.new(c14nxl,
|
513
|
-
:
|
514
|
-
:
|
515
|
-
:
|
516
|
-
:
|
511
|
+
library: @library,
|
512
|
+
datatype: RDF.XMLLiteral,
|
513
|
+
validate: validate?,
|
514
|
+
canonicalize: canonicalize?)
|
517
515
|
|
518
516
|
add_triple(child, subject, predicate, object)
|
519
517
|
rescue ArgumentError => e
|
@@ -525,7 +523,7 @@ module RDF::RDFXML
|
|
525
523
|
|
526
524
|
if attrs.empty? && resourceAttr.nil? && nodeID.nil?
|
527
525
|
|
528
|
-
literal = RDF::Literal.new("", :
|
526
|
+
literal = RDF::Literal.new("", language: ec.language)
|
529
527
|
add_triple(child, subject, predicate, literal)
|
530
528
|
|
531
529
|
# Reification
|
@@ -550,7 +548,7 @@ module RDF::RDFXML
|
|
550
548
|
next unless is_propertyAttr?(attr)
|
551
549
|
|
552
550
|
# Attributes not in RDF.type
|
553
|
-
lit = RDF::Literal.new(val, :
|
551
|
+
lit = RDF::Literal.new(val, language: child_ec.language)
|
554
552
|
add_triple(child, resource, attr.uri, lit)
|
555
553
|
end
|
556
554
|
end
|
@@ -587,11 +585,9 @@ module RDF::RDFXML
|
|
587
585
|
nodeID = el.attribute_with_ns("nodeID", RDF.to_uri.to_s)
|
588
586
|
|
589
587
|
if nodeID && about
|
590
|
-
|
591
|
-
raise RDF::ReaderError.new("Cannot have rdf:nodeID and rdf:about.") if validate?
|
588
|
+
add_error(el, "Cannot have rdf:nodeID and rdf:about.")
|
592
589
|
elsif nodeID && id
|
593
|
-
|
594
|
-
raise RDF::ReaderError.new("Cannot have rdf:nodeID and rdf:ID.") if validate?
|
590
|
+
add_error(el, "Cannot have rdf:nodeID and rdf:ID.")
|
595
591
|
end
|
596
592
|
|
597
593
|
case
|
@@ -615,19 +611,12 @@ module RDF::RDFXML
|
|
615
611
|
|
616
612
|
# ID attribute must be an NCName
|
617
613
|
def id_check(el, id, base)
|
618
|
-
unless NC_REGEXP.match(id)
|
619
|
-
|
620
|
-
add_debug(el, warn)
|
621
|
-
raise RDF::ReaderError.new(warn) if validate?
|
622
|
-
end
|
614
|
+
add_error(el, "ID addtribute '#{id}' must be a NCName") unless NC_REGEXP.match(id)
|
615
|
+
|
623
616
|
# ID may only be specified once for the same URI
|
624
617
|
if base
|
625
618
|
uri = uri(base, "##{id}")
|
626
|
-
if prefix(id) && RDF::URI(prefix(id)) == uri
|
627
|
-
warn = "ID addtribute '#{id}' may only be defined once for the same URI"
|
628
|
-
add_debug(el, warn)
|
629
|
-
raise RDF::ReaderError.new(warn) if validate?
|
630
|
-
end
|
619
|
+
add_error(el, "ID addtribute '#{id}' may only be defined once for the same URI") if prefix(id) && RDF::URI(prefix(id)) == uri
|
631
620
|
|
632
621
|
RDF::URI(prefix(id, uri))
|
633
622
|
# Returns URI, in this case
|
@@ -642,8 +631,7 @@ module RDF::RDFXML
|
|
642
631
|
if NC_REGEXP.match(nodeID)
|
643
632
|
nodeID
|
644
633
|
else
|
645
|
-
|
646
|
-
raise RDF::ReaderError.new("nodeID addtribute '#{nodeID}' must be a NCName") if validate?
|
634
|
+
add_error(el, "nodeID addtribute '#{nodeID}' must be an XML Name")
|
647
635
|
nil
|
648
636
|
end
|
649
637
|
end
|
@@ -651,9 +639,7 @@ module RDF::RDFXML
|
|
651
639
|
# Is this attribute a Property Attribute?
|
652
640
|
def is_propertyAttr?(attr)
|
653
641
|
if ([RDF.Description.to_s, RDF.li.to_s] + OLD_TERMS).include?(attr.uri.to_s)
|
654
|
-
|
655
|
-
add_debug(attr, warn)
|
656
|
-
raise RDF::ReaderError.new(warn) if validate?
|
642
|
+
add_error(attr, "Invalid use of rdf:#{attr.name}")
|
657
643
|
return false
|
658
644
|
end
|
659
645
|
!CORE_SYNTAX_TERMS.include?(attr.uri.to_s) && attr.namespace && attr.namespace.href != RDF::XML.to_s
|
@@ -662,18 +648,14 @@ module RDF::RDFXML
|
|
662
648
|
# Check Node Element name
|
663
649
|
def nodeElementURI_check(el)
|
664
650
|
if (CORE_SYNTAX_TERMS + [RDF.li.to_s] + OLD_TERMS).include?(el.uri.to_s)
|
665
|
-
|
666
|
-
add_debug(el, warn)
|
667
|
-
raise RDF::ReaderError.new(warn) if validate?
|
651
|
+
add_error(el, "Invalid use of rdf:#{el.name}")
|
668
652
|
end
|
669
653
|
end
|
670
654
|
|
671
655
|
# Check Property Element name
|
672
656
|
def propertyElementURI_check(el)
|
673
657
|
if (CORE_SYNTAX_TERMS + [RDF.Description.to_s] + OLD_TERMS).include?(el.uri.to_s)
|
674
|
-
|
675
|
-
add_debug(el, warn)
|
676
|
-
raise RDF::ReaderError.new(warn) if validate?
|
658
|
+
add_error(el, "Invalid use of rdf:#{el.name}")
|
677
659
|
end
|
678
660
|
end
|
679
661
|
|
@@ -681,8 +663,7 @@ module RDF::RDFXML
|
|
681
663
|
def old_property_check(el)
|
682
664
|
el.attribute_nodes.each do |attr|
|
683
665
|
if OLD_TERMS.include?(attr.uri.to_s)
|
684
|
-
|
685
|
-
raise RDF::ReaderError.new("Obsolete attribute '#{attr.uri}'") if validate?
|
666
|
+
add_error(el) {"Obsolete attribute '#{attr.uri}'"}
|
686
667
|
end
|
687
668
|
end
|
688
669
|
end
|
data/lib/rdf/rdfxml/writer.rb
CHANGED
@@ -13,9 +13,9 @@ module RDF::RDFXML
|
|
13
13
|
# @example Obtaining a RDF/XML writer class
|
14
14
|
# RDF::Writer.for(:rdf) #=> RDF::RDFXML::Writer
|
15
15
|
# RDF::Writer.for("etc/test.rdf")
|
16
|
-
# RDF::Writer.for(:
|
17
|
-
# RDF::Writer.for(:
|
18
|
-
# RDF::Writer.for(:
|
16
|
+
# RDF::Writer.for(file_name: "etc/test.rdf")
|
17
|
+
# RDF::Writer.for(file_extension: "rdf")
|
18
|
+
# RDF::Writer.for(content_type: "application/rdf+xml")
|
19
19
|
#
|
20
20
|
# @example Serializing RDF graph into an RDF/XML file
|
21
21
|
# RDF::RDFXML::Write.open("etc/test.rdf") do |writer|
|
@@ -37,9 +37,9 @@ module RDF::RDFXML
|
|
37
37
|
# end
|
38
38
|
#
|
39
39
|
# @example Creating @base and @prefix definitions in output
|
40
|
-
# RDF::RDFXML::Writer.buffer(:
|
40
|
+
# RDF::RDFXML::Writer.buffer(base_uri: "http://example.com/", prefixes: {
|
41
41
|
# nil => "http://example.com/ns#",
|
42
|
-
# :
|
42
|
+
# foaf: "http://xmlns.com/foaf/0.1/"}
|
43
43
|
# ) do |writer|
|
44
44
|
# graph.each_statement do |statement|
|
45
45
|
# writer << statement
|
@@ -49,9 +49,43 @@ module RDF::RDFXML
|
|
49
49
|
# @author [Gregg Kellogg](http://kellogg-assoc.com/)
|
50
50
|
class Writer < RDF::RDFa::Writer
|
51
51
|
format RDF::RDFXML::Format
|
52
|
+
include RDF::Util::Logger
|
52
53
|
|
53
54
|
VALID_ATTRIBUTES = [:none, :untyped, :typed]
|
54
55
|
|
56
|
+
##
|
57
|
+
# RDF/XML Writer options
|
58
|
+
# @see http://www.rubydoc.info/github/ruby-rdf/rdf/RDF/Writer#options-class_method
|
59
|
+
def self.options
|
60
|
+
super + [
|
61
|
+
RDF::CLI::Option.new(
|
62
|
+
symbol: :attributes,
|
63
|
+
datatype: %w(none untyped typed),
|
64
|
+
on: ["--attributes ATTRIBUTES", %w(none untyped typed)],
|
65
|
+
description: "How to use XML attributes when serializing, one of :none, :untyped, :typed. The default is :none.") {|arg| arg.to_sym},
|
66
|
+
RDF::CLI::Option.new(
|
67
|
+
symbol: :default_namespace,
|
68
|
+
datatype: RDF::URI,
|
69
|
+
on: ["--default-namespace URI", :REQUIRED],
|
70
|
+
description: "URI to use as default namespace, same as prefixes.") {|arg| RDF::URI(arg)},
|
71
|
+
RDF::CLI::Option.new(
|
72
|
+
symbol: :lang,
|
73
|
+
datatype: String,
|
74
|
+
on: ["--lang"],
|
75
|
+
description: "Output as root @lang attribute, and avoid generation _@lang_ where possible."),
|
76
|
+
RDF::CLI::Option.new(
|
77
|
+
symbol: :max_depth,
|
78
|
+
datatype: Integer,
|
79
|
+
on: ["--max-depth"],
|
80
|
+
description: "Maximum depth for recursively defining resources, defaults to 3.") {|arg| arg.to_i},
|
81
|
+
RDF::CLI::Option.new(
|
82
|
+
symbol: :stylesheet,
|
83
|
+
datatype: RDF::URI,
|
84
|
+
on: ["--stylesheet URI", :REQUIRED],
|
85
|
+
description: "URI to use as @href for output stylesheet processing instruction.") {|arg| RDF::URI(arg)},
|
86
|
+
]
|
87
|
+
end
|
88
|
+
|
55
89
|
##
|
56
90
|
# Initializes the RDF/XML writer instance.
|
57
91
|
#
|
@@ -155,7 +189,7 @@ module RDF::RDFXML
|
|
155
189
|
end
|
156
190
|
|
157
191
|
predicates -= attr_props.keys.map {|k| expand_curie(k).to_s}
|
158
|
-
super(subject, predicates, options.merge(:
|
192
|
+
super(subject, predicates, options.merge(attr_props: attr_props), &block)
|
159
193
|
end
|
160
194
|
# See if we can serialize as attribute.
|
161
195
|
# * untyped attributes that aren't duplicated where xml:lang == @lang
|
@@ -195,7 +229,7 @@ module RDF::RDFXML
|
|
195
229
|
# @return String
|
196
230
|
# The rendered document is returned as a string
|
197
231
|
def render_document(subjects, options = {}, &block)
|
198
|
-
super(subjects, options.merge(:
|
232
|
+
super(subjects, options.merge(stylesheet: @options[:stylesheet]), &block)
|
199
233
|
end
|
200
234
|
|
201
235
|
# Render a single- or multi-valued predicate using `haml_template[:property_value]` or `haml_template[:property_values]`. Yields each object for optional rendering. The block should only render for recursive subject definitions (i.e., where the object is also a subject and is rendered underneath the first referencing subject).
|
@@ -223,7 +257,7 @@ module RDF::RDFXML
|
|
223
257
|
# @return String
|
224
258
|
# The rendered document is returned as a string
|
225
259
|
def render_property(predicate, objects, options = {}, &block)
|
226
|
-
|
260
|
+
log_debug {"render_property(#{predicate}): #{objects.inspect}, #{options.inspect}"}
|
227
261
|
# If there are multiple objects, and no :property_values is defined, call recursively with
|
228
262
|
# each object
|
229
263
|
|
@@ -233,19 +267,19 @@ module RDF::RDFXML
|
|
233
267
|
# Separate out the objects which are lists and render separately
|
234
268
|
lists = objects.
|
235
269
|
select(&:node?).
|
236
|
-
map {|o| RDF::List.new(o, @graph)}.
|
270
|
+
map {|o| RDF::List.new(subject: o, graph: @graph)}.
|
237
271
|
select {|l| l.valid? && l.none?(&:literal?)}
|
238
272
|
|
239
273
|
unless lists.empty?
|
240
274
|
# Render non-list objects
|
241
|
-
|
242
|
-
nl =
|
275
|
+
log_debug {"properties with lists: #{lists} non-lists: #{objects - lists.map(&:subject)}"}
|
276
|
+
nl = log_depth {render_property(predicate, objects - lists.map(&:subject), options, &block)} unless objects == lists.map(&:subject)
|
243
277
|
return nl.to_s + lists.map do |list|
|
244
278
|
# Render each list as multiple properties and set :inlist to true
|
245
279
|
list.each_statement {|st| subject_done(st.subject)}
|
246
280
|
|
247
|
-
|
248
|
-
|
281
|
+
log_debug {"list: #{list.inspect} #{list.to_a}"}
|
282
|
+
log_depth do
|
249
283
|
render_collection(predicate, list, options) do |object|
|
250
284
|
yield(object, true) if block_given?
|
251
285
|
end
|
@@ -256,16 +290,16 @@ module RDF::RDFXML
|
|
256
290
|
if objects.length > 1
|
257
291
|
# Render each property using property_value template
|
258
292
|
objects.map do |object|
|
259
|
-
|
293
|
+
log_depth {render_property(predicate, [object], options, &block)}
|
260
294
|
end.join(" ")
|
261
295
|
else
|
262
|
-
|
296
|
+
log_fatal("Missing property template", exception: RDF::WriterError) if template.nil?
|
263
297
|
|
264
298
|
options = {
|
265
299
|
object: objects.first,
|
266
300
|
predicate: predicate,
|
267
301
|
property: get_qname(predicate),
|
268
|
-
recurse:
|
302
|
+
recurse: log_depth <= @max_depth
|
269
303
|
}.merge(options)
|
270
304
|
hamlify(template, options, &block)
|
271
305
|
end
|
@@ -292,7 +326,7 @@ module RDF::RDFXML
|
|
292
326
|
list: list,
|
293
327
|
predicate: predicate,
|
294
328
|
property: get_qname(predicate),
|
295
|
-
recurse:
|
329
|
+
recurse: log_depth <= @max_depth,
|
296
330
|
}.merge(options)
|
297
331
|
hamlify(template, options) do |object|
|
298
332
|
yield object
|
@@ -365,7 +399,7 @@ module RDF::RDFXML
|
|
365
399
|
base_uri = uri.to_s[0..separation]
|
366
400
|
suffix = uri.to_s[separation+1..-1]
|
367
401
|
@gen_prefix = @gen_prefix ? @gen_prefix.succ : "ns0"
|
368
|
-
|
402
|
+
log_debug {"ensure_curie: generated prefix #{@gen_prefix} for #{base_uri}"}
|
369
403
|
@uri_to_prefix[base_uri] = @gen_prefix
|
370
404
|
@uri_to_term_or_curie[uri] = "#{@gen_prefix}:#{suffix}"
|
371
405
|
prefix(@gen_prefix, base_uri)
|
@@ -3,11 +3,11 @@ module RDF::RDFXML
|
|
3
3
|
class Writer
|
4
4
|
# The default set of HAML templates used for RDFa code generation
|
5
5
|
BASE_HAML = {
|
6
|
-
:
|
6
|
+
identifier: "base",
|
7
7
|
# Document
|
8
8
|
# Locals: lang, title, prefix, base, subjects
|
9
9
|
# Yield: subjects.each
|
10
|
-
:
|
10
|
+
doc: %q(
|
11
11
|
= %(<?xml version='1.0' encoding='utf-8' ?>)
|
12
12
|
- if stylesheet
|
13
13
|
= %(<?xml-stylesheet type="text/xsl" href="#{stylesheet}"?>)
|
@@ -25,7 +25,7 @@ module RDF::RDFXML
|
|
25
25
|
#
|
26
26
|
# Locals: subject, typeof, predicates, rel, element, inlist, attr_props
|
27
27
|
# Yield: predicates.each
|
28
|
-
:
|
28
|
+
subject: %q(
|
29
29
|
- first_type, *types = typeof.to_s.split(' ')
|
30
30
|
- (types.unshift(first_type); first_type = nil) if first_type && (first_type.include?('/') || first_type.start_with?('_:'))
|
31
31
|
- first_type ||= get_qname(RDF.Description)
|
@@ -38,8 +38,7 @@ module RDF::RDFXML
|
|
38
38
|
- if expanded_type.start_with?('_:')
|
39
39
|
- haml_tag(get_qname(RDF.type), "rdf:nodeID" => expanded_type[2..-1])
|
40
40
|
-else
|
41
|
-
-
|
42
|
-
- haml_tag(get_qname(RDF.type), "", "rdf:resource" => expanded_type)
|
41
|
+
- haml_tag(get_qname(RDF.type), "rdf:resource" => expanded_type)
|
43
42
|
- predicates.each do |p|
|
44
43
|
= yield(p)
|
45
44
|
),
|
@@ -49,7 +48,7 @@ module RDF::RDFXML
|
|
49
48
|
# Yields: object
|
50
49
|
# If nil is returned, render as a leaf
|
51
50
|
# Otherwise, render result
|
52
|
-
:
|
51
|
+
property_value: %q(
|
53
52
|
- if recurse && res = yield(object)
|
54
53
|
- haml_tag(property) do
|
55
54
|
= res
|
@@ -60,11 +59,9 @@ module RDF::RDFXML
|
|
60
59
|
- haml_tag(property, :"<", "xml:lang" => object.language, "rdf:datatype" => (object.datatype unless object.plain?)) do
|
61
60
|
= object.value.to_s.encode(xml: :text)
|
62
61
|
- elsif object.node?
|
63
|
-
-
|
64
|
-
- haml_tag(property, "", "rdf:nodeID" => object.id)
|
62
|
+
- haml_tag(property, :"/", "rdf:nodeID" => object.id)
|
65
63
|
- else
|
66
|
-
-
|
67
|
-
- haml_tag(property, "", "rdf:resource" => relativize(object))
|
64
|
+
- haml_tag(property, :"/", "rdf:resource" => relativize(object))
|
68
65
|
),
|
69
66
|
|
70
67
|
# Outpust for a list
|
@@ -72,20 +69,18 @@ module RDF::RDFXML
|
|
72
69
|
# Yields: object
|
73
70
|
# If nil is returned, render as a leaf
|
74
71
|
# Otherwise, render result
|
75
|
-
:
|
72
|
+
collection: %q(
|
76
73
|
- haml_tag(property, get_qname(RDF.parseType) => "Collection") do
|
77
74
|
- list.each do |object|
|
78
75
|
- if recurse && res = yield(object)
|
79
76
|
= res
|
80
77
|
- elsif object.node?
|
81
|
-
-
|
82
|
-
- haml_tag(get_qname(RDF.Description), "", "rdf:nodeID" => (object.id if ref_count(object) > 1))
|
78
|
+
- haml_tag(get_qname(RDF.Description), :"/", "rdf:nodeID" => (object.id if ref_count(object) > 1))
|
83
79
|
- else
|
84
|
-
-
|
85
|
-
- haml_tag(get_qname(RDF.Description), "", "rdf:about" => relativize(object))
|
80
|
+
- haml_tag(get_qname(RDF.Description), :"/", "rdf:about" => relativize(object))
|
86
81
|
),
|
87
82
|
}
|
88
|
-
HAML_TEMPLATES = {:
|
83
|
+
HAML_TEMPLATES = {base: BASE_HAML}
|
89
84
|
DEFAULT_HAML = BASE_HAML
|
90
85
|
end
|
91
86
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-rdfxml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg
|
@@ -9,50 +9,68 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-02-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdf
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 2.0.0.beta
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '3'
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
|
-
- - "
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 2.0.0.beta
|
31
|
+
- - "<"
|
26
32
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
33
|
+
version: '3'
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
35
|
name: rdf-rdfa
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
31
37
|
requirements:
|
32
|
-
- - "
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.0.0.beta
|
41
|
+
- - "<"
|
33
42
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
43
|
+
version: '3'
|
35
44
|
type: :runtime
|
36
45
|
prerelease: false
|
37
46
|
version_requirements: !ruby/object:Gem::Requirement
|
38
47
|
requirements:
|
39
|
-
- - "
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 2.0.0.beta
|
51
|
+
- - "<"
|
40
52
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
53
|
+
version: '3'
|
42
54
|
- !ruby/object:Gem::Dependency
|
43
55
|
name: rdf-xsd
|
44
56
|
requirement: !ruby/object:Gem::Requirement
|
45
57
|
requirements:
|
46
|
-
- - "
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 2.0.0.beta
|
61
|
+
- - "<"
|
47
62
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
63
|
+
version: '3'
|
49
64
|
type: :runtime
|
50
65
|
prerelease: false
|
51
66
|
version_requirements: !ruby/object:Gem::Requirement
|
52
67
|
requirements:
|
53
|
-
- - "
|
68
|
+
- - ">="
|
54
69
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
70
|
+
version: 2.0.0.beta
|
71
|
+
- - "<"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '3'
|
56
74
|
- !ruby/object:Gem::Dependency
|
57
75
|
name: htmlentities
|
58
76
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,100 +123,130 @@ dependencies:
|
|
105
123
|
name: json-ld
|
106
124
|
requirement: !ruby/object:Gem::Requirement
|
107
125
|
requirements:
|
108
|
-
- - "
|
126
|
+
- - ">="
|
109
127
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
128
|
+
version: 2.0.0.beta
|
129
|
+
- - "<"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3'
|
111
132
|
type: :development
|
112
133
|
prerelease: false
|
113
134
|
version_requirements: !ruby/object:Gem::Requirement
|
114
135
|
requirements:
|
115
|
-
- - "
|
136
|
+
- - ">="
|
116
137
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
138
|
+
version: 2.0.0.beta
|
139
|
+
- - "<"
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '3'
|
118
142
|
- !ruby/object:Gem::Dependency
|
119
143
|
name: rspec
|
120
144
|
requirement: !ruby/object:Gem::Requirement
|
121
145
|
requirements:
|
122
146
|
- - "~>"
|
123
147
|
- !ruby/object:Gem::Version
|
124
|
-
version: '3.
|
148
|
+
version: '3.4'
|
125
149
|
type: :development
|
126
150
|
prerelease: false
|
127
151
|
version_requirements: !ruby/object:Gem::Requirement
|
128
152
|
requirements:
|
129
153
|
- - "~>"
|
130
154
|
- !ruby/object:Gem::Version
|
131
|
-
version: '3.
|
155
|
+
version: '3.4'
|
132
156
|
- !ruby/object:Gem::Dependency
|
133
157
|
name: rspec-its
|
134
158
|
requirement: !ruby/object:Gem::Requirement
|
135
159
|
requirements:
|
136
160
|
- - "~>"
|
137
161
|
- !ruby/object:Gem::Version
|
138
|
-
version: '1.
|
162
|
+
version: '1.2'
|
139
163
|
type: :development
|
140
164
|
prerelease: false
|
141
165
|
version_requirements: !ruby/object:Gem::Requirement
|
142
166
|
requirements:
|
143
167
|
- - "~>"
|
144
168
|
- !ruby/object:Gem::Version
|
145
|
-
version: '1.
|
169
|
+
version: '1.2'
|
146
170
|
- !ruby/object:Gem::Dependency
|
147
171
|
name: rdf-isomorphic
|
148
172
|
requirement: !ruby/object:Gem::Requirement
|
149
173
|
requirements:
|
150
|
-
- - "
|
174
|
+
- - ">="
|
151
175
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
176
|
+
version: 2.0.0.beta
|
177
|
+
- - "<"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '3'
|
153
180
|
type: :development
|
154
181
|
prerelease: false
|
155
182
|
version_requirements: !ruby/object:Gem::Requirement
|
156
183
|
requirements:
|
157
|
-
- - "
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: 2.0.0.beta
|
187
|
+
- - "<"
|
158
188
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
189
|
+
version: '3'
|
160
190
|
- !ruby/object:Gem::Dependency
|
161
191
|
name: rdf-turtle
|
162
192
|
requirement: !ruby/object:Gem::Requirement
|
163
193
|
requirements:
|
164
|
-
- - "
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: 2.0.0.beta
|
197
|
+
- - "<"
|
165
198
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
199
|
+
version: '3'
|
167
200
|
type: :development
|
168
201
|
prerelease: false
|
169
202
|
version_requirements: !ruby/object:Gem::Requirement
|
170
203
|
requirements:
|
171
|
-
- - "
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: 2.0.0.beta
|
207
|
+
- - "<"
|
172
208
|
- !ruby/object:Gem::Version
|
173
|
-
version: '
|
209
|
+
version: '3'
|
174
210
|
- !ruby/object:Gem::Dependency
|
175
211
|
name: rdf-spec
|
176
212
|
requirement: !ruby/object:Gem::Requirement
|
177
213
|
requirements:
|
178
|
-
- - "
|
214
|
+
- - ">="
|
215
|
+
- !ruby/object:Gem::Version
|
216
|
+
version: 2.0.0.beta
|
217
|
+
- - "<"
|
179
218
|
- !ruby/object:Gem::Version
|
180
|
-
version: '
|
219
|
+
version: '3'
|
181
220
|
type: :development
|
182
221
|
prerelease: false
|
183
222
|
version_requirements: !ruby/object:Gem::Requirement
|
184
223
|
requirements:
|
185
|
-
- - "
|
224
|
+
- - ">="
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: 2.0.0.beta
|
227
|
+
- - "<"
|
186
228
|
- !ruby/object:Gem::Version
|
187
|
-
version: '
|
229
|
+
version: '3'
|
188
230
|
- !ruby/object:Gem::Dependency
|
189
231
|
name: rdf-vocab
|
190
232
|
requirement: !ruby/object:Gem::Requirement
|
191
233
|
requirements:
|
192
|
-
- - "
|
234
|
+
- - ">="
|
193
235
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
236
|
+
version: 2.0.0.beta
|
237
|
+
- - "<"
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: '3'
|
195
240
|
type: :development
|
196
241
|
prerelease: false
|
197
242
|
version_requirements: !ruby/object:Gem::Requirement
|
198
243
|
requirements:
|
199
|
-
- - "
|
244
|
+
- - ">="
|
200
245
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
246
|
+
version: 2.0.0.beta
|
247
|
+
- - "<"
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '3'
|
202
250
|
- !ruby/object:Gem::Dependency
|
203
251
|
name: yard
|
204
252
|
requirement: !ruby/object:Gem::Requirement
|
@@ -237,7 +285,7 @@ files:
|
|
237
285
|
- lib/rdf/rdfxml/writer/haml_templates.rb
|
238
286
|
homepage: http://ruby-rdf.github.com/rdf-rdfxml
|
239
287
|
licenses:
|
240
|
-
-
|
288
|
+
- Unlicense
|
241
289
|
metadata: {}
|
242
290
|
post_install_message:
|
243
291
|
rdoc_options: []
|
@@ -247,16 +295,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
247
295
|
requirements:
|
248
296
|
- - ">="
|
249
297
|
- !ruby/object:Gem::Version
|
250
|
-
version:
|
298
|
+
version: '2.0'
|
251
299
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
252
300
|
requirements:
|
253
|
-
- - "
|
301
|
+
- - ">"
|
254
302
|
- !ruby/object:Gem::Version
|
255
|
-
version:
|
303
|
+
version: 1.3.1
|
256
304
|
requirements: []
|
257
305
|
rubyforge_project: rdf-rdfxml
|
258
|
-
rubygems_version: 2.
|
306
|
+
rubygems_version: 2.5.1
|
259
307
|
signing_key:
|
260
308
|
specification_version: 4
|
261
309
|
summary: RDF/XML reader/writer for RDF.rb.
|
262
310
|
test_files: []
|
311
|
+
has_rdoc: false
|