rdf 0.2.2 → 0.2.3
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/README +1 -1
- data/VERSION +1 -1
- data/lib/rdf.rb +4 -0
- data/lib/rdf/mixin/writable.rb +20 -0
- data/lib/rdf/model/list.rb +698 -0
- data/lib/rdf/model/literal.rb +13 -1
- data/lib/rdf/model/literal/decimal.rb +91 -0
- data/lib/rdf/model/literal/double.rb +165 -0
- data/lib/rdf/model/literal/integer.rb +131 -0
- data/lib/rdf/model/literal/token.rb +47 -0
- data/lib/rdf/model/statement.rb +0 -1
- data/lib/rdf/query/pattern.rb +0 -1
- data/lib/rdf/query/variable.rb +8 -3
- data/lib/rdf/reader.rb +14 -0
- data/lib/rdf/util/cache.rb +2 -2
- data/lib/rdf/version.rb +1 -1
- data/lib/rdf/writer.rb +19 -9
- metadata +9 -7
data/lib/rdf/model/literal.rb
CHANGED
@@ -46,6 +46,7 @@ module RDF
|
|
46
46
|
autoload :Date, 'rdf/model/literal/date'
|
47
47
|
autoload :DateTime, 'rdf/model/literal/datetime'
|
48
48
|
autoload :Time, 'rdf/model/literal/time'
|
49
|
+
autoload :Token, 'rdf/model/literal/token'
|
49
50
|
autoload :XML, 'rdf/model/literal/xml'
|
50
51
|
|
51
52
|
include RDF::Value
|
@@ -78,6 +79,8 @@ module RDF
|
|
78
79
|
RDF::Literal::Integer
|
79
80
|
when XSD.unsignedLong, XSD.unsignedInt, XSD.unsignedShort, XSD.unsignedByte
|
80
81
|
RDF::Literal::Integer
|
82
|
+
when XSD.token, XSD.language
|
83
|
+
RDF::Literal::Token
|
81
84
|
when RDF.XMLLiteral
|
82
85
|
RDF::Literal::XML
|
83
86
|
else self
|
@@ -90,7 +93,8 @@ module RDF
|
|
90
93
|
when ::BigDecimal then RDF::Literal::Decimal
|
91
94
|
when ::DateTime then RDF::Literal::DateTime
|
92
95
|
when ::Date then RDF::Literal::Date
|
93
|
-
when ::Time then RDF::Literal::Time
|
96
|
+
when ::Time then RDF::Literal::Time # FIXME: Ruby's Time class can represent datetimes as well
|
97
|
+
when ::Symbol then RDF::Literal::Token
|
94
98
|
else self
|
95
99
|
end
|
96
100
|
end
|
@@ -171,6 +175,14 @@ module RDF
|
|
171
175
|
false
|
172
176
|
end
|
173
177
|
|
178
|
+
##
|
179
|
+
# Returns a hash code for this literal.
|
180
|
+
#
|
181
|
+
# @return [Fixnum]
|
182
|
+
def hash
|
183
|
+
to_s.hash
|
184
|
+
end
|
185
|
+
|
174
186
|
##
|
175
187
|
# @return [Boolean]
|
176
188
|
def eql?(other)
|
@@ -2,6 +2,12 @@ module RDF; class Literal
|
|
2
2
|
##
|
3
3
|
# A decimal literal.
|
4
4
|
#
|
5
|
+
# @example Arithmetic with decimal literals
|
6
|
+
# RDF::Literal(BigDecimal('1.0')) + 0.5 #=> RDF::Literal(BigDecimal('1.5'))
|
7
|
+
# RDF::Literal(BigDecimal('1.0')) - 0.5 #=> RDF::Literal(BigDecimal('0.5'))
|
8
|
+
# RDF::Literal(BigDecimal('1.0')) * 0.5 #=> RDF::Literal(BigDecimal('0.5'))
|
9
|
+
# RDF::Literal(BigDecimal('1.0')) / 0.5 #=> RDF::Literal(BigDecimal('2.0'))
|
10
|
+
#
|
5
11
|
# @see http://www.w3.org/TR/xmlschema-2/#decimal
|
6
12
|
# @since 0.2.1
|
7
13
|
class Decimal < Literal
|
@@ -40,6 +46,91 @@ module RDF; class Literal
|
|
40
46
|
self
|
41
47
|
end
|
42
48
|
|
49
|
+
##
|
50
|
+
# Returns the absolute value of `self`.
|
51
|
+
#
|
52
|
+
# @return [RDF::Literal]
|
53
|
+
# @since 0.2.3
|
54
|
+
def abs
|
55
|
+
(d = to_d) && d > 0 ? self : RDF::Literal(d.abs)
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Returns `true` if the value is zero.
|
60
|
+
#
|
61
|
+
# @return [Boolean]
|
62
|
+
# @since 0.2.3
|
63
|
+
def zero?
|
64
|
+
to_d.zero?
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# Returns `self` if the value is not zero, `nil` otherwise.
|
69
|
+
#
|
70
|
+
# @return [Boolean]
|
71
|
+
# @since 0.2.3
|
72
|
+
def nonzero?
|
73
|
+
to_d.nonzero? ? self : nil
|
74
|
+
end
|
75
|
+
|
76
|
+
##
|
77
|
+
# Returns `self`.
|
78
|
+
#
|
79
|
+
# @return [RDF::Literal]
|
80
|
+
# @since 0.2.3
|
81
|
+
def +@
|
82
|
+
self # unary plus
|
83
|
+
end
|
84
|
+
|
85
|
+
##
|
86
|
+
# Returns `self` negated.
|
87
|
+
#
|
88
|
+
# @return [RDF::Literal]
|
89
|
+
# @since 0.2.3
|
90
|
+
def -@
|
91
|
+
RDF::Literal(-to_d) # unary minus
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
# Returns the sum of `self` plus `other`.
|
96
|
+
#
|
97
|
+
# @param [#to_d] other
|
98
|
+
# @return [RDF::Literal]
|
99
|
+
# @since 0.2.3
|
100
|
+
def +(other)
|
101
|
+
RDF::Literal(to_d + (other.respond_to?(:to_d) ? other.to_d : BigDecimal(other.to_s)))
|
102
|
+
end
|
103
|
+
|
104
|
+
##
|
105
|
+
# Returns the difference of `self` minus `other`.
|
106
|
+
#
|
107
|
+
# @param [#to_d] other
|
108
|
+
# @return [RDF::Literal]
|
109
|
+
# @since 0.2.3
|
110
|
+
def -(other)
|
111
|
+
RDF::Literal(to_d - (other.respond_to?(:to_d) ? other.to_d : BigDecimal(other.to_s)))
|
112
|
+
end
|
113
|
+
|
114
|
+
##
|
115
|
+
# Returns the product of `self` times `other`.
|
116
|
+
#
|
117
|
+
# @param [#to_d] other
|
118
|
+
# @return [RDF::Literal]
|
119
|
+
# @since 0.2.3
|
120
|
+
def *(other)
|
121
|
+
RDF::Literal(to_d * (other.respond_to?(:to_d) ? other.to_d : BigDecimal(other.to_s)))
|
122
|
+
end
|
123
|
+
|
124
|
+
##
|
125
|
+
# Returns the quotient of `self` divided by `other`.
|
126
|
+
#
|
127
|
+
# @param [#to_d] other
|
128
|
+
# @return [RDF::Literal]
|
129
|
+
# @since 0.2.3
|
130
|
+
def /(other)
|
131
|
+
RDF::Literal(to_d / (other.respond_to?(:to_d) ? other.to_d : BigDecimal(other.to_s)))
|
132
|
+
end
|
133
|
+
|
43
134
|
##
|
44
135
|
# Returns the value as a string.
|
45
136
|
#
|
@@ -2,6 +2,12 @@ module RDF; class Literal
|
|
2
2
|
##
|
3
3
|
# An floating point number literal.
|
4
4
|
#
|
5
|
+
# @example Arithmetic with floating point literals
|
6
|
+
# RDF::Literal(1.0) + 0.5 #=> RDF::Literal(1.5)
|
7
|
+
# RDF::Literal(3.0) - 6 #=> RDF::Literal(-3.0)
|
8
|
+
# RDF::Literal(Math::PI) * 2 #=> RDF::Literal(Math::PI * 2)
|
9
|
+
# RDF::Literal(Math::PI) / 2 #=> RDF::Literal(Math::PI / 2)
|
10
|
+
#
|
5
11
|
# @see http://www.w3.org/TR/xmlschema-2/#double
|
6
12
|
# @since 0.2.1
|
7
13
|
class Double < Literal
|
@@ -45,6 +51,165 @@ module RDF; class Literal
|
|
45
51
|
self
|
46
52
|
end
|
47
53
|
|
54
|
+
##
|
55
|
+
# Returns `true` if the value is an invalid IEEE floating point number.
|
56
|
+
#
|
57
|
+
# @example
|
58
|
+
# RDF::Literal(-1.0).nan? #=> false
|
59
|
+
# RDF::Literal(1.0/0.0).nan? #=> false
|
60
|
+
# RDF::Literal(0.0/0.0).nan? #=> true
|
61
|
+
#
|
62
|
+
# @return [Boolean]
|
63
|
+
# @since 0.2.3
|
64
|
+
def nan?
|
65
|
+
to_f.nan?
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# Returns `true` if the value is a valid IEEE floating point number (it
|
70
|
+
# is not infinite, and `nan?` is `false`).
|
71
|
+
#
|
72
|
+
# @example
|
73
|
+
# RDF::Literal(-1.0).finite? #=> true
|
74
|
+
# RDF::Literal(1.0/0.0).finite? #=> false
|
75
|
+
# RDF::Literal(0.0/0.0).finite? #=> false
|
76
|
+
#
|
77
|
+
# @return [Boolean]
|
78
|
+
# @since 0.2.3
|
79
|
+
def finite?
|
80
|
+
to_f.finite?
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# Returns `nil`, `-1`, or `+1` depending on whether the value is finite,
|
85
|
+
# `-INF`, or `+INF`.
|
86
|
+
#
|
87
|
+
# @example
|
88
|
+
# RDF::Literal(0.0/0.0).infinite? #=> nil
|
89
|
+
# RDF::Literal(-1.0/0.0).infinite? #=> -1
|
90
|
+
# RDF::Literal(+1.0/0.0).infinite? #=> 1
|
91
|
+
#
|
92
|
+
# @return [Integer]
|
93
|
+
# @since 0.2.3
|
94
|
+
def infinite?
|
95
|
+
to_f.infinite?
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# Returns the smallest integer greater than or equal to `self`.
|
100
|
+
#
|
101
|
+
# @example
|
102
|
+
# RDF::Literal(1.2).ceil #=> RDF::Literal(2)
|
103
|
+
# RDF::Literal(-1.2).ceil #=> RDF::Literal(-1)
|
104
|
+
# RDF::Literal(2.0).ceil #=> RDF::Literal(2)
|
105
|
+
# RDF::Literal(-2.0).ceil #=> RDF::Literal(-2)
|
106
|
+
#
|
107
|
+
# @return [RDF::Literal]
|
108
|
+
# @since 0.2.3
|
109
|
+
def ceil
|
110
|
+
RDF::Literal(to_f.ceil)
|
111
|
+
end
|
112
|
+
|
113
|
+
##
|
114
|
+
# Returns the largest integer less than or equal to `self`.
|
115
|
+
#
|
116
|
+
# @example
|
117
|
+
# RDF::Literal(1.2).floor #=> RDF::Literal(1)
|
118
|
+
# RDF::Literal(-1.2).floor #=> RDF::Literal(-2)
|
119
|
+
# RDF::Literal(2.0).floor #=> RDF::Literal(2)
|
120
|
+
# RDF::Literal(-2.0).floor #=> RDF::Literal(-2)
|
121
|
+
#
|
122
|
+
# @return [RDF::Literal]
|
123
|
+
# @since 0.2.3
|
124
|
+
def floor
|
125
|
+
RDF::Literal(to_f.floor)
|
126
|
+
end
|
127
|
+
|
128
|
+
##
|
129
|
+
# Returns the absolute value of `self`.
|
130
|
+
#
|
131
|
+
# @return [RDF::Literal]
|
132
|
+
# @since 0.2.3
|
133
|
+
def abs
|
134
|
+
(f = to_f) && f > 0 ? self : RDF::Literal(f.abs)
|
135
|
+
end
|
136
|
+
|
137
|
+
##
|
138
|
+
# Returns `true` if the value is zero.
|
139
|
+
#
|
140
|
+
# @return [Boolean]
|
141
|
+
# @since 0.2.3
|
142
|
+
def zero?
|
143
|
+
to_f.zero?
|
144
|
+
end
|
145
|
+
|
146
|
+
##
|
147
|
+
# Returns `self` if the value is not zero, `nil` otherwise.
|
148
|
+
#
|
149
|
+
# @return [Boolean]
|
150
|
+
# @since 0.2.3
|
151
|
+
def nonzero?
|
152
|
+
to_f.nonzero? ? self : nil
|
153
|
+
end
|
154
|
+
|
155
|
+
##
|
156
|
+
# Returns `self`.
|
157
|
+
#
|
158
|
+
# @return [RDF::Literal]
|
159
|
+
# @since 0.2.3
|
160
|
+
def +@
|
161
|
+
self # unary plus
|
162
|
+
end
|
163
|
+
|
164
|
+
##
|
165
|
+
# Returns `self` negated.
|
166
|
+
#
|
167
|
+
# @return [RDF::Literal]
|
168
|
+
# @since 0.2.3
|
169
|
+
def -@
|
170
|
+
RDF::Literal(-to_f) # unary minus
|
171
|
+
end
|
172
|
+
|
173
|
+
##
|
174
|
+
# Returns the sum of `self` plus `other`.
|
175
|
+
#
|
176
|
+
# @param [#to_f] other
|
177
|
+
# @return [RDF::Literal]
|
178
|
+
# @since 0.2.3
|
179
|
+
def +(other)
|
180
|
+
RDF::Literal(to_f + other.to_f)
|
181
|
+
end
|
182
|
+
|
183
|
+
##
|
184
|
+
# Returns the difference of `self` minus `other`.
|
185
|
+
#
|
186
|
+
# @param [#to_f] other
|
187
|
+
# @return [RDF::Literal]
|
188
|
+
# @since 0.2.3
|
189
|
+
def -(other)
|
190
|
+
RDF::Literal(to_f - other.to_f)
|
191
|
+
end
|
192
|
+
|
193
|
+
##
|
194
|
+
# Returns the product of `self` times `other`.
|
195
|
+
#
|
196
|
+
# @param [#to_f] other
|
197
|
+
# @return [RDF::Literal]
|
198
|
+
# @since 0.2.3
|
199
|
+
def *(other)
|
200
|
+
RDF::Literal(to_f * other.to_f)
|
201
|
+
end
|
202
|
+
|
203
|
+
##
|
204
|
+
# Returns the quotient of `self` divided by `other`.
|
205
|
+
#
|
206
|
+
# @param [#to_f] other
|
207
|
+
# @return [RDF::Literal]
|
208
|
+
# @since 0.2.3
|
209
|
+
def /(other)
|
210
|
+
RDF::Literal(to_f / other.to_f)
|
211
|
+
end
|
212
|
+
|
48
213
|
##
|
49
214
|
# Returns the value as a string.
|
50
215
|
#
|
@@ -2,6 +2,12 @@ module RDF; class Literal
|
|
2
2
|
##
|
3
3
|
# An integer literal.
|
4
4
|
#
|
5
|
+
# @example Arithmetic with integer literals
|
6
|
+
# RDF::Literal(40) + 2 #=> RDF::Literal(42)
|
7
|
+
# RDF::Literal(45) - 3 #=> RDF::Literal(42)
|
8
|
+
# RDF::Literal(6) * 7 #=> RDF::Literal(42)
|
9
|
+
# RDF::Literal(84) / 2 #=> RDF::Literal(42)
|
10
|
+
#
|
5
11
|
# @see http://www.w3.org/TR/xmlschema-2/#integer
|
6
12
|
# @since 0.2.1
|
7
13
|
class Integer < Decimal
|
@@ -33,6 +39,129 @@ module RDF; class Literal
|
|
33
39
|
self
|
34
40
|
end
|
35
41
|
|
42
|
+
##
|
43
|
+
# Returns the successor value of `self`.
|
44
|
+
#
|
45
|
+
# @return [RDF::Literal]
|
46
|
+
# @since 0.2.3
|
47
|
+
def pred
|
48
|
+
RDF::Literal(to_i.pred)
|
49
|
+
end
|
50
|
+
|
51
|
+
##
|
52
|
+
# Returns the predecessor value of `self`.
|
53
|
+
#
|
54
|
+
# @return [RDF::Literal]
|
55
|
+
# @since 0.2.3
|
56
|
+
def succ
|
57
|
+
RDF::Literal(to_i.succ)
|
58
|
+
end
|
59
|
+
alias_method :next, :succ
|
60
|
+
|
61
|
+
##
|
62
|
+
# Returns `true` if the value is even.
|
63
|
+
#
|
64
|
+
# @return [Boolean]
|
65
|
+
# @since 0.2.3
|
66
|
+
def even?
|
67
|
+
to_i.even?
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# Returns `true` if the value is odd.
|
72
|
+
#
|
73
|
+
# @return [Boolean]
|
74
|
+
# @since 0.2.3
|
75
|
+
def odd?
|
76
|
+
to_i.odd?
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# Returns the absolute value of `self`.
|
81
|
+
#
|
82
|
+
# @return [RDF::Literal]
|
83
|
+
# @since 0.2.3
|
84
|
+
def abs
|
85
|
+
(n = to_i) && n > 0 ? self : RDF::Literal(n.abs)
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Returns `true` if the value is zero.
|
90
|
+
#
|
91
|
+
# @return [Boolean]
|
92
|
+
# @since 0.2.3
|
93
|
+
def zero?
|
94
|
+
to_i.zero?
|
95
|
+
end
|
96
|
+
|
97
|
+
##
|
98
|
+
# Returns `self` if the value is not zero, `nil` otherwise.
|
99
|
+
#
|
100
|
+
# @return [Boolean]
|
101
|
+
# @since 0.2.3
|
102
|
+
def nonzero?
|
103
|
+
to_i.nonzero? ? self : nil
|
104
|
+
end
|
105
|
+
|
106
|
+
##
|
107
|
+
# Returns `self`.
|
108
|
+
#
|
109
|
+
# @return [RDF::Literal]
|
110
|
+
# @since 0.2.3
|
111
|
+
def +@
|
112
|
+
self # unary plus
|
113
|
+
end
|
114
|
+
|
115
|
+
##
|
116
|
+
# Returns `self` negated.
|
117
|
+
#
|
118
|
+
# @return [RDF::Literal]
|
119
|
+
# @since 0.2.3
|
120
|
+
def -@
|
121
|
+
RDF::Literal(-to_i) # unary minus
|
122
|
+
end
|
123
|
+
|
124
|
+
##
|
125
|
+
# Returns the sum of `self` plus `other`.
|
126
|
+
#
|
127
|
+
# @param [#to_i] other
|
128
|
+
# @return [RDF::Literal]
|
129
|
+
# @since 0.2.3
|
130
|
+
def +(other)
|
131
|
+
RDF::Literal(to_i + other.to_i)
|
132
|
+
end
|
133
|
+
|
134
|
+
##
|
135
|
+
# Returns the difference of `self` minus `other`.
|
136
|
+
#
|
137
|
+
# @param [#to_i] other
|
138
|
+
# @return [RDF::Literal]
|
139
|
+
# @since 0.2.3
|
140
|
+
def -(other)
|
141
|
+
RDF::Literal(to_i - other.to_i)
|
142
|
+
end
|
143
|
+
|
144
|
+
##
|
145
|
+
# Returns the product of `self` times `other`.
|
146
|
+
#
|
147
|
+
# @param [#to_i] other
|
148
|
+
# @return [RDF::Literal]
|
149
|
+
# @since 0.2.3
|
150
|
+
def *(other)
|
151
|
+
RDF::Literal(to_i * other.to_i)
|
152
|
+
end
|
153
|
+
|
154
|
+
##
|
155
|
+
# Returns the quotient of `self` divided by `other`.
|
156
|
+
#
|
157
|
+
# @param [#to_i] other
|
158
|
+
# @return [RDF::Literal]
|
159
|
+
# @raise [ZeroDivisionError] if divided by zero
|
160
|
+
# @since 0.2.3
|
161
|
+
def /(other)
|
162
|
+
RDF::Literal(to_i / other.to_i)
|
163
|
+
end
|
164
|
+
|
36
165
|
##
|
37
166
|
# Returns the value as a string.
|
38
167
|
#
|
@@ -48,6 +177,8 @@ module RDF; class Literal
|
|
48
177
|
def to_i
|
49
178
|
@object.to_i
|
50
179
|
end
|
180
|
+
alias_method :to_int, :to_i
|
181
|
+
alias_method :ord, :to_i
|
51
182
|
|
52
183
|
##
|
53
184
|
# Returns the value as a floating point number.
|