rdf-rdfxml 0.2.1 → 0.2.2
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.
- data/History.txt +13 -0
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/etc/doap.nt +47 -0
- data/etc/doap.xml +73 -0
- data/lib/rdf/rdfxml.rb +0 -1
- data/lib/rdf/rdfxml/patches/literal_hacks.rb +19 -8
- data/lib/rdf/rdfxml/patches/seq.rb +1 -1
- data/lib/rdf/rdfxml/patches/uri_hacks.rb +6 -0
- data/lib/rdf/rdfxml/reader.rb +14 -8
- data/lib/rdf/rdfxml/version.rb +1 -1
- data/lib/rdf/rdfxml/writer.rb +13 -18
- data/rdf-rdfxml.gemspec +14 -13
- data/script/console +2 -2
- data/script/parse +49 -0
- data/spec/literal_spec.rb +176 -3
- data/spec/rdf-iso-falure.rb +35 -0
- data/spec/reader_spec.rb +16 -9
- data/spec/uri_spec.rb +47 -34
- data/spec/writer_spec.rb +5 -2
- metadata +30 -11
- data/lib/rdf/rdfxml/patches/rdf_escape.rb +0 -131
- data/spec/rdf_escape_spec.rb +0 -36
data/spec/writer_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
require 'rdf/spec/writer'
|
2
3
|
autoload :CGI, 'cgi'
|
3
4
|
|
4
5
|
class FOO < RDF::Vocabulary("http://foo/"); end
|
@@ -6,8 +7,11 @@ class FOO < RDF::Vocabulary("http://foo/"); end
|
|
6
7
|
describe "RDF::RDFXML::Writer" do
|
7
8
|
before(:each) do
|
8
9
|
@graph = RDF::Graph.new
|
10
|
+
@writer = RDF::RDFXML::Writer
|
9
11
|
end
|
10
12
|
|
13
|
+
it_should_behave_like RDF_Writer
|
14
|
+
|
11
15
|
describe "with types" do
|
12
16
|
it "should serialize resource without type" do
|
13
17
|
@graph << [RDF::URI.new("http://release/"), RDF::DC.title, "foo"]
|
@@ -290,7 +294,6 @@ describe "RDF::RDFXML::Writer" do
|
|
290
294
|
end
|
291
295
|
end
|
292
296
|
|
293
|
-
# FIXME
|
294
297
|
describe "with default namespace" do
|
295
298
|
it "should serialize with default namespace" do
|
296
299
|
@graph << [RDF::URI.new("http://release/"), RDF.type, FOO.Release]
|
@@ -381,7 +384,7 @@ describe "RDF::RDFXML::Writer" do
|
|
381
384
|
# Serialize ntstr to a string and compare against regexps
|
382
385
|
def serialize(options = {})
|
383
386
|
@debug = []
|
384
|
-
result =
|
387
|
+
result = @writer.buffer(options.merge(:debug => @debug)) do |writer|
|
385
388
|
writer << @graph
|
386
389
|
end
|
387
390
|
puts @debug.join("\n") if $DEBUG
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-rdfxml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Gregg Kellogg
|
@@ -14,30 +15,34 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-08-03 00:00:00 -07:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: rdf
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 19
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
- 2
|
30
|
-
-
|
31
|
-
version: 0.2.
|
33
|
+
- 2
|
34
|
+
version: 0.2.2
|
32
35
|
type: :runtime
|
33
36
|
version_requirements: *id001
|
34
37
|
- !ruby/object:Gem::Dependency
|
35
38
|
name: nokogiri
|
36
39
|
prerelease: false
|
37
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
38
42
|
requirements:
|
39
43
|
- - ">="
|
40
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 29
|
41
46
|
segments:
|
42
47
|
- 1
|
43
48
|
- 3
|
@@ -49,9 +54,11 @@ dependencies:
|
|
49
54
|
name: rspec
|
50
55
|
prerelease: false
|
51
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
52
58
|
requirements:
|
53
59
|
- - ">="
|
54
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
55
62
|
segments:
|
56
63
|
- 0
|
57
64
|
version: "0"
|
@@ -61,23 +68,27 @@ dependencies:
|
|
61
68
|
name: rdf-spec
|
62
69
|
prerelease: false
|
63
70
|
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
64
72
|
requirements:
|
65
73
|
- - ">="
|
66
74
|
- !ruby/object:Gem::Version
|
75
|
+
hash: 19
|
67
76
|
segments:
|
68
77
|
- 0
|
69
78
|
- 2
|
70
|
-
-
|
71
|
-
version: 0.2.
|
79
|
+
- 2
|
80
|
+
version: 0.2.2
|
72
81
|
type: :development
|
73
82
|
version_requirements: *id004
|
74
83
|
- !ruby/object:Gem::Dependency
|
75
84
|
name: rdf-isomorphic
|
76
85
|
prerelease: false
|
77
86
|
requirement: &id005 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
78
88
|
requirements:
|
79
89
|
- - ">="
|
80
90
|
- !ruby/object:Gem::Version
|
91
|
+
hash: 3
|
81
92
|
segments:
|
82
93
|
- 0
|
83
94
|
version: "0"
|
@@ -87,9 +98,11 @@ dependencies:
|
|
87
98
|
name: yard
|
88
99
|
prerelease: false
|
89
100
|
requirement: &id006 !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
90
102
|
requirements:
|
91
103
|
- - ">="
|
92
104
|
- !ruby/object:Gem::Version
|
105
|
+
hash: 3
|
93
106
|
segments:
|
94
107
|
- 0
|
95
108
|
version: "0"
|
@@ -115,6 +128,8 @@ files:
|
|
115
128
|
- README.rdoc
|
116
129
|
- Rakefile
|
117
130
|
- VERSION
|
131
|
+
- etc/doap.nt
|
132
|
+
- etc/doap.xml
|
118
133
|
- example.rb
|
119
134
|
- lib/rdf/rdfxml.rb
|
120
135
|
- lib/rdf/rdfxml/format.rb
|
@@ -123,7 +138,6 @@ files:
|
|
123
138
|
- lib/rdf/rdfxml/patches/literal_hacks.rb
|
124
139
|
- lib/rdf/rdfxml/patches/nokogiri_hacks.rb
|
125
140
|
- lib/rdf/rdfxml/patches/qname_hacks.rb
|
126
|
-
- lib/rdf/rdfxml/patches/rdf_escape.rb
|
127
141
|
- lib/rdf/rdfxml/patches/seq.rb
|
128
142
|
- lib/rdf/rdfxml/patches/uri_hacks.rb
|
129
143
|
- lib/rdf/rdfxml/reader.rb
|
@@ -132,11 +146,11 @@ files:
|
|
132
146
|
- lib/rdf/rdfxml/writer.rb
|
133
147
|
- rdf-rdfxml.gemspec
|
134
148
|
- script/console
|
149
|
+
- script/parse
|
135
150
|
- spec/format_spec.rb
|
136
151
|
- spec/graph_spec.rb
|
137
152
|
- spec/literal_spec.rb
|
138
153
|
- spec/matchers.rb
|
139
|
-
- spec/rdf_escape_spec.rb
|
140
154
|
- spec/rdf_helper.rb
|
141
155
|
- spec/rdf_tests/cc197bad-dc9c-440d-a5b5-d52ba2e14234.nt
|
142
156
|
- spec/rdf_tests/cc197bad-dc9c-440d-a5b5-d52ba2e14234.rdf
|
@@ -502,6 +516,7 @@ files:
|
|
502
516
|
- spec/spec_helper.rb
|
503
517
|
- spec/uri_spec.rb
|
504
518
|
- spec/writer_spec.rb
|
519
|
+
- spec/rdf-iso-falure.rb
|
505
520
|
has_rdoc: true
|
506
521
|
homepage: http://github.com/gkellogg/rdf-rdfxml
|
507
522
|
licenses: []
|
@@ -512,23 +527,27 @@ rdoc_options:
|
|
512
527
|
require_paths:
|
513
528
|
- lib
|
514
529
|
required_ruby_version: !ruby/object:Gem::Requirement
|
530
|
+
none: false
|
515
531
|
requirements:
|
516
532
|
- - ">="
|
517
533
|
- !ruby/object:Gem::Version
|
534
|
+
hash: 3
|
518
535
|
segments:
|
519
536
|
- 0
|
520
537
|
version: "0"
|
521
538
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
539
|
+
none: false
|
522
540
|
requirements:
|
523
541
|
- - ">="
|
524
542
|
- !ruby/object:Gem::Version
|
543
|
+
hash: 3
|
525
544
|
segments:
|
526
545
|
- 0
|
527
546
|
version: "0"
|
528
547
|
requirements: []
|
529
548
|
|
530
549
|
rubyforge_project:
|
531
|
-
rubygems_version: 1.3.
|
550
|
+
rubygems_version: 1.3.7
|
532
551
|
signing_key:
|
533
552
|
specification_version: 3
|
534
553
|
summary: RDF/XML reader/writer for RDF.rb.
|
@@ -537,7 +556,7 @@ test_files:
|
|
537
556
|
- spec/graph_spec.rb
|
538
557
|
- spec/literal_spec.rb
|
539
558
|
- spec/matchers.rb
|
540
|
-
- spec/
|
559
|
+
- spec/rdf-iso-falure.rb
|
541
560
|
- spec/rdf_helper.rb
|
542
561
|
- spec/reader_spec.rb
|
543
562
|
- spec/spec_helper.rb
|
@@ -1,131 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require 'iconv'
|
3
|
-
|
4
|
-
class String
|
5
|
-
#private
|
6
|
-
# "Borrowed" from JSON utf8_to_json
|
7
|
-
RDF_MAP = {
|
8
|
-
"\x0" => '\u0000',
|
9
|
-
"\x1" => '\u0001',
|
10
|
-
"\x2" => '\u0002',
|
11
|
-
"\x3" => '\u0003',
|
12
|
-
"\x4" => '\u0004',
|
13
|
-
"\x5" => '\u0005',
|
14
|
-
"\x6" => '\u0006',
|
15
|
-
"\x7" => '\u0007',
|
16
|
-
"\b" => '\b',
|
17
|
-
"\t" => '\t',
|
18
|
-
"\n" => '\n',
|
19
|
-
"\xb" => '\u000B',
|
20
|
-
"\f" => '\f',
|
21
|
-
"\r" => '\r',
|
22
|
-
"\xe" => '\u000E',
|
23
|
-
"\xf" => '\u000F',
|
24
|
-
"\x10" => '\u0010',
|
25
|
-
"\x11" => '\u0011',
|
26
|
-
"\x12" => '\u0012',
|
27
|
-
"\x13" => '\u0013',
|
28
|
-
"\x14" => '\u0014',
|
29
|
-
"\x15" => '\u0015',
|
30
|
-
"\x16" => '\u0016',
|
31
|
-
"\x17" => '\u0017',
|
32
|
-
"\x18" => '\u0018',
|
33
|
-
"\x19" => '\u0019',
|
34
|
-
"\x1a" => '\u001A',
|
35
|
-
"\x1b" => '\u001B',
|
36
|
-
"\x1c" => '\u001C',
|
37
|
-
"\x1d" => '\u001D',
|
38
|
-
"\x1e" => '\u001E',
|
39
|
-
"\x1f" => '\u001F',
|
40
|
-
'"' => '\"',
|
41
|
-
'\\' => '\\\\',
|
42
|
-
'/' => '/',
|
43
|
-
} # :nodoc:
|
44
|
-
|
45
|
-
if defined?(::Encoding)
|
46
|
-
# Funky way to define constant, but if parsed in 1.8 it generates an 'invalid regular expression' error otherwise
|
47
|
-
eval %(ESCAPE_RE = %r([\u{80}-\u{10ffff}]))
|
48
|
-
else
|
49
|
-
ESCAPE_RE = %r(
|
50
|
-
[\xc2-\xdf][\x80-\xbf] |
|
51
|
-
[\xe0-\xef][\x80-\xbf]{2} |
|
52
|
-
[\xf0-\xf4][\x80-\xbf]{3}
|
53
|
-
)nx
|
54
|
-
end
|
55
|
-
|
56
|
-
# Convert a UTF8 encoded Ruby string _string_ to an escaped string, encoded with
|
57
|
-
# UTF16 big endian characters as \U????, and return it.
|
58
|
-
#
|
59
|
-
# \\:: Backslash
|
60
|
-
# \':: Single quote
|
61
|
-
# \":: Double quot
|
62
|
-
# \n:: ASCII Linefeed
|
63
|
-
# \r:: ASCII Carriage Return
|
64
|
-
# \t:: ASCCII Horizontal Tab
|
65
|
-
# \uhhhh:: character in BMP with Unicode value U+hhhh
|
66
|
-
# \U00hhhhhh:: character in plane 1-16 with Unicode value U+hhhhhh
|
67
|
-
def rdf_escape
|
68
|
-
string = self + '' # XXX workaround: avoid buffer sharing
|
69
|
-
string.gsub!(/["\\\/\x0-\x1f]/) { RDF_MAP[$&] }
|
70
|
-
if defined?(::Encoding)
|
71
|
-
string.force_encoding(Encoding::UTF_8)
|
72
|
-
string.gsub!(ESCAPE_RE) { |c|
|
73
|
-
s = c.dump.sub(/\"\\u\{(.+)\}\"/, '\1').upcase
|
74
|
-
(s.length <= 4 ? "\\u0000"[0,6-s.length] : "\\U00000000"[0,10-s.length]) + s
|
75
|
-
}
|
76
|
-
string.force_encoding(Encoding::ASCII_8BIT)
|
77
|
-
else
|
78
|
-
string.gsub!(ESCAPE_RE) { |c|
|
79
|
-
s = Iconv.new('utf-16be', 'utf-8').iconv(c).unpack('H*').first.upcase
|
80
|
-
"\\u" + s
|
81
|
-
}
|
82
|
-
end
|
83
|
-
string
|
84
|
-
end
|
85
|
-
|
86
|
-
# Unescape characters in strings.
|
87
|
-
RDF_UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
|
88
|
-
RDF_UNESCAPE_MAP.update({
|
89
|
-
?" => '"',
|
90
|
-
?\\ => '\\',
|
91
|
-
?/ => '/',
|
92
|
-
?b => "\b",
|
93
|
-
?f => "\f",
|
94
|
-
?n => "\n",
|
95
|
-
?r => "\r",
|
96
|
-
?t => "\t",
|
97
|
-
?u => nil,
|
98
|
-
})
|
99
|
-
|
100
|
-
if defined?(::Encoding)
|
101
|
-
UNESCAPE_RE = %r(
|
102
|
-
(?:\\[\\bfnrt"/]) # Escaped control characters, " and /
|
103
|
-
|(?:\\U00\h{6}) # 6 byte escaped Unicode
|
104
|
-
|(?:\\u\h{4}) # 4 byte escaped Unicode
|
105
|
-
)x
|
106
|
-
else
|
107
|
-
UNESCAPE_RE = %r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n
|
108
|
-
end
|
109
|
-
|
110
|
-
# Reverse operation of escape
|
111
|
-
# From JSON parser
|
112
|
-
def rdf_unescape
|
113
|
-
return '' if self.empty?
|
114
|
-
string = self.gsub(UNESCAPE_RE) do |c|
|
115
|
-
case c[1,1]
|
116
|
-
when 'U'
|
117
|
-
raise RDF::ReaderError, "Long Unicode escapes no supported in Ruby 1.8" unless defined?(::Encoding)
|
118
|
-
eval(c.sub(/\\U00(\h+)/, '"\u{\1}"'))
|
119
|
-
when 'u'
|
120
|
-
bytes = [c[2, 2].to_i(16), c[4, 2].to_i(16)]
|
121
|
-
Iconv.new('utf-8', 'utf-16').iconv(bytes.pack("C*"))
|
122
|
-
else
|
123
|
-
RDF_UNESCAPE_MAP[c[1]]
|
124
|
-
end
|
125
|
-
end
|
126
|
-
string.force_encoding(Encoding::UTF_8) if defined?(::Encoding)
|
127
|
-
string
|
128
|
-
rescue Iconv::Failure => e
|
129
|
-
raise RDF::ReaderError, "Caught #{e.class}: #{e}"
|
130
|
-
end
|
131
|
-
end unless String.method_defined?(:rdf_escape)
|
data/spec/rdf_escape_spec.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
|
-
|
4
|
-
describe "String RDF encoding" do
|
5
|
-
{
|
6
|
-
"Gregg" => 'Gregg',
|
7
|
-
"Dürst" => 'D\u00FCrst',
|
8
|
-
"simple literal" => 'simple literal',
|
9
|
-
"backslash:\\" => 'backslash:\\\\',
|
10
|
-
"dquote:\"" => 'dquote:\\"',
|
11
|
-
"newline:\n" => 'newline:\\n',
|
12
|
-
"return:\r" => 'return:\\r',
|
13
|
-
"tab:\t" => 'tab:\\t',
|
14
|
-
}.each_pair do |raw, encoded|
|
15
|
-
specify "'#{raw}' should escape to '#{encoded}'" do
|
16
|
-
raw.rdf_escape.should == encoded
|
17
|
-
end
|
18
|
-
|
19
|
-
specify "'#{encoded}' should unescape to '#{raw}'" do
|
20
|
-
encoded.rdf_unescape.should == raw
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# 16-bit string encodings
|
25
|
-
{
|
26
|
-
"16-bit:\u{15678}another" => '16-bit:\\U00015678another',
|
27
|
-
}.each_pair do |raw, encoded|
|
28
|
-
specify "'#{raw}' should escape to '#{encoded}'" do
|
29
|
-
raw.rdf_escape.should == encoded
|
30
|
-
end
|
31
|
-
|
32
|
-
specify "'#{encoded}' should unescape to '#{raw}'" do
|
33
|
-
encoded.rdf_unescape.should == raw
|
34
|
-
end
|
35
|
-
end if defined?(::Encoding)
|
36
|
-
end
|