iq_rdf 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/README.md +4 -4
- data/iq_rdf.gemspec +1 -1
- data/lib/iq_rdf/blank_node.rb +1 -1
- data/lib/iq_rdf/collection.rb +1 -1
- data/lib/iq_rdf/document.rb +1 -1
- data/lib/iq_rdf/literal/boolean.rb +15 -0
- data/lib/iq_rdf/literal/numeric.rb +16 -0
- data/lib/iq_rdf/literal/string.rb +12 -0
- data/lib/iq_rdf/literal/uri.rb +20 -0
- data/lib/iq_rdf/literal.rb +23 -27
- data/lib/iq_rdf/namespace.rb +3 -3
- data/lib/iq_rdf/plain_turtle_literal.rb +1 -1
- data/lib/iq_rdf/predicate_namespace.rb +1 -1
- data/lib/iq_rdf/rails/iq_rdf.rb +1 -1
- data/lib/iq_rdf/uri.rb +1 -1
- data/lib/iq_rdf/version.rb +1 -1
- data/lib/iq_rdf.rb +5 -1
- data/test/turtle_test.rb +5 -3
- data/test/xml_test.rb +5 -3
- metadata +8 -4
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -26,10 +26,10 @@ document = IqRdf::Document.new('http://www.test.de/')
|
|
26
26
|
document.namespaces :skos => 'http://www.w3.org/2008/05/skos#',
|
27
27
|
:foaf => 'http://xmlns.com/foaf/0.1/' # A :rdf namespace is added automatically
|
28
28
|
|
29
|
-
document << IqRdf::john_doe.myCustomNote("This is an example", :lang => :en)
|
29
|
+
document << IqRdf::john_doe.myCustomNote("This is an example", :lang => :en)
|
30
30
|
# Turtle: :john_doe :myCustomNote "This is an example"@en.
|
31
31
|
|
32
|
-
document << IqRdf::john_doe(IqRdf::Foaf::build_uri("Person")).Foaf::name("John Doe")
|
32
|
+
document << IqRdf::john_doe(IqRdf::Foaf::build_uri("Person")).Foaf::name("John Doe")
|
33
33
|
# Turtle: :john_doe a foaf:Person; foaf:name "John Doe".
|
34
34
|
|
35
35
|
document << IqRdf::john_doe.Foaf::knows(IqRdf::jane_doe)
|
@@ -46,7 +46,7 @@ Gemfile (or with Rails 2.x in your config/environment.rb):
|
|
46
46
|
```ruby
|
47
47
|
gem "iq_rdf"
|
48
48
|
```
|
49
|
-
|
49
|
+
|
50
50
|
Add the mime types you want to support to your config/initializers/mime_types.rb
|
51
51
|
file:
|
52
52
|
|
@@ -55,7 +55,7 @@ Mime::Type.register "application/rdf+xml", :rdf
|
|
55
55
|
Mime::Type.register "text/turtle", :ttl
|
56
56
|
Mime::Type.register "application/n-triples", :nt
|
57
57
|
```
|
58
|
-
|
58
|
+
|
59
59
|
Now you can define views in you application. Use the extension *.iqrdf*
|
60
60
|
for the view files. You can use the extensions *.ttl* or
|
61
61
|
*.rdf* in the URL of your request, to force the output to be
|
data/iq_rdf.gemspec
CHANGED
data/lib/iq_rdf/blank_node.rb
CHANGED
data/lib/iq_rdf/collection.rb
CHANGED
@@ -20,7 +20,7 @@ module IqRdf
|
|
20
20
|
def initialize(collection)
|
21
21
|
@elements = []
|
22
22
|
collection.each do |element|
|
23
|
-
element = Literal.new(element) unless element.is_a?(IqRdf::Uri)
|
23
|
+
element = Literal.new(element) unless element.is_a?(IqRdf::Uri) || element.is_a?(IqRdf::Literal)
|
24
24
|
@elements << element
|
25
25
|
end
|
26
26
|
end
|
data/lib/iq_rdf/document.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
module IqRdf
|
2
|
+
class Literal
|
3
|
+
class Numeric < Literal
|
4
|
+
|
5
|
+
def initialize(num)
|
6
|
+
raise "#{num.inspect} is not a Numeric!" unless num.is_a?(::Numeric)
|
7
|
+
super(num, nil, ::URI.parse(num.is_a?(Integer) ? "http://www.w3.org/2001/XMLSchema#integer" : "http://www.w3.org/2001/XMLSchema#decimal"))
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s(parent_lang = nil)
|
11
|
+
@obj.to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module IqRdf
|
2
|
+
class Literal
|
3
|
+
class URI < Literal
|
4
|
+
|
5
|
+
def initialize(uri)
|
6
|
+
raise "#{uri.inspect} is not an URI" unless uri.is_a?(::URI)
|
7
|
+
super(uri)
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s(parent_lang = nil)
|
11
|
+
"<#{@obj.to_s}>"
|
12
|
+
end
|
13
|
+
|
14
|
+
def build_xml(xml, &block)
|
15
|
+
block.call("rdf:resource" => @obj.to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/iq_rdf/literal.rb
CHANGED
@@ -15,42 +15,38 @@
|
|
15
15
|
module IqRdf
|
16
16
|
class Literal
|
17
17
|
|
18
|
-
def initialize(obj, lang = nil)
|
18
|
+
def initialize(obj, lang = nil, datatype = nil)
|
19
|
+
raise "#{datatype.inspect} is not an URI" if datatype && !datatype.is_a?(::URI)
|
19
20
|
@obj = obj
|
21
|
+
@datatype = datatype
|
20
22
|
@lang = lang
|
21
23
|
end
|
22
24
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
"false"
|
31
|
-
elsif @obj.is_a?(Numeric)
|
32
|
-
@obj.to_s
|
25
|
+
def self.build(o)
|
26
|
+
if o.is_a?(::URI)
|
27
|
+
IqRdf::Literal::URI.new(o)
|
28
|
+
elsif o === true || o === false
|
29
|
+
IqRdf::Literal::Boolean.new(o)
|
30
|
+
elsif o.is_a?(::Numeric)
|
31
|
+
IqRdf::Literal::Numeric.new(o)
|
33
32
|
else
|
34
|
-
|
35
|
-
"#{quote}#{@obj.to_s.gsub("\\", "\\\\\\\\").gsub(/"/, "\\\"")}#{quote}#{(lang && lang != :none) ? "@#{lang}" : ""}"
|
33
|
+
IqRdf::Literal::String.new(o)
|
36
34
|
end
|
37
35
|
end
|
38
36
|
|
37
|
+
def to_s(parent_lang = nil)
|
38
|
+
lang = @lang || parent_lang # Use the Literals lang when given
|
39
|
+
quote = @obj.to_s.include?("\n") ? '"""' : '"'
|
40
|
+
"#{quote}#{@obj.to_s.gsub("\\", "\\\\\\\\").gsub(/"/, "\\\"")}#{quote}" <<
|
41
|
+
((lang && lang != :none) ? "@#{lang}" : "") <<
|
42
|
+
(@datatype ? "^^<#{@datatype.to_s}>" : "")
|
43
|
+
end
|
44
|
+
|
39
45
|
def build_xml(xml, &block)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
{ Integer => "http://www.w3.org/2001/XMLSchema#integer",
|
45
|
-
Float => "http://www.w3.org/2001/XMLSchema#decimal",
|
46
|
-
TrueClass => "http://www.w3.org/2001/XMLSchema#boolean",
|
47
|
-
FalseClass => "http://www.w3.org/2001/XMLSchema#boolean",
|
48
|
-
}.each do |klass, s|
|
49
|
-
opts["rdf:datatype"] = s if @obj.is_a?(klass)
|
50
|
-
end
|
51
|
-
opts["xml:lang"] = @lang if @lang
|
52
|
-
block.call(@obj.to_s, opts)
|
53
|
-
end
|
46
|
+
opts = {}
|
47
|
+
opts["rdf:datatype"] = @datatype.to_s if @datatype
|
48
|
+
opts["xml:lang"] = @lang if @lang
|
49
|
+
block.call(@obj.to_s, opts)
|
54
50
|
end
|
55
51
|
|
56
52
|
alias_method :full_uri, :to_s
|
data/lib/iq_rdf/namespace.rb
CHANGED
@@ -38,7 +38,7 @@ module IqRdf
|
|
38
38
|
end
|
39
39
|
|
40
40
|
# Namespace only methods
|
41
|
-
|
41
|
+
|
42
42
|
def self.create(token, uri_prefix)
|
43
43
|
klass_name = self.class_name(token)
|
44
44
|
klass = IqRdf.const_defined?(klass_name) ? IqRdf.const_get(klass_name) : IqRdf.const_set(klass_name, Class.new(self))
|
@@ -66,6 +66,6 @@ module IqRdf
|
|
66
66
|
def self.class_name(name)
|
67
67
|
name.to_s.gsub(/(^|_)(.)/) { $2.upcase }
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
end
|
71
|
-
end
|
71
|
+
end
|
data/lib/iq_rdf/rails/iq_rdf.rb
CHANGED
data/lib/iq_rdf/uri.rb
CHANGED
data/lib/iq_rdf/version.rb
CHANGED
data/lib/iq_rdf.rb
CHANGED
@@ -18,6 +18,10 @@ require 'iq_rdf/blank_node'
|
|
18
18
|
require 'iq_rdf/predicate'
|
19
19
|
|
20
20
|
require 'iq_rdf/literal'
|
21
|
+
require 'iq_rdf/literal/boolean'
|
22
|
+
require 'iq_rdf/literal/string'
|
23
|
+
require 'iq_rdf/literal/uri'
|
24
|
+
require 'iq_rdf/literal/numeric'
|
21
25
|
require 'iq_rdf/plain_turtle_literal'
|
22
26
|
require 'iq_rdf/namespace'
|
23
27
|
require 'iq_rdf/collection'
|
@@ -75,4 +79,4 @@ module IqRdf
|
|
75
79
|
Namespace.dummy_empty_namespace.build_uri(uri, type, &block)
|
76
80
|
end
|
77
81
|
|
78
|
-
end
|
82
|
+
end
|
data/test/turtle_test.rb
CHANGED
@@ -17,7 +17,7 @@ $LOAD_PATH << File.dirname(__FILE__)
|
|
17
17
|
require 'test_helper'
|
18
18
|
|
19
19
|
class TurtleTest < Test::Unit::TestCase
|
20
|
-
|
20
|
+
|
21
21
|
def test_basic_turtle_output
|
22
22
|
document = IqRdf::Document.new('http://www.test.de/', :lang => :de)
|
23
23
|
document.namespaces :foaf => 'http://xmlns.com/foaf/0.1/'
|
@@ -136,6 +136,7 @@ rdf
|
|
136
136
|
t.age(32)
|
137
137
|
t.married(false)
|
138
138
|
t.weight(65.8)
|
139
|
+
t.complex(IqRdf::Literal.new("A very complex type", :none, URI.parse("http://this.com/is#complex")))
|
139
140
|
t.quotes("\"I'm \\quoted\"")
|
140
141
|
t.line_breaks("I'm written\nover two lines")
|
141
142
|
t.some_literal(IqRdf::Literal.new("text", :de))
|
@@ -153,6 +154,7 @@ rdf
|
|
153
154
|
:age 32;
|
154
155
|
:married false;
|
155
156
|
:weight 65.8;
|
157
|
+
:complex "A very complex type"^^<http://this.com/is#complex>;
|
156
158
|
:quotes "\\"I'm \\\\quoted\\""@de;
|
157
159
|
:line_breaks """I'm written
|
158
160
|
over two lines"""@de;
|
@@ -213,5 +215,5 @@ rdf
|
|
213
215
|
].
|
214
216
|
rdf
|
215
217
|
end
|
216
|
-
|
217
|
-
end
|
218
|
+
|
219
|
+
end
|
data/test/xml_test.rb
CHANGED
@@ -17,7 +17,7 @@ $LOAD_PATH << File.dirname(__FILE__)
|
|
17
17
|
require 'test_helper'
|
18
18
|
|
19
19
|
class XmlTest < Test::Unit::TestCase
|
20
|
-
|
20
|
+
|
21
21
|
def test_basic_xml_output
|
22
22
|
document = IqRdf::Document.new('http://www.test.de/', :lang => :de)
|
23
23
|
document.namespaces :foaf => 'http://xmlns.com/foaf/0.1/'
|
@@ -68,7 +68,7 @@ rdf
|
|
68
68
|
document.namespaces :skos => 'http://www.w3.org/2008/05/skos#', :foaf => 'http://xmlns.com/foaf/0.1/', :upb => 'http://www.upb.de/'
|
69
69
|
|
70
70
|
document << IqRdf::testemann.myCustomNote("This is an example", :lang => :en) # :testemann :myCustomNote "This is an example"@en.
|
71
|
-
|
71
|
+
|
72
72
|
document << IqRdf::testemann(IqRdf::Foaf::build_uri("Person")).Foaf::name("Heinz Peter Testemann", :lang => :none) # :testemann a foaf:Person; foaf:name "Heinz Peter Testemann" .
|
73
73
|
document << IqRdf::testemann.Foaf::knows(IqRdf::testefrau) # :testemann foaf:knows :testefrau .
|
74
74
|
document << IqRdf::testemann.Foaf::nick("Crash test dummy") # :testemann foaf:nick "Crash test dummy"@de .
|
@@ -178,6 +178,7 @@ skos:testnode :test32 [
|
|
178
178
|
t.age(32)
|
179
179
|
t.married(false)
|
180
180
|
t.weight(65.8)
|
181
|
+
t.complex(IqRdf::Literal.new("A very complex type", :none, URI.parse("http://this.com/is#complex")))
|
181
182
|
t.quotes("\"I'm \\quoted\"")
|
182
183
|
t.line_breaks("I'm written\nover two lines")
|
183
184
|
t.some_literal(IqRdf::Literal.new("text", :de))
|
@@ -193,6 +194,7 @@ skos:testnode :test32 [
|
|
193
194
|
<age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">32</age>
|
194
195
|
<married rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</married>
|
195
196
|
<weight rdf:datatype="http://www.w3.org/2001/XMLSchema#decimal">65.8</weight>
|
197
|
+
<complex rdf:datatype="http://this.com/is#complex" xml:lang="none">A very complex type</complex>
|
196
198
|
<quotes>"I'm \\quoted"</quotes>
|
197
199
|
<line_breaks>I'm written
|
198
200
|
over two lines</line_breaks>
|
@@ -232,4 +234,4 @@ rdf
|
|
232
234
|
rdf
|
233
235
|
end
|
234
236
|
|
235
|
-
end
|
237
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iq_rdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Till Schulte-Coerne
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-02-22 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
prerelease: false
|
@@ -63,6 +63,10 @@ files:
|
|
63
63
|
- lib/iq_rdf/blank_node.rb
|
64
64
|
- lib/iq_rdf/collection.rb
|
65
65
|
- lib/iq_rdf/document.rb
|
66
|
+
- lib/iq_rdf/literal/boolean.rb
|
67
|
+
- lib/iq_rdf/literal/numeric.rb
|
68
|
+
- lib/iq_rdf/literal/string.rb
|
69
|
+
- lib/iq_rdf/literal/uri.rb
|
66
70
|
- lib/iq_rdf/literal.rb
|
67
71
|
- lib/iq_rdf/namespace.rb
|
68
72
|
- lib/iq_rdf/node.rb
|