rdf-spec 0.2.3 → 0.3.0
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/AUTHORS +1 -0
- data/CREDITS +1 -0
- data/README +12 -11
- data/VERSION +1 -1
- data/etc/doap.nt +28 -10
- data/lib/rdf/spec.rb +5 -4
- data/lib/rdf/spec/countable.rb +0 -1
- data/lib/rdf/spec/durable.rb +0 -1
- data/lib/rdf/spec/enumerable.rb +2 -3
- data/lib/rdf/spec/format.rb +0 -1
- data/lib/rdf/spec/graph.rb +0 -1
- data/lib/rdf/spec/indexable.rb +7 -0
- data/lib/rdf/spec/inferable.rb +7 -0
- data/lib/rdf/spec/list.rb +0 -1
- data/lib/rdf/spec/literal.rb +449 -291
- data/lib/rdf/spec/matchers.rb +4 -4
- data/lib/rdf/spec/mutable.rb +0 -1
- data/lib/rdf/spec/node.rb +0 -1
- data/lib/rdf/spec/query.rb +0 -1
- data/lib/rdf/spec/queryable.rb +3 -4
- data/lib/rdf/spec/readable.rb +0 -1
- data/lib/rdf/spec/reader.rb +0 -1
- data/lib/rdf/spec/repository.rb +0 -1
- data/lib/rdf/spec/resource.rb +0 -1
- data/lib/rdf/spec/statement.rb +0 -1
- data/lib/rdf/spec/term.rb +7 -0
- data/lib/rdf/spec/transaction.rb +7 -0
- data/lib/rdf/spec/uri.rb +125 -1
- data/lib/rdf/spec/value.rb +0 -1
- data/lib/rdf/spec/version.rb +2 -2
- data/lib/rdf/spec/vocab.rb +0 -1
- data/lib/rdf/spec/writable.rb +0 -1
- data/lib/rdf/spec/writer.rb +0 -1
- data/spec/spec_helper.rb +3 -0
- metadata +27 -23
- data/CONTRIBUTORS +0 -2
data/AUTHORS
CHANGED
data/CREDITS
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* John Fieber <jrf@ursamaris.org>
|
data/README
CHANGED
|
@@ -15,14 +15,14 @@ Documentation
|
|
|
15
15
|
Dependencies
|
|
16
16
|
------------
|
|
17
17
|
|
|
18
|
-
* [RDF.rb](http://
|
|
19
|
-
* [RSpec](http://
|
|
18
|
+
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.3.0)
|
|
19
|
+
* [RSpec](http://rubygems.org/gems/rspec) (>= 2.1.0)
|
|
20
20
|
|
|
21
21
|
Installation
|
|
22
22
|
------------
|
|
23
23
|
|
|
24
24
|
The recommended installation method is via [RubyGems](http://rubygems.org/).
|
|
25
|
-
To install the latest official release of `RDF::Spec
|
|
25
|
+
To install the latest official release of the `RDF::Spec` gem, do:
|
|
26
26
|
|
|
27
27
|
% [sudo] gem install rdf-spec
|
|
28
28
|
|
|
@@ -33,25 +33,26 @@ To get a local working copy of the development repository, do:
|
|
|
33
33
|
|
|
34
34
|
% git clone git://github.com/bendiken/rdf-spec.git
|
|
35
35
|
|
|
36
|
-
Alternatively,
|
|
37
|
-
|
|
36
|
+
Alternatively, download the latest development version as a tarball as
|
|
37
|
+
follows:
|
|
38
38
|
|
|
39
39
|
% wget http://github.com/bendiken/rdf-spec/tarball/master
|
|
40
40
|
|
|
41
41
|
Authors
|
|
42
42
|
-------
|
|
43
43
|
|
|
44
|
-
* [Arto Bendiken](
|
|
45
|
-
* [Ben Lavender](
|
|
44
|
+
* [Arto Bendiken](http://github.com/bendiken) - <http://ar.to/>
|
|
45
|
+
* [Ben Lavender](http://github.com/bhuga) - <http://bhuga.net/>
|
|
46
|
+
* [Gregg Kellogg](http://github.com/gkellogg) - <http://kellogg-assoc.com/>
|
|
46
47
|
|
|
47
48
|
Contributors
|
|
48
49
|
------------
|
|
49
50
|
|
|
50
|
-
* [
|
|
51
|
-
* [John Fieber](mailto:jrf@ursamaris.org) - <http://github.com/jfieber>
|
|
51
|
+
* [John Fieber](http://github.com/jfieber) - <http://github.com/jfieber>
|
|
52
52
|
|
|
53
53
|
Contributing
|
|
54
54
|
------------
|
|
55
|
+
|
|
55
56
|
* Do your best to adhere to the existing coding conventions and idioms.
|
|
56
57
|
* Don't use hard tabs, and don't leave trailing whitespace on any line.
|
|
57
58
|
* Do refer to the [RubySpec Style Guide][RubySpec] for best practices.
|
|
@@ -68,8 +69,8 @@ Contributing
|
|
|
68
69
|
License
|
|
69
70
|
-------
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
This is free and unencumbered public domain software. For more information,
|
|
73
|
+
see <http://unlicense.org/> or the accompanying {file:UNLICENSE} file.
|
|
73
74
|
|
|
74
75
|
[RDF.rb]: http://rdf.rubyforge.org/
|
|
75
76
|
[RSpec]: http://rspec.info/
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.3.0
|
data/etc/doap.nt
CHANGED
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
<http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/mbox> <mailto:blavender@gmail.com> .
|
|
13
13
|
<http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "dbf45f4ffbd27b67aa84f02a6a31c144727d10af" .
|
|
14
14
|
<http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/name> "Ben Lavender" .
|
|
15
|
+
<http://kellogg-assoc.com/#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
|
16
|
+
<http://kellogg-assoc.com/#me> <http://xmlns.com/foaf/0.1/homepage> <http://kellogg-assoc.com/> .
|
|
17
|
+
<http://kellogg-assoc.com/#me> <http://xmlns.com/foaf/0.1/mbox> <mailto:gregg@kellogg-assoc.com> .
|
|
18
|
+
<http://kellogg-assoc.com/#me> <http://xmlns.com/foaf/0.1/mbox_sha1sum> "35bc44e6d0070e5ad50ccbe0d24403c96af2b9bd" .
|
|
19
|
+
<http://kellogg-assoc.com/#me> <http://xmlns.com/foaf/0.1/name> "Gregg Kellogg" .
|
|
15
20
|
<http://rubygems.org/gems/rdf> <http://purl.org/dc/terms/creator> <http://ar.to/#self> .
|
|
16
21
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#blog> <http://ar.to/> .
|
|
17
22
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#blog> <http://blog.datagraph.org/> .
|
|
@@ -22,16 +27,23 @@
|
|
|
22
27
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#description> "RDF.rb is a pure-Ruby library for working with Resource Description Framework (RDF) data."@en .
|
|
23
28
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://ar.to/#self> .
|
|
24
29
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://bhuga.net/#ben> .
|
|
30
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://kellogg-assoc.com/#me> .
|
|
25
31
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <http://ar.to/#self> .
|
|
32
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <http://bhuga.net/#ben> .
|
|
33
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <http://kellogg-assoc.com/#me> .
|
|
26
34
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#download-page> <http://rubyforge.org/projects/rdf/> .
|
|
27
35
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid1 .
|
|
28
36
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid2 .
|
|
29
37
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid3 .
|
|
30
38
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid4 .
|
|
31
39
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid5 .
|
|
40
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid6 .
|
|
41
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#helper> _:genid7 .
|
|
32
42
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#homepage> <http://rdf.rubyforge.org/> .
|
|
33
43
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#license> <http://creativecommons.org/licenses/publicdomain/> .
|
|
34
44
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#maintainer> <http://ar.to/#self> .
|
|
45
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#maintainer> <http://bhuga.net/#ben> .
|
|
46
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#maintainer> <http://kellogg-assoc.com/#me> .
|
|
35
47
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#name> "RDF.rb" .
|
|
36
48
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#platform> "Ruby" .
|
|
37
49
|
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#shortdesc> "A Ruby library for working with Resource Description Framework (RDF) data."@en .
|
|
@@ -39,17 +51,23 @@
|
|
|
39
51
|
<http://rubygems.org/gems/rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://usefulinc.com/ns/doap#Project> .
|
|
40
52
|
<http://rubygems.org/gems/rdf> <http://xmlns.com/foaf/0.1/maker> <http://ar.to/#self> .
|
|
41
53
|
_:genid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
|
42
|
-
_:genid1 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "
|
|
43
|
-
_:genid1 <http://xmlns.com/foaf/0.1/name> "
|
|
54
|
+
_:genid1 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "274bd18402fc773ffc0606996aa1fb90b603aa29" .
|
|
55
|
+
_:genid1 <http://xmlns.com/foaf/0.1/name> "C\u0103lin Ardelean" .
|
|
44
56
|
_:genid2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
|
45
|
-
_:genid2 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "
|
|
46
|
-
_:genid2 <http://xmlns.com/foaf/0.1/name> "
|
|
57
|
+
_:genid2 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "f412d743150d7b27b8468d56e69ca147917ea6fc" .
|
|
58
|
+
_:genid2 <http://xmlns.com/foaf/0.1/name> "Joey Geiger" .
|
|
47
59
|
_:genid3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
|
48
|
-
_:genid3 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "
|
|
49
|
-
_:genid3 <http://xmlns.com/foaf/0.1/name> "
|
|
60
|
+
_:genid3 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "d31fdd6af7a279a89bf09fdc9f7c44d9d08bb930" .
|
|
61
|
+
_:genid3 <http://xmlns.com/foaf/0.1/name> "Fumihiro Kato" .
|
|
50
62
|
_:genid4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
|
51
|
-
_:genid4 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "
|
|
52
|
-
_:genid4 <http://xmlns.com/foaf/0.1/name> "
|
|
63
|
+
_:genid4 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "c69f3255ff0639543cc5edfd8116eac8df16fab8" .
|
|
64
|
+
_:genid4 <http://xmlns.com/foaf/0.1/name> "Hellekin O. Wolf" .
|
|
53
65
|
_:genid5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
|
54
|
-
_:genid5 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "
|
|
55
|
-
_:genid5 <http://xmlns.com/foaf/0.1/name> "
|
|
66
|
+
_:genid5 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "f7653fc1ac0e82ebb32f092389bd5fc728eaae12" .
|
|
67
|
+
_:genid5 <http://xmlns.com/foaf/0.1/name> "John Fieber" .
|
|
68
|
+
_:genid6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
|
69
|
+
_:genid6 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "2b4247b6fd5bb4a1383378f325784318680d5ff9" .
|
|
70
|
+
_:genid6 <http://xmlns.com/foaf/0.1/name> "Keita Urashima" .
|
|
71
|
+
_:genid7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
|
72
|
+
_:genid7 <http://xmlns.com/foaf/0.1/mbox_sha1sum> "bedbbf2451e5beb38d59687c0460032aff92cd3c" .
|
|
73
|
+
_:genid7 <http://xmlns.com/foaf/0.1/name> "Pius Uzamere" .
|
data/lib/rdf/spec.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
require 'rdf'
|
|
1
|
+
require 'rdf' # @see http://rubygems.org/gems/rdf
|
|
2
|
+
require 'rspec' # @see http://rubygems.org/gems/rspec
|
|
2
3
|
|
|
3
4
|
module RDF
|
|
4
5
|
##
|
|
@@ -10,7 +11,7 @@ module RDF
|
|
|
10
11
|
# @example Including the matchers in `spec/spec_helper.rb`
|
|
11
12
|
# require 'rdf/spec'
|
|
12
13
|
#
|
|
13
|
-
#
|
|
14
|
+
# RSpec.configure do |config|
|
|
14
15
|
# config.include(RDF::Spec::Matchers)
|
|
15
16
|
# end
|
|
16
17
|
#
|
|
@@ -45,5 +46,5 @@ module RDF
|
|
|
45
46
|
module Spec
|
|
46
47
|
autoload :Matchers, 'rdf/spec/matchers'
|
|
47
48
|
autoload :VERSION, 'rdf/spec/version'
|
|
48
|
-
end #
|
|
49
|
-
end #
|
|
49
|
+
end # Spec
|
|
50
|
+
end # RDF
|
data/lib/rdf/spec/countable.rb
CHANGED
data/lib/rdf/spec/durable.rb
CHANGED
data/lib/rdf/spec/enumerable.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
require 'rdf/spec'
|
|
2
|
-
require 'spec'
|
|
3
2
|
|
|
4
3
|
share_as :RDF_Enumerable do
|
|
5
4
|
include RDF::Spec::Matchers
|
|
@@ -28,7 +27,7 @@ share_as :RDF_Enumerable do
|
|
|
28
27
|
end
|
|
29
28
|
|
|
30
29
|
it "should respond to #count and #size" do
|
|
31
|
-
@enumerable.should respond_to(*%w(count size
|
|
30
|
+
@enumerable.should respond_to(*%w(count size))
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
it "should implement #empty?" do
|
|
@@ -37,7 +36,7 @@ share_as :RDF_Enumerable do
|
|
|
37
36
|
end
|
|
38
37
|
|
|
39
38
|
it "should implement #count and #size" do
|
|
40
|
-
%w(count size
|
|
39
|
+
%w(count size).each do |method|
|
|
41
40
|
@enumerable.send(method).should == @statements.size
|
|
42
41
|
end
|
|
43
42
|
end
|
data/lib/rdf/spec/format.rb
CHANGED
data/lib/rdf/spec/graph.rb
CHANGED
data/lib/rdf/spec/list.rb
CHANGED
data/lib/rdf/spec/literal.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# coding: utf-8
|
|
2
|
-
require 'rdf'
|
|
3
2
|
require 'rdf/spec'
|
|
4
3
|
|
|
5
4
|
share_as :RDF_Literal do
|
|
@@ -9,259 +8,463 @@ share_as :RDF_Literal do
|
|
|
9
8
|
raise '+@new+ must be defined in a before(:each) block' unless instance_variable_get('@new')
|
|
10
9
|
end
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
def self.literal(selector)
|
|
12
|
+
case selector
|
|
13
|
+
when :empty then ['']
|
|
14
|
+
when :plain then ['Hello']
|
|
15
|
+
when :empty_lang then ['', {:language => :en}]
|
|
16
|
+
when :plain_lang then ['Hello', {:language => :en}]
|
|
17
|
+
when :false then [false]
|
|
18
|
+
when :true then [true]
|
|
19
|
+
when :int then [123]
|
|
20
|
+
when :long then [9223372036854775807]
|
|
21
|
+
when :double then [3.1415]
|
|
22
|
+
when :date then [Date.new(2010)]
|
|
23
|
+
when :datetime then [DateTime.new(2011)]
|
|
24
|
+
when :time then [Time.parse('01:02:03Z')]
|
|
25
|
+
when :date then [Date.new(2010)]
|
|
26
|
+
when :xml_no_ns then ["foo <sup>bar</sup> baz!", {:datatype => RDF.XMLLiteral}]
|
|
27
|
+
when :xml_ns then ["foo <sup>bar</sup> baz!", {:datatype => RDF.XMLLiteral,
|
|
28
|
+
:namespaces => {"dc" => RDF::DC.to_s}}]
|
|
29
|
+
when :xml_ns2 then ["foo <sup xmlns:dc=\"http://purl.org/dc/terms/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">bar</sup> baz!",
|
|
30
|
+
{:datatype => RDF.XMLLiteral,
|
|
31
|
+
:namespaces => {"" => RDF::DC.to_s}}]
|
|
32
|
+
when :xml_ns_lang then ["foo <sup>bar</sup> baz!", {:datatype => RDF.XMLLiteral,
|
|
33
|
+
:namespaces => {"dc" => RDF::DC.to_s}, :language => :fr}]
|
|
34
|
+
when :xml_lang_em then ["foo <sup>bar</sup><sub xml:lang=\"en\">baz</sub>",
|
|
35
|
+
{:datatype => RDF.XMLLiteral,
|
|
36
|
+
:namespaces => {"dc" => RDF::DC.to_s},
|
|
37
|
+
:language => :fr}]
|
|
38
|
+
when :xml_def_ns then ["foo <sup>bar</sup> baz!", {:datatype => RDF.XMLLiteral,
|
|
39
|
+
:namespaces => {"" => RDF::DC.to_s}}]
|
|
40
|
+
else
|
|
41
|
+
raise("unexpected literal: :#{selector}")
|
|
17
42
|
end
|
|
43
|
+
end
|
|
18
44
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
45
|
+
def self.literals(*selector)
|
|
46
|
+
selector.inject([]) do |ary, sel|
|
|
47
|
+
ary += case sel
|
|
48
|
+
when :all_plain_no_lang then [:empty, :plain].map {|sel| literal(sel)}
|
|
49
|
+
when :all_plain_lang then [:empty_lang, :plain_lang].map {|sel| literal(sel)}
|
|
50
|
+
when :all_native then [:false, :true, :int, :long, :double, :time, :date, :datetime].map {|sel| literal(sel)}
|
|
51
|
+
when :all_xml then [:xml_no_ns, :xml_ns, :xml_ns2, :xml_ns_lang, :xml_lang_em, :xml_def_ns].map {|sel| literal(sel)}
|
|
52
|
+
when :all_plain then literals(:all_plain_no_lang, :all_plain_lang)
|
|
53
|
+
else literals(:all_plain, :all_native, :all_xml)
|
|
23
54
|
end
|
|
24
55
|
end
|
|
56
|
+
end
|
|
25
57
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
end
|
|
58
|
+
describe "new" do
|
|
59
|
+
it "instantiates empty string" do
|
|
60
|
+
lambda { @new.call('') }.should_not raise_error
|
|
30
61
|
end
|
|
31
62
|
|
|
32
|
-
it "
|
|
33
|
-
@
|
|
34
|
-
literal.typed?.should be_false
|
|
35
|
-
literal.datatype.should be_nil
|
|
36
|
-
end
|
|
63
|
+
it "instantiates empty string with language" do
|
|
64
|
+
lambda { @new.call('', :language => :en) }.should_not raise_error
|
|
37
65
|
end
|
|
38
66
|
|
|
39
|
-
it "
|
|
40
|
-
@
|
|
41
|
-
|
|
42
|
-
literal.should eql(copy)
|
|
43
|
-
literal.should == copy
|
|
67
|
+
it "instantiates from native datatype" do
|
|
68
|
+
lambda { @new.call(123) }.should_not raise_error
|
|
69
|
+
end
|
|
44
70
|
|
|
45
|
-
|
|
46
|
-
|
|
71
|
+
describe "c18n" do
|
|
72
|
+
it "normalizes language to lower-case" do
|
|
73
|
+
@new.call('Upper', :language => :EN, :canonicalize => true).language.should == :en
|
|
47
74
|
end
|
|
48
|
-
end
|
|
49
75
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
76
|
+
it "supports sub-taged language specification" do
|
|
77
|
+
@new.call('Hi', :language => :"en-us", :canonicalize => true).language.should == :"en-us"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
{
|
|
81
|
+
"true" => "true",
|
|
82
|
+
"false" => "false",
|
|
83
|
+
"tRuE" => "true",
|
|
84
|
+
"FaLsE" => "false",
|
|
85
|
+
"1" => "true",
|
|
86
|
+
"0" => "false",
|
|
87
|
+
}.each_pair do |value, str|
|
|
88
|
+
it "does not normalize boolean '#{value}' by default" do
|
|
89
|
+
@new.call(value, :datatype => RDF::XSD.boolean, :canonicalize => false).to_s.should == value
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "normalizes boolean '#{value}' to '#{str}'" do
|
|
93
|
+
@new.call(value, :datatype => RDF::XSD.boolean, :canonicalize => true).to_s.should == str
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "instantiates '#{value}' as RDF::Literal::Boolean" => true do
|
|
97
|
+
@new.call(value, :datatype => RDF::XSD.boolean, :canonicalize => true).should be_a(RDF::Literal::Boolean)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "causes normalized '#{value}' to be == '#{str}'" do
|
|
101
|
+
@new.call(value, :datatype => RDF::XSD.boolean, :canonicalize => true).should == @new.call(str, :datatype => RDF::XSD.boolean, :canonicalize => false)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
{
|
|
106
|
+
"01" => "1",
|
|
107
|
+
"1" => "1",
|
|
108
|
+
"-1" => "-1",
|
|
109
|
+
"+1" => "1",
|
|
110
|
+
}.each_pair do |value, str|
|
|
111
|
+
it "does not normalize integer '#{value}' by default" do
|
|
112
|
+
@new.call(value, :datatype => RDF::XSD.integer, :canonicalize => false).to_s.should == value
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "normalizes integer '#{value}' to '#{str}'" do
|
|
116
|
+
@new.call(value, :datatype => RDF::XSD.integer, :canonicalize => true).to_s.should == str
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "instantiates '#{value}' as RDF::Literal::Integer" => true do
|
|
120
|
+
@new.call(value, :datatype => RDF::XSD.integer, :canonicalize => true).should be_a(RDF::Literal::Integer)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "causes normalized '#{value}' to be == '#{str}'" do
|
|
124
|
+
@new.call(value, :datatype => RDF::XSD.integer, :canonicalize => true).should == @new.call(str, :datatype => RDF::XSD.integer, :canonicalize => false)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
{
|
|
129
|
+
"1" => "1.0",
|
|
130
|
+
"-1" => "-1.0",
|
|
131
|
+
"1." => "1.0",
|
|
132
|
+
"1.0" => "1.0",
|
|
133
|
+
"1.00" => "1.0",
|
|
134
|
+
"+001.00" => "1.0",
|
|
135
|
+
"123.456" => "123.456",
|
|
136
|
+
"2.345" => "2.345",
|
|
137
|
+
"1.000000000" => "1.0",
|
|
138
|
+
"2.3" => "2.3",
|
|
139
|
+
"2.234000005" => "2.234000005",
|
|
140
|
+
"2.2340000000000005" => "2.2340000000000005",
|
|
141
|
+
"2.23400000000000005" => "2.234",
|
|
142
|
+
"2.23400000000000000000005" => "2.234",
|
|
143
|
+
"1.2345678901234567890123457890" => "1.2345678901234567",
|
|
144
|
+
}.each_pair do |value, str|
|
|
145
|
+
it "does not normalize decimal '#{value}' by default" do
|
|
146
|
+
@new.call(value, :datatype => RDF::XSD.decimal, :canonicalize => false).to_s.should == value
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
it "normalizes decimal '#{value}' to '#{str}'" do
|
|
150
|
+
@new.call(value, :datatype => RDF::XSD.decimal, :canonicalize => true).to_s.should == str
|
|
151
|
+
end
|
|
54
152
|
|
|
55
|
-
|
|
56
|
-
|
|
153
|
+
it "instantiates '#{value}' as RDF::Literal::Decimal" => true do
|
|
154
|
+
@new.call(value, :datatype => RDF::XSD.decimal, :canonicalize => true).should be_a(RDF::Literal::Decimal)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "causes normalized '#{value}' to be == '#{str}'" do
|
|
158
|
+
@new.call(value, :datatype => RDF::XSD.decimal, :canonicalize => true).should == @new.call(str, :datatype => RDF::XSD.decimal, :canonicalize => false)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
{
|
|
163
|
+
"1" => "1.0E0",
|
|
164
|
+
"-1" => "-1.0E0",
|
|
165
|
+
"+01.000" => "1.0E0",
|
|
166
|
+
#"1." => "1.0E0",
|
|
167
|
+
"1.0" => "1.0E0",
|
|
168
|
+
"123.456" => "1.23456E2",
|
|
169
|
+
"1.0e+1" => "1.0E1",
|
|
170
|
+
"1.0e-10" => "1.0E-10",
|
|
171
|
+
"123.456e4" => "1.23456E6",
|
|
172
|
+
}.each_pair do |value, str|
|
|
173
|
+
it "does not normalize double '#{value}' by default" do
|
|
174
|
+
@new.call(value, :datatype => RDF::XSD.double, :canonicalize => false).to_s.should == value
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it "normalizes double '#{value}' to '#{str}'" do
|
|
178
|
+
@new.call(value, :datatype => RDF::XSD.double, :canonicalize => true).to_s.should == str
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "instantiates '#{value}' as RDF::Literal::Double" => true do
|
|
182
|
+
@new.call(value, :datatype => RDF::XSD.double, :canonicalize => true).should be_a(RDF::Literal::Double)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
it "causes normalized '#{value}' to be == '#{str}'" do
|
|
186
|
+
@new.call(value, :datatype => RDF::XSD.double, :canonicalize => true).should == @new.call(str, :datatype => RDF::XSD.double, :canonicalize => false)
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# DateTime
|
|
191
|
+
{
|
|
192
|
+
"2010-01-01T00:00:00Z" => "2010-01-01T00:00:00Z",
|
|
193
|
+
"2010-01-01T00:00:00.0000Z" => "2010-01-01T00:00:00Z",
|
|
194
|
+
"2010-01-01T00:00:00" => "2010-01-01T00:00:00Z",
|
|
195
|
+
"2010-01-01T00:00:00+00:00" => "2010-01-01T00:00:00Z",
|
|
196
|
+
"2010-01-01T01:00:00+01:00" => "2010-01-01T00:00:00Z",
|
|
197
|
+
"2009-12-31T23:00:00-01:00" => "2010-01-01T00:00:00Z",
|
|
198
|
+
"-2010-01-01T00:00:00Z" => "-2010-01-01T00:00:00Z",
|
|
199
|
+
}.each_pair do |value, str|
|
|
200
|
+
it "does not normalize dateTime '#{value}' by default" do
|
|
201
|
+
@new.call(value, :datatype => RDF::XSD.dateTime, :canonicalize => false).to_s.should == value
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it "normalizes dateTime '#{value}' to '#{str}'" do
|
|
205
|
+
@new.call(value, :datatype => RDF::XSD.dateTime, :canonicalize => true).to_s.should == str
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it "instantiates '#{value}' as RDF::Literal::DateTime" => true do
|
|
209
|
+
@new.call(value, :datatype => RDF::XSD.dateTime, :canonicalize => true).should be_a(RDF::Literal::DateTime)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
it "causes normalized '#{value}' to be == '#{str}'" do
|
|
213
|
+
@new.call(value, :datatype => RDF::XSD.dateTime, :canonicalize => true).should == @new.call(str, :datatype => RDF::XSD.dateTime, :canonicalize => false)
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Date
|
|
218
|
+
{
|
|
219
|
+
"2010-01-01Z" => "2010-01-01Z",
|
|
220
|
+
"2010-01-01" => "2010-01-01Z",
|
|
221
|
+
"2010-01-01+00:00" => "2010-01-01Z",
|
|
222
|
+
"2010-01-01+01:00" => "2010-01-01Z",
|
|
223
|
+
"2009-12-31-01:00" => "2009-12-31Z",
|
|
224
|
+
"-2010-01-01Z" => "-2010-01-01Z",
|
|
225
|
+
}.each_pair do |value, str|
|
|
226
|
+
it "does not normalize date '#{value}' by default" do
|
|
227
|
+
@new.call(value, :datatype => RDF::XSD.date, :canonicalize => false).to_s.should == value
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
it "normalizes date '#{value}' to '#{str}'" do
|
|
231
|
+
@new.call(value, :datatype => RDF::XSD.date, :canonicalize => true).to_s.should == str
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
it "instantiates '#{value}' as RDF::Literal::Date" => true do
|
|
235
|
+
@new.call(value, :datatype => RDF::XSD.date, :canonicalize => true).should be_a(RDF::Literal::Date)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it "causes normalized '#{value}' to be == '#{str}'" do
|
|
239
|
+
@new.call(value, :datatype => RDF::XSD.date, :canonicalize => true).should == @new.call(str, :datatype => RDF::XSD.date, :canonicalize => false)
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Time
|
|
244
|
+
{
|
|
245
|
+
"00:00:00Z" => "00:00:00Z",
|
|
246
|
+
"00:00:00.0000Z" => "00:00:00Z",
|
|
247
|
+
"00:00:00+00:00" => "00:00:00Z",
|
|
248
|
+
"01:00:00+01:00" => "00:00:00Z",
|
|
249
|
+
"23:00:00-01:00" => "00:00:00Z",
|
|
250
|
+
}.each_pair do |value, str|
|
|
251
|
+
it "does not normalize dateTime '#{value}' by default" do
|
|
252
|
+
@new.call(value, :datatype => RDF::XSD.time, :canonicalize => false).to_s.should == value
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
it "normalizes time '#{value}' to '#{str}'" do
|
|
256
|
+
@new.call(value, :datatype => RDF::XSD.time, :canonicalize => true).to_s.should == str
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
it "instantiates '#{value}' as RDF::Literal::Time" => true do
|
|
260
|
+
@new.call(value, :datatype => RDF::XSD.time, :canonicalize => true).should be_a(RDF::Literal::Time)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
it "causes normalized '#{value}' to be == '#{str}'" do
|
|
264
|
+
@new.call(value, :datatype => RDF::XSD.time, :canonicalize => true).should == @new.call(str, :datatype => RDF::XSD.time, :canonicalize => false)
|
|
265
|
+
end
|
|
266
|
+
end
|
|
57
267
|
end
|
|
58
268
|
end
|
|
59
269
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
270
|
+
describe "#plain?" do
|
|
271
|
+
literals(:all_plain_no_lang).each do |args|
|
|
272
|
+
it "returns true for #{args.inspect}" do
|
|
273
|
+
literal = @new.call(*args)
|
|
274
|
+
literal.plain?.should be_true
|
|
275
|
+
end
|
|
65
276
|
end
|
|
66
277
|
|
|
67
|
-
|
|
68
|
-
|
|
278
|
+
literals(:all_plain_lang, :all_native, :all_xml).each do |args|
|
|
279
|
+
it "returns false for #{args.inspect}" do
|
|
280
|
+
literal = @new.call(*args)
|
|
281
|
+
literal.plain?.should be_false
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
describe "#language" do
|
|
287
|
+
literals(:all_plain_no_lang, :all_native, :all_xml).each do |args|
|
|
288
|
+
it "returns nil for #{args.inspect}" do
|
|
289
|
+
literal = @new.call(*args)
|
|
290
|
+
literal.language.should be_nil
|
|
291
|
+
end
|
|
69
292
|
end
|
|
70
293
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
literal.
|
|
294
|
+
literals(:all_plain_lang).each do |args|
|
|
295
|
+
it "returns language for #{args.inspect}" do
|
|
296
|
+
literal = @new.call(*args)
|
|
74
297
|
literal.language.should == :en
|
|
75
298
|
end
|
|
76
299
|
end
|
|
300
|
+
end
|
|
77
301
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
302
|
+
describe "#datatype" do
|
|
303
|
+
literals(:all_plain).each do |args|
|
|
304
|
+
it "returns nil for #{args.inspect}" do
|
|
305
|
+
literal = @new.call(*args)
|
|
81
306
|
literal.datatype.should be_nil
|
|
82
307
|
end
|
|
83
308
|
end
|
|
84
309
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
310
|
+
{
|
|
311
|
+
123 => "integer",
|
|
312
|
+
true => "boolean",
|
|
313
|
+
false => "boolean",
|
|
314
|
+
9223372036854775807 => "integer",
|
|
315
|
+
3.1415 => "double",
|
|
316
|
+
Date.new(2010) => "date",
|
|
317
|
+
DateTime.new(2011) => "dateTime",
|
|
318
|
+
Time.parse("01:02:03Z") => "time"
|
|
319
|
+
}.each_pair do |value, type|
|
|
320
|
+
it "returns xsd.#{type} for #{value.inspect} #{value.class}" do
|
|
321
|
+
@new.call(value).datatype.should == XSD[type]
|
|
90
322
|
end
|
|
91
323
|
end
|
|
92
324
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
context "c18n" do
|
|
99
|
-
it "should normalize language to lower-case" do
|
|
100
|
-
@new.call('Upper', :language => :EN, :canonicalize => true).language.should == :en
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
it "should support sub-taged language specification" do
|
|
104
|
-
@new.call('Hi', :language => :"en-us", :canonicalize => true).language.should == :"en-us"
|
|
325
|
+
literals(:all_xml).each do |args|
|
|
326
|
+
it "returns datatype for #{args.inspect}" do
|
|
327
|
+
literal = @new.call(*args)
|
|
328
|
+
literal.datatype.should == RDF.XMLLiteral
|
|
105
329
|
end
|
|
106
330
|
end
|
|
107
331
|
end
|
|
108
332
|
|
|
109
|
-
|
|
110
|
-
|
|
333
|
+
describe "#typed?" do
|
|
334
|
+
literals(:all_plain).each do |args|
|
|
335
|
+
it "returns false for #{args.inspect}" do
|
|
336
|
+
literal = @new.call(*args)
|
|
337
|
+
literal.typed?.should be_false
|
|
338
|
+
end
|
|
339
|
+
end
|
|
111
340
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
@date = @new.call(Date.new(2010))
|
|
120
|
-
@datetime = @new.call(DateTime.new(2010))
|
|
121
|
-
@time = @new.call(Time.parse('01:02:03Z'))
|
|
122
|
-
@all = [@false, @true, @int, @long, @double, @time, @date, @datetime]
|
|
123
|
-
end
|
|
341
|
+
literals(:all_native, :all_xml).each do |args|
|
|
342
|
+
it "returns true for #{args.inspect}" do
|
|
343
|
+
literal = @new.call(*args)
|
|
344
|
+
literal.typed?.should be_true
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
end
|
|
124
348
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
349
|
+
describe "#==" do
|
|
350
|
+
literals(:all_plain).each do |args|
|
|
351
|
+
it "returns true for #{args.inspect}" do
|
|
352
|
+
literal = @new.call(*args)
|
|
353
|
+
literal.should == @new.call(*args)
|
|
354
|
+
end
|
|
128
355
|
end
|
|
129
356
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
literal.
|
|
357
|
+
literals(:all_plain_no_lang).each do |args|
|
|
358
|
+
it "returns true for value of #{args.inspect}" do
|
|
359
|
+
literal = @new.call(*args)
|
|
360
|
+
literal.should == literal.value
|
|
133
361
|
end
|
|
134
362
|
end
|
|
135
363
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
literal.
|
|
139
|
-
literal.
|
|
364
|
+
literals(:all_plain_lang).each do |args|
|
|
365
|
+
it "returns false for value of #{args.inspect}" do
|
|
366
|
+
literal = @new.call(*args)
|
|
367
|
+
literal.should_not == literal.value
|
|
140
368
|
end
|
|
141
369
|
end
|
|
142
370
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
@long.datatype.should == XSD.integer
|
|
149
|
-
@double.datatype.should == XSD.double
|
|
150
|
-
@date.datatype.should == XSD.date
|
|
151
|
-
@datetime.datatype.should == XSD.dateTime
|
|
152
|
-
@time.datatype.should == XSD.time
|
|
153
|
-
end
|
|
371
|
+
literals(:all_native).each do |args|
|
|
372
|
+
it "returns true for #{args.inspect}" do
|
|
373
|
+
literal = @new.call(*args)
|
|
374
|
+
literal.should == @new.call(*args)
|
|
375
|
+
end
|
|
154
376
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
literal.should eql(copy)
|
|
159
|
-
literal.should == copy
|
|
377
|
+
it "returns true for value of #{args.inspect}" do
|
|
378
|
+
literal = @new.call(*args)
|
|
379
|
+
#literal.should == literal.value # FIXME: fails on xsd:date, xsd:time, and xsd:dateTime
|
|
160
380
|
end
|
|
161
381
|
end
|
|
162
382
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
it "should have an object representation" do
|
|
175
|
-
@false.object.should eql(false)
|
|
176
|
-
@true.object.should eql(true)
|
|
177
|
-
@int.object.should eql(123)
|
|
178
|
-
@long.object.should eql(9223372036854775807)
|
|
179
|
-
@double.object.should eql(3.1415)
|
|
180
|
-
@date.object.should eql(Date.new(2010))
|
|
181
|
-
@datetime.object.should eql(DateTime.new(2010))
|
|
182
|
-
@time.object.should eql(Time.parse('01:02:03Z'))
|
|
383
|
+
literals(:all_xml).each do |args|
|
|
384
|
+
it "returns true for #{args.inspect}" do
|
|
385
|
+
literal = @new.call(*args)
|
|
386
|
+
literal.should == @new.call(*args)
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
it "returns false for value of #{args.inspect}" do
|
|
390
|
+
literal = @new.call(*args)
|
|
391
|
+
literal.should_not == literal.value
|
|
392
|
+
end
|
|
183
393
|
end
|
|
184
394
|
end
|
|
185
395
|
|
|
186
|
-
#
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
subject.xmlliteral?.should == true
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
describe "encodings" do
|
|
195
|
-
it "should return n3" do subject.to_s.should == "\"foo <sup>bar</sup> baz!\"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>" end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
it "should be equal if they have the same contents" do
|
|
199
|
-
should == @new.call("foo <sup>bar</sup> baz!", :datatype => RDF.XMLLiteral)
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
it "should be a XMLLiteral encoding" do
|
|
203
|
-
subject.datatype.should == RDF.XMLLiteral
|
|
204
|
-
end
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
describe "with a namespace" do
|
|
208
|
-
subject {
|
|
209
|
-
@new.call("foo <sup>bar</sup> baz!", :datatype => RDF.XMLLiteral,
|
|
210
|
-
:namespaces => {"dc" => RDF::DC.to_s})
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
describe "encodings" do
|
|
214
|
-
it "should return n3" do subject.to_s.should == "\"foo <sup>bar</sup> baz!\"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>" end
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
describe "and language" do
|
|
218
|
-
subject {
|
|
219
|
-
@new.call("foo <sup>bar</sup> baz!", :datatype => RDF.XMLLiteral,
|
|
220
|
-
:namespaces => {"dc" => RDF::DC.to_s},
|
|
221
|
-
:language => :fr)
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
describe "encodings" do
|
|
225
|
-
it "should return n3" do subject.to_s.should == "\"foo <sup xml:lang=\\\"fr\\\">bar</sup> baz!\"\^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>" end
|
|
226
|
-
end
|
|
396
|
+
describe "#to_s" do
|
|
397
|
+
literals(:all_plain).each do |args|
|
|
398
|
+
it "returns value for #{args.inspect}" do
|
|
399
|
+
literal = @new.call(*args)
|
|
400
|
+
literal.to_s.should eql(literal.value)
|
|
227
401
|
end
|
|
228
|
-
|
|
229
|
-
describe "and language with an existing language embedded" do
|
|
230
|
-
subject {
|
|
231
|
-
@new.call("foo <sup>bar</sup><sub xml:lang=\"en\">baz</sub>",
|
|
232
|
-
:datatype => RDF.XMLLiteral,
|
|
233
|
-
:language => :fr)
|
|
234
|
-
}
|
|
402
|
+
end
|
|
235
403
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
404
|
+
{
|
|
405
|
+
literal(:int) => "123",
|
|
406
|
+
literal(:true) => "true",
|
|
407
|
+
literal(:false) => "false",
|
|
408
|
+
literal(:long) => "9223372036854775807",
|
|
409
|
+
literal(:double) => "3.1415",
|
|
410
|
+
literal(:date) => "2010-01-01Z",
|
|
411
|
+
literal(:datetime) => "2011-01-01T00:00:00Z",
|
|
412
|
+
literal(:time) => "01:02:03Z"
|
|
413
|
+
}.each_pair do |args, rep|
|
|
414
|
+
it "returns #{rep} for #{args.inspect}" do
|
|
415
|
+
literal = @new.call(*args)
|
|
416
|
+
literal.to_s.should eql(rep)
|
|
239
417
|
end
|
|
240
418
|
end
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
419
|
+
|
|
420
|
+
{
|
|
421
|
+
literal(:xml_no_ns) => %("foo <sup>bar</sup> baz!"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>),
|
|
422
|
+
literal(:xml_ns) => %("foo <sup>bar</sup> baz!"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>),
|
|
423
|
+
literal(:xml_ns_lang) => %("foo <sup xml:lang=\\"fr\\">bar</sup> baz!"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>),
|
|
424
|
+
literal(:xml_lang_em) => %("foo <sup xml:lang=\\"fr\\">bar</sup><sub xml:lang=\\"en\\">baz</sub>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>),
|
|
425
|
+
literal(:xml_def_ns) => %("foo <sup xmlns=\\"http://purl.org/dc/terms/\\">bar</sup> baz!"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>),
|
|
426
|
+
literal(:xml_ns2) => %(fixme),
|
|
427
|
+
}.each_pair do |args, rep|
|
|
428
|
+
it "returns n3 rep for #{args.inspect}" do
|
|
429
|
+
literal = @new.call(*args)
|
|
430
|
+
pending {literal.to_s.should == rep}
|
|
250
431
|
end
|
|
251
432
|
end
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
should == g
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
describe "#object" do
|
|
436
|
+
literals(:all_plain).each do |args|
|
|
437
|
+
it "returns value for #{args.inspect}" do
|
|
438
|
+
literal = @new.call(*args)
|
|
439
|
+
literal.object.should eql(literal.value)
|
|
260
440
|
end
|
|
261
441
|
end
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
442
|
+
|
|
443
|
+
{
|
|
444
|
+
literal(:int) => 123,
|
|
445
|
+
literal(:true) => true,
|
|
446
|
+
literal(:false) => false,
|
|
447
|
+
literal(:long) => 9223372036854775807,
|
|
448
|
+
literal(:double) => 3.1415,
|
|
449
|
+
literal(:date) => Date.new(2010),
|
|
450
|
+
literal(:datetime) => DateTime.new(2011),
|
|
451
|
+
literal(:time) => Time.parse('01:02:03Z')
|
|
452
|
+
}.each_pair do |args, value|
|
|
453
|
+
it "returns object for #{args.inspect}" do
|
|
454
|
+
literal = @new.call(*args)
|
|
455
|
+
literal.object.should eql(value)
|
|
456
|
+
end
|
|
457
|
+
end
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
describe "#anonymous?" do
|
|
461
|
+
it "returns false" do
|
|
462
|
+
@new.call("").anonymous?.should be_false
|
|
463
|
+
end
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
describe "#valid?" do
|
|
467
|
+
# Boolean
|
|
265
468
|
{
|
|
266
469
|
"true" => "true",
|
|
267
470
|
"false" => "false",
|
|
@@ -269,39 +472,27 @@ share_as :RDF_Literal do
|
|
|
269
472
|
"FaLsE" => "false",
|
|
270
473
|
"1" => "true",
|
|
271
474
|
"0" => "false",
|
|
272
|
-
}.each_pair do |
|
|
273
|
-
it "
|
|
274
|
-
@new.call(
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
it "should not canonicalize boolean '#{lit}' by default" do
|
|
278
|
-
@new.call(lit, :datatype => RDF::XSD.boolean, :canonicalize => false).to_s.should == lit
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
it "should canonicalize boolean '#{lit}'" do
|
|
282
|
-
@new.call(lit, :datatype => RDF::XSD.boolean, :canonicalize => true).to_s.should == str
|
|
475
|
+
}.each_pair do |value, str|
|
|
476
|
+
it "validates boolean '#{value}'" do
|
|
477
|
+
@new.call(value, :datatype => RDF::XSD.boolean).valid?.should be_true
|
|
478
|
+
@new.call(value, :datatype => RDF::XSD.boolean).invalid?.should be_false
|
|
283
479
|
end
|
|
284
480
|
end
|
|
285
481
|
|
|
482
|
+
# Integer
|
|
286
483
|
{
|
|
287
484
|
"01" => "1",
|
|
288
485
|
"1" => "1",
|
|
289
486
|
"-1" => "-1",
|
|
290
487
|
"+1" => "1",
|
|
291
|
-
}.each_pair do |
|
|
292
|
-
it "
|
|
293
|
-
@new.call(
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
it "should not canonicalize integer '#{lit}' by default" do
|
|
297
|
-
@new.call(lit, :datatype => RDF::XSD.integer, :canonicalize => false).to_s.should == lit
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
it "should canonicalize integer '#{lit}'" do
|
|
301
|
-
@new.call(lit, :datatype => RDF::XSD.integer, :canonicalize => true).to_s.should == str
|
|
488
|
+
}.each_pair do |value, str|
|
|
489
|
+
it "validates integer '#{value}'" do
|
|
490
|
+
@new.call(value, :datatype => RDF::XSD.integer).valid?.should be_true
|
|
491
|
+
@new.call(value, :datatype => RDF::XSD.integer).invalid?.should be_false
|
|
302
492
|
end
|
|
303
493
|
end
|
|
304
494
|
|
|
495
|
+
# Decimal
|
|
305
496
|
{
|
|
306
497
|
"1" => "1.0",
|
|
307
498
|
"-1" => "-1.0",
|
|
@@ -318,20 +509,14 @@ share_as :RDF_Literal do
|
|
|
318
509
|
"2.23400000000000005" => "2.234",
|
|
319
510
|
"2.23400000000000000000005" => "2.234",
|
|
320
511
|
"1.2345678901234567890123457890" => "1.2345678901234567",
|
|
321
|
-
}.each_pair do |
|
|
322
|
-
it "
|
|
323
|
-
@new.call(
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
it "should not canonicalize decimal '#{lit}' by default" do
|
|
327
|
-
@new.call(lit, :datatype => RDF::XSD.decimal, :canonicalize => false).to_s.should == lit
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
it "should canonicalize decimal '#{lit}'" do
|
|
331
|
-
@new.call(lit, :datatype => RDF::XSD.decimal, :canonicalize => true).to_s.should == str
|
|
512
|
+
}.each_pair do |value, str|
|
|
513
|
+
it "validates decimal '#{value}'" do
|
|
514
|
+
@new.call(value, :datatype => RDF::XSD.decimal).valid?.should be_true
|
|
515
|
+
@new.call(value, :datatype => RDF::XSD.decimal).invalid?.should be_false
|
|
332
516
|
end
|
|
333
517
|
end
|
|
334
|
-
|
|
518
|
+
|
|
519
|
+
# Double
|
|
335
520
|
{
|
|
336
521
|
"1" => "1.0E0",
|
|
337
522
|
"-1" => "-1.0E0",
|
|
@@ -342,20 +527,13 @@ share_as :RDF_Literal do
|
|
|
342
527
|
"1.0e+1" => "1.0E1",
|
|
343
528
|
"1.0e-10" => "1.0E-10",
|
|
344
529
|
"123.456e4" => "1.23456E6",
|
|
345
|
-
}.each_pair do |
|
|
346
|
-
it "
|
|
347
|
-
@new.call(
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
it "should not canonicalize double '#{lit}' by default" do
|
|
351
|
-
@new.call(lit, :datatype => RDF::XSD.double, :canonicalize => false).to_s.should == lit
|
|
352
|
-
end
|
|
353
|
-
|
|
354
|
-
it "should canonicalize double '#{lit}'" do
|
|
355
|
-
@new.call(lit, :datatype => RDF::XSD.double, :canonicalize => true).to_s.should == str
|
|
530
|
+
}.each_pair do |value, str|
|
|
531
|
+
it "validates double '#{value}'" do
|
|
532
|
+
@new.call(value, :datatype => RDF::XSD.double).valid?.should be_true
|
|
533
|
+
@new.call(value, :datatype => RDF::XSD.double).invalid?.should be_false
|
|
356
534
|
end
|
|
357
535
|
end
|
|
358
|
-
|
|
536
|
+
|
|
359
537
|
# DateTime
|
|
360
538
|
{
|
|
361
539
|
"2010-01-01T00:00:00Z" => "2010-01-01T00:00:00Z",
|
|
@@ -365,20 +543,13 @@ share_as :RDF_Literal do
|
|
|
365
543
|
"2010-01-01T01:00:00+01:00" => "2010-01-01T01:00:00+01:00",
|
|
366
544
|
"2009-12-31T23:00:00-01:00" => "2009-12-31T23:00:00-01:00",
|
|
367
545
|
"-2010-01-01T00:00:00Z" => "-2010-01-01T00:00:00Z",
|
|
368
|
-
}.each_pair do |
|
|
369
|
-
it "
|
|
370
|
-
@new.call(
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
it "should not canonicalize dateTime '#{lit}' by default" do
|
|
374
|
-
@new.call(lit, :datatype => RDF::XSD.dateTime, :canonicalize => false).to_s.should == lit
|
|
375
|
-
end
|
|
376
|
-
|
|
377
|
-
it "should canonicalize dateTime '#{lit}'" do
|
|
378
|
-
@new.call(lit, :datatype => RDF::XSD.dateTime, :canonicalize => true).to_s.should == str
|
|
546
|
+
}.each_pair do |value, str|
|
|
547
|
+
it "validates dateTime '#{value}'" do
|
|
548
|
+
@new.call(value, :datatype => RDF::XSD.dateTime).valid?.should be_true
|
|
549
|
+
@new.call(value, :datatype => RDF::XSD.dateTime).invalid?.should be_false
|
|
379
550
|
end
|
|
380
551
|
end
|
|
381
|
-
|
|
552
|
+
|
|
382
553
|
# Date
|
|
383
554
|
{
|
|
384
555
|
"2010-01-01Z" => "2010-01-01Z",
|
|
@@ -387,21 +558,13 @@ share_as :RDF_Literal do
|
|
|
387
558
|
"2010-01-01+01:00" => "2010-01-01Z",
|
|
388
559
|
"2009-12-31-01:00" => "2009-12-31Z",
|
|
389
560
|
"-2010-01-01Z" => "-2010-01-01Z",
|
|
390
|
-
}.each_pair do |
|
|
391
|
-
it "
|
|
392
|
-
@new.call(
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
it "should not canonicalize date '#{lit}' by default" do
|
|
396
|
-
@new.call(lit, :datatype => RDF::XSD.date, :canonicalize => false).to_s.should == lit
|
|
397
|
-
end
|
|
398
|
-
|
|
399
|
-
it "should canonicalize date '#{lit}'" do
|
|
400
|
-
@new.call(lit, :datatype => RDF::XSD.date, :canonicalize => true).to_s.should == str
|
|
561
|
+
}.each_pair do |value, str|
|
|
562
|
+
it "validates date '#{value}'" do
|
|
563
|
+
@new.call(value, :datatype => RDF::XSD.date).valid?.should be_true
|
|
564
|
+
@new.call(value, :datatype => RDF::XSD.date).invalid?.should be_false
|
|
401
565
|
end
|
|
402
566
|
end
|
|
403
|
-
|
|
404
|
-
|
|
567
|
+
|
|
405
568
|
# Time
|
|
406
569
|
{
|
|
407
570
|
"00:00:00Z" => "00:00:00Z",
|
|
@@ -410,21 +573,15 @@ share_as :RDF_Literal do
|
|
|
410
573
|
"00:00:00+00:00" => "00:00:00Z",
|
|
411
574
|
"01:00:00+01:00" => "00:00:00Z",
|
|
412
575
|
"23:00:00-01:00" => "00:00:00Z",
|
|
413
|
-
}.each_pair do |
|
|
414
|
-
it "
|
|
415
|
-
@new.call(
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
it "should not canonicalize dateTime '#{lit}' by default" do
|
|
419
|
-
@new.call(lit, :datatype => RDF::XSD.time, :canonicalize => false).to_s.should == lit
|
|
420
|
-
end
|
|
421
|
-
|
|
422
|
-
it "should canonicalize dateTime '#{lit}'" do
|
|
423
|
-
@new.call(lit, :datatype => RDF::XSD.time, :canonicalize => true).to_s.should == str
|
|
576
|
+
}.each_pair do |value, str|
|
|
577
|
+
it "validates time '#{value}'" do
|
|
578
|
+
@new.call(value, :datatype => RDF::XSD.time).valid?.should be_true
|
|
579
|
+
@new.call(value, :datatype => RDF::XSD.time).invalid?.should be_false
|
|
424
580
|
end
|
|
425
581
|
end
|
|
426
|
-
|
|
427
|
-
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
describe "#invalid?" do
|
|
428
585
|
{
|
|
429
586
|
"foo" => RDF::XSD.boolean,
|
|
430
587
|
"xyz" => RDF::XSD.integer,
|
|
@@ -436,20 +593,21 @@ share_as :RDF_Literal do
|
|
|
436
593
|
"+2010-01-01T00:00:00Z" => RDF::XSD.dateTime,
|
|
437
594
|
"2010-01-01T00:00:00FOO" => RDF::XSD.dateTime,
|
|
438
595
|
"02010-01-01T00:00:00" => RDF::XSD.dateTime,
|
|
439
|
-
"2010-01-01"
|
|
440
|
-
"2010-1-1T00:00:00"
|
|
441
|
-
"0000-01-01T00:00:00"
|
|
442
|
-
|
|
443
|
-
"+2010-01-01Z"
|
|
444
|
-
"2010-01-01TFOO"
|
|
445
|
-
"02010-01-01"
|
|
446
|
-
"2010-1-1"
|
|
447
|
-
"0000-01-01"
|
|
448
|
-
|
|
449
|
-
"+00:00:00Z"
|
|
450
|
-
"-00:00:00Z"
|
|
596
|
+
"2010-01-01" => RDF::XSD.dateTime,
|
|
597
|
+
"2010-1-1T00:00:00" => RDF::XSD.dateTime,
|
|
598
|
+
"0000-01-01T00:00:00" => RDF::XSD.dateTime,
|
|
599
|
+
|
|
600
|
+
"+2010-01-01Z" => RDF::XSD.date,
|
|
601
|
+
"2010-01-01TFOO" => RDF::XSD.date,
|
|
602
|
+
"02010-01-01" => RDF::XSD.date,
|
|
603
|
+
"2010-1-1" => RDF::XSD.date,
|
|
604
|
+
"0000-01-01" => RDF::XSD.date,
|
|
605
|
+
|
|
606
|
+
"+00:00:00Z" => RDF::XSD.time,
|
|
607
|
+
"-00:00:00Z" => RDF::XSD.time,
|
|
451
608
|
}.each_pair do |value, datatype|
|
|
452
|
-
it "
|
|
609
|
+
it "does not validate for '#{value}'" do
|
|
610
|
+
@new.call(value, :datatype => datatype).invalid?.should be_true
|
|
453
611
|
@new.call(value, :datatype => datatype).valid?.should be_false
|
|
454
612
|
end
|
|
455
613
|
end
|