rdf-rdfxml 1.99.1 → 2.0.0.beta1
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 +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
|