rdf_context 0.5.6 → 0.5.7
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/.yardopts +10 -0
- data/{History.txt → History.rdoc} +8 -1
- data/Rakefile +9 -2
- data/VERSION +1 -1
- data/bin/rdf_context +5 -2
- data/lib/rdf_context/aggregate_graph.rb +31 -2
- data/lib/rdf_context/array_hacks.rb +3 -3
- data/lib/rdf_context/bnode.rb +3 -3
- data/lib/rdf_context/conjunctive_graph.rb +8 -8
- data/lib/rdf_context/duration.rb +17 -4
- data/lib/rdf_context/graph.rb +84 -46
- data/lib/rdf_context/literal.rb +36 -3
- data/lib/rdf_context/n3parser.rb +4 -4
- data/lib/rdf_context/namespace.rb +21 -8
- data/lib/rdf_context/parser.rb +31 -16
- data/lib/rdf_context/quoted_graph.rb +5 -4
- data/lib/rdf_context/rdfaparser.rb +176 -91
- data/lib/rdf_context/rdfxmlparser.rb +50 -13
- data/lib/rdf_context/serializer/abstract_serializer.rb +14 -4
- data/lib/rdf_context/serializer/nt_serializer.rb +5 -0
- data/lib/rdf_context/serializer/recursive_serializer.rb +4 -0
- data/lib/rdf_context/serializer/turtle_serializer.rb +28 -27
- data/lib/rdf_context/serializer/xml_serializer.rb +11 -9
- data/lib/rdf_context/store/abstract_sql_store.rb +47 -4
- data/lib/rdf_context/store/abstract_store.rb +73 -1
- data/lib/rdf_context/store/list_store.rb +25 -6
- data/lib/rdf_context/store/memory_store.rb +33 -1
- data/lib/rdf_context/store/sqlite3_store.rb +7 -4
- data/lib/rdf_context/term_utils.rb +6 -0
- data/lib/rdf_context/triple.rb +17 -6
- data/lib/rdf_context/uriref.rb +19 -3
- data/spec/html4-manifest.yml +176 -176
- data/spec/html5-manifest.yml +176 -176
- data/spec/rdfa_helper.rb +8 -2
- data/spec/rdfa_parser_spec.rb +1 -1
- data/spec/rdfcore/Manifest.yml +1561 -2626
- data/spec/swap_test/n3parser.yml +134 -279
- data/spec/swap_test/regression.yml +140 -305
- data/spec/turtle/manifest-bad.yml +155 -310
- data/spec/turtle/manifest.yml +155 -310
- data/spec/xhtml-manifest.yml +139 -587
- data/spec/xhtml11-manifest.yml +4405 -0
- metadata +21 -7
- data/.gitmodules +0 -3
@@ -6,14 +6,38 @@ module RdfContext
|
|
6
6
|
OLD_TERMS = %w(aboutEach aboutEachPrefix bagID).map {|n| "http://www.w3.org/1999/02/22-rdf-syntax-ns##{n}"}
|
7
7
|
|
8
8
|
# The Recursive Baggage
|
9
|
+
# @private
|
9
10
|
class EvaluationContext # :nodoc:
|
11
|
+
# The base.
|
12
|
+
#
|
13
|
+
# This will usually be the URL of the document being processed,
|
14
|
+
# but it could be some other URL, set by some other mechanism,
|
15
|
+
# such as the (X)HTML base element. The important thing is that it establishes
|
16
|
+
# a URL against which relative paths can be resolved.
|
17
|
+
#
|
18
|
+
# @return [URIRef]
|
10
19
|
attr_reader :base
|
20
|
+
# @return [URIRef]
|
11
21
|
attr :subject, true
|
22
|
+
# A list of current, in-scope URI mappings.
|
23
|
+
#
|
24
|
+
# @return [Hash{String => Namespace}]
|
12
25
|
attr :uri_mappings, true
|
26
|
+
# The language. Note that there is no default language.
|
27
|
+
#
|
28
|
+
# @return [String]
|
13
29
|
attr :language, true
|
30
|
+
# Graph for binding Namespaces
|
31
|
+
# @return [Graph]
|
14
32
|
attr :graph, true
|
33
|
+
# Counter for creating rdf:_n values
|
34
|
+
# @return [Integer]
|
15
35
|
attr :li_counter, true
|
16
36
|
|
37
|
+
# @param [String] base Base URI for creating absolute URIs from relative URIs
|
38
|
+
# @param [Nokogiri::XML::Element] element XML Element context
|
39
|
+
# @param [Graph] graph Graph for binding Namespaces
|
40
|
+
# @return [RdfXmlParser::EvaluationContext]
|
17
41
|
def initialize(base, element, graph)
|
18
42
|
# Initialize the evaluation context, [5.1]
|
19
43
|
self.base = base
|
@@ -27,6 +51,8 @@ module RdfContext
|
|
27
51
|
end
|
28
52
|
|
29
53
|
# Clone existing evaluation context adding information from element
|
54
|
+
# @param [Nokogiri::XML::Element] element XML Element context
|
55
|
+
# @return [RdfXmlParser::EvaluationContext]
|
30
56
|
def clone(element, options = {})
|
31
57
|
new_ec = EvaluationContext.new(@base, nil, @graph)
|
32
58
|
new_ec.uri_mappings = self.uri_mappings.clone
|
@@ -39,26 +65,32 @@ module RdfContext
|
|
39
65
|
end
|
40
66
|
|
41
67
|
# Extract Evaluation Context from an element by looking at ancestors recurively
|
42
|
-
|
43
|
-
|
68
|
+
# @param [Nokogiri::XML::Element] element XML Element context
|
69
|
+
# @return [Hash{URIRef => Namespace}]
|
70
|
+
def extract_from_ancestors(element)
|
71
|
+
ancestors = element.ancestors
|
44
72
|
while ancestors.length > 0
|
45
73
|
a = ancestors.pop
|
46
74
|
next unless a.element?
|
47
75
|
extract_from_element(a)
|
48
76
|
end
|
49
|
-
extract_from_element(
|
77
|
+
extract_from_element(element)
|
50
78
|
end
|
51
79
|
|
52
80
|
# Extract Evaluation Context from an element
|
53
|
-
|
54
|
-
|
55
|
-
|
81
|
+
# @param [Nokogiri::XML::Element] element XML Element context
|
82
|
+
# @return [Hash{URIRef => Namespace}]
|
83
|
+
def extract_from_element(element)
|
84
|
+
b = element.attribute_with_ns("base", XML_NS.uri.to_s)
|
85
|
+
lang = element.attribute_with_ns("lang", XML_NS.uri.to_s)
|
56
86
|
self.base = URIRef.new(b.to_s.rdf_unescape, self.base, :normalize => false) if b
|
57
87
|
self.language = lang if lang
|
58
|
-
self.uri_mappings.merge!(extract_mappings(
|
88
|
+
self.uri_mappings.merge!(extract_mappings(element))
|
59
89
|
end
|
60
90
|
|
61
91
|
# Extract the XMLNS mappings from an element
|
92
|
+
# @param [Nokogiri::XML::Element] element XML Element context
|
93
|
+
# @return [Hash{URIRef => Namespace}]
|
62
94
|
def extract_mappings(element)
|
63
95
|
mappings = {}
|
64
96
|
|
@@ -75,6 +107,8 @@ module RdfContext
|
|
75
107
|
end
|
76
108
|
|
77
109
|
# Produce the next list entry for this context
|
110
|
+
# @param [URIRef] predicate
|
111
|
+
# @return [URIRef]
|
78
112
|
def li_next(predicate)
|
79
113
|
@li_counter += 1
|
80
114
|
predicate = Addressable::URI.parse(predicate.to_s)
|
@@ -83,6 +117,8 @@ module RdfContext
|
|
83
117
|
end
|
84
118
|
|
85
119
|
# Set XML base. Ignore any fragment
|
120
|
+
# @param [Nokogiri::XML::Element] b
|
121
|
+
# @return [String] b.to_s
|
86
122
|
def base=(b)
|
87
123
|
b = Addressable::URI.parse(b.to_s)
|
88
124
|
b.fragment = nil
|
@@ -103,12 +139,13 @@ module RdfContext
|
|
103
139
|
#
|
104
140
|
# Optionally, the stream may be a string or Nokogiri::XML::Document
|
105
141
|
#
|
106
|
-
# @param
|
107
|
-
# @param [String] uri
|
108
|
-
# @
|
109
|
-
#
|
110
|
-
#
|
111
|
-
# @
|
142
|
+
# @param [Nokogiri::XML::Document, #read, #to_s] stream the HTML+RDFa IO stream, string, Nokogiri::HTML::Document or Nokogiri::XML::Document
|
143
|
+
# @param [String] uri (nil) the URI of the document
|
144
|
+
# @option options [Array] :debug (nil) Array to place debug messages
|
145
|
+
# @option options [Boolean] :strict (false) Raise Error if true, continue with lax parsing, otherwise
|
146
|
+
# @return [Graph] Returns the graph containing parsed triples
|
147
|
+
# @yield [triple]
|
148
|
+
# @yieldparam [Triple] triple
|
112
149
|
# @raise [Error]:: Raises RdfError if _strict_
|
113
150
|
def parse(stream, uri = nil, options = {}, &block) # :yields: triple
|
114
151
|
super
|
@@ -3,8 +3,15 @@ require File.join(File.dirname(__FILE__), '..', 'uriref')
|
|
3
3
|
module RdfContext
|
4
4
|
# Abstract serializer
|
5
5
|
class AbstractSerializer
|
6
|
-
|
6
|
+
# @return [Graph]
|
7
|
+
attr_accessor :graph
|
7
8
|
|
9
|
+
# @return [String]
|
10
|
+
attr_accessor :base
|
11
|
+
|
12
|
+
# New AbstractSerializer
|
13
|
+
# @param [Graph] graph
|
14
|
+
# @return [AbstractSerializer]
|
8
15
|
def initialize(graph)
|
9
16
|
@graph = graph
|
10
17
|
@base = nil
|
@@ -12,12 +19,15 @@ module RdfContext
|
|
12
19
|
|
13
20
|
# Serialize the graph
|
14
21
|
#
|
15
|
-
# @param [IO, StreamIO] stream
|
16
|
-
# @
|
17
|
-
#
|
22
|
+
# @param [IO, StreamIO] stream Stream in which to place serialized graph
|
23
|
+
# @option options [URIRef, String] :base (nil) Base URI of graph, used to shorting URI references
|
24
|
+
# @return [void]
|
18
25
|
def serialize(stream, options = {})
|
19
26
|
end
|
20
27
|
|
28
|
+
# Create a relative version of the _uri_ parameter if a _base_ URI is defined
|
29
|
+
# @param [#to_s] uri
|
30
|
+
# @return [String]
|
21
31
|
def relativize(uri)
|
22
32
|
uri = uri.to_s
|
23
33
|
self.base ? uri.sub(/^#{self.base}/, "") : uri
|
@@ -3,6 +3,11 @@ require File.join(File.dirname(__FILE__), 'abstract_serializer')
|
|
3
3
|
module RdfContext
|
4
4
|
# Serialize RDF graphs in NTriples format
|
5
5
|
class NTSerializer < AbstractSerializer
|
6
|
+
# Serialize the graph
|
7
|
+
#
|
8
|
+
# @param [IO, StreamIO] stream Stream in which to place serialized graph
|
9
|
+
# @option options [URIRef, String] :base (nil) Base URI of graph, used to shorting URI references
|
10
|
+
# @return [void]
|
6
11
|
def serialize(stream, base = nil)
|
7
12
|
@graph.triples.collect do |t|
|
8
13
|
stream.write(t.to_ntriples + "\n")
|
@@ -8,12 +8,16 @@ module RdfContext
|
|
8
8
|
MAX_DEPTH = 10
|
9
9
|
INDENT_STRING = " "
|
10
10
|
|
11
|
+
# New RecursiveSerializer
|
12
|
+
# @param [Graph] graph
|
13
|
+
# @return [RecursiveSerializer]
|
11
14
|
def initialize(graph)
|
12
15
|
super(graph)
|
13
16
|
@stream = nil
|
14
17
|
self.reset
|
15
18
|
end
|
16
19
|
|
20
|
+
protected
|
17
21
|
def top_classes; [RDFS_NS.Class]; end
|
18
22
|
def predicate_order; [RDF_TYPE, RDFS_NS.label, DC_NS.title]; end
|
19
23
|
|
@@ -7,6 +7,34 @@ module RdfContext
|
|
7
7
|
VERB = 1
|
8
8
|
OBJECT = 2
|
9
9
|
|
10
|
+
# Serialize the graph
|
11
|
+
#
|
12
|
+
# @param [IO, StreamIO] stream Stream in which to place serialized graph
|
13
|
+
# @option options [URIRef, String] :base (nil) Base URI of graph, used to shorting URI references
|
14
|
+
# @return [void]
|
15
|
+
def serialize(stream, options = {})
|
16
|
+
puts "\nserialize: #{@graph.inspect}" if $DEBUG
|
17
|
+
reset
|
18
|
+
@stream = stream
|
19
|
+
@base = options[:base]
|
20
|
+
|
21
|
+
@graph.bind(RDF_NS)
|
22
|
+
@graph.bind(RDFS_NS)
|
23
|
+
|
24
|
+
preprocess
|
25
|
+
start_document
|
26
|
+
|
27
|
+
order_subjects.each do |subject|
|
28
|
+
#puts "subj: #{subject.inspect}"
|
29
|
+
unless is_done?(subject)
|
30
|
+
statement(subject)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end_document
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
10
38
|
def reset
|
11
39
|
super
|
12
40
|
@shortNames = {}
|
@@ -188,32 +216,5 @@ module RdfContext
|
|
188
216
|
subject_done(subject)
|
189
217
|
s_squared(subject) || s_default(subject)
|
190
218
|
end
|
191
|
-
|
192
|
-
# Serialize the graph
|
193
|
-
#
|
194
|
-
# @param [IO, StreamIO] stream:: Stream in which to place serialized graph
|
195
|
-
# @param [Hash] options:: Options for parser
|
196
|
-
# <em>options[:base]</em>:: Base URI of graph, used to shorting URI references
|
197
|
-
def serialize(stream, options = {})
|
198
|
-
puts "\nserialize: #{@graph.inspect}" if $DEBUG
|
199
|
-
reset
|
200
|
-
@stream = stream
|
201
|
-
@base = options[:base]
|
202
|
-
|
203
|
-
@graph.bind(RDF_NS)
|
204
|
-
@graph.bind(RDFS_NS)
|
205
|
-
|
206
|
-
preprocess
|
207
|
-
start_document
|
208
|
-
|
209
|
-
order_subjects.each do |subject|
|
210
|
-
#puts "subj: #{subject.inspect}"
|
211
|
-
unless is_done?(subject)
|
212
|
-
statement(subject)
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
end_document
|
217
|
-
end
|
218
219
|
end
|
219
220
|
end
|
@@ -5,6 +5,9 @@ module RdfContext
|
|
5
5
|
class XmlSerializer < RecursiveSerializer
|
6
6
|
VALID_ATTRIBUTES = [:none, :untyped, :typed]
|
7
7
|
|
8
|
+
# New XmlSerializer
|
9
|
+
# @param [Graph] graph
|
10
|
+
# @return [XmlSerializer]
|
8
11
|
def initialize(graph)
|
9
12
|
super
|
10
13
|
@force_RDF_about = {}
|
@@ -12,16 +15,15 @@ module RdfContext
|
|
12
15
|
|
13
16
|
# Serialize the graph
|
14
17
|
#
|
15
|
-
# @param [IO, StreamIO] stream
|
16
|
-
# @
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
# -- Serialization Examples
|
23
|
-
# attributes == :none
|
18
|
+
# @param [IO, StreamIO] stream Stream in which to place serialized graph
|
19
|
+
# @option options [URIRef, String] :base (nil) Base URI of graph, used to shorting URI references
|
20
|
+
# @option options [Integer] :max_depth (3) Maximum depth for recursively defining resources
|
21
|
+
# @option options [String] :lang (nil) Output as root xml:lang attribute, and avoid generation xml:lang where possible
|
22
|
+
# @option options [:none, :untyped, :typed] :attributes (:none) How to use XML attributes when serializing, one of :none, :untyped, :typed. The default is none.
|
23
|
+
# @return [void]
|
24
24
|
#
|
25
|
+
# @example
|
26
|
+
# attributes == :none
|
25
27
|
# serialize(io, :attributes => none)
|
26
28
|
def serialize(stream, options = {})
|
27
29
|
@max_depth = options[:max_depth] || 3
|
@@ -31,8 +31,10 @@ module RdfContext
|
|
31
31
|
|
32
32
|
STRONGLY_TYPED_TERMS = false
|
33
33
|
|
34
|
-
#
|
35
|
-
# @param[
|
34
|
+
# Create a new AbstractSQLStore Store, should be subclassed
|
35
|
+
# @param [URIRef] identifier
|
36
|
+
# @param[Hash] configuration Specific to type of storage
|
37
|
+
# @return [AbstractSQLStore]
|
36
38
|
def initialize(identifier = nil, configuration = {})
|
37
39
|
@literalCache = {}
|
38
40
|
@otherCache = {}
|
@@ -50,14 +52,20 @@ module RdfContext
|
|
50
52
|
end
|
51
53
|
|
52
54
|
# Supports contexts
|
55
|
+
# @return [true]
|
53
56
|
def context_aware?; true; end
|
54
57
|
|
55
58
|
# Supports formulae
|
59
|
+
# @return [true]
|
56
60
|
def formula_aware?; true; end
|
57
61
|
|
58
62
|
# Supports transactions
|
63
|
+
# @return [true]
|
59
64
|
def transaction_aware?; true; end
|
60
|
-
|
65
|
+
|
66
|
+
# Close the store
|
67
|
+
# @param [Boolean] commit_pending_transactions (false)
|
68
|
+
# @return [void]
|
61
69
|
def close(commit_pending_transactions = false)
|
62
70
|
@db.commit if commit_pending_transactions && @db.transaction_active?
|
63
71
|
@db.close
|
@@ -65,6 +73,11 @@ module RdfContext
|
|
65
73
|
|
66
74
|
# Add a triple to the store
|
67
75
|
# Add to default context, if context is nil
|
76
|
+
#
|
77
|
+
# @param [Triple] triple
|
78
|
+
# @param [Graph] context (nil)
|
79
|
+
# @param [Boolean] quoted (false) A quoted triple, for Formulae
|
80
|
+
# @return [Triple]
|
68
81
|
def add(triple, context = nil, quoted = false)
|
69
82
|
context ||= @identifier
|
70
83
|
executeSQL("SET AUTOCOMMIT=0") if @autocommit_default
|
@@ -87,6 +100,10 @@ module RdfContext
|
|
87
100
|
# Remove a triple from the context and store
|
88
101
|
#
|
89
102
|
# if subject, predicate and object are nil and context is not nil, the context is removed
|
103
|
+
#
|
104
|
+
# @param [Triple] triple
|
105
|
+
# @param [Graph] context (nil)
|
106
|
+
# @return [void]
|
90
107
|
def remove(triple, context = nil)
|
91
108
|
if context
|
92
109
|
if triple.subject == nil && triple.predicate.nil? && triple.object.nil?
|
@@ -147,7 +164,15 @@ module RdfContext
|
|
147
164
|
# triple columns: subject,predicate,object,context,termComb,objLanguage,objDatatype
|
148
165
|
# class membership columns: member,klass,context termComb
|
149
166
|
#
|
150
|
-
#
|
167
|
+
# @todo These union all selects *may* be further optimized by joins
|
168
|
+
#
|
169
|
+
# @param [Triple] triple
|
170
|
+
# @param [Graph] context (nil)
|
171
|
+
# @return [Array<Triplle>]
|
172
|
+
# @raise [StoreException] Not Implemented
|
173
|
+
# @yield [triple, context]
|
174
|
+
# @yieldparam [Triple] triple
|
175
|
+
# @yieldparam [Graph] context
|
151
176
|
def triples(triple, context = nil) # :yields: triple, context
|
152
177
|
parameters = []
|
153
178
|
|
@@ -261,6 +286,11 @@ module RdfContext
|
|
261
286
|
results.uniq
|
262
287
|
end
|
263
288
|
|
289
|
+
# Check to see if this store contains the specified triple
|
290
|
+
#
|
291
|
+
# @param [Triple] triple
|
292
|
+
# @param [Graph] context (nil)
|
293
|
+
# @return [Boolean]
|
264
294
|
def contains?(triple, context = nil)
|
265
295
|
#puts "contains? #{triple}"
|
266
296
|
object = triple.object
|
@@ -276,6 +306,8 @@ module RdfContext
|
|
276
306
|
end
|
277
307
|
|
278
308
|
# Number of statements in the store.
|
309
|
+
# @param [Graph] context (nil)
|
310
|
+
# @return [Integer]
|
279
311
|
def size(context = nil)
|
280
312
|
parameters = []
|
281
313
|
quotedContext = assertedContext = typeContext = literalContext = nil
|
@@ -364,6 +396,8 @@ module RdfContext
|
|
364
396
|
end
|
365
397
|
|
366
398
|
# Contexts containing the triple (no matching), or total number of contexts in store
|
399
|
+
# @param [Triple] triple (nil) Containing the triple/pattern if not nil
|
400
|
+
# @return [Array<Graph>]
|
367
401
|
def contexts(triple = nil)
|
368
402
|
parameters = []
|
369
403
|
|
@@ -505,6 +539,9 @@ module RdfContext
|
|
505
539
|
# Namespace persistence interface implementation
|
506
540
|
#
|
507
541
|
# Bind namespace to store, returns bound namespace
|
542
|
+
#
|
543
|
+
# @param [Nameespace] namespace the namespace to bind
|
544
|
+
# @return [Namespace] The newly bound or pre-existing namespace.
|
508
545
|
def bind(namespace)
|
509
546
|
# Remove existing bindings for the same URI
|
510
547
|
executeSQL("DELETE FROM #{namespace_binds} WHERE prefix=?", namespace.prefix.to_s)
|
@@ -521,6 +558,8 @@ module RdfContext
|
|
521
558
|
end
|
522
559
|
|
523
560
|
# Namespace for prefix
|
561
|
+
# @param [String] prefix
|
562
|
+
# @return [Namespace]
|
524
563
|
def namespace(prefix)
|
525
564
|
@namespaceCache ||= {}
|
526
565
|
@namespaceUriCache ||= {}
|
@@ -535,6 +574,8 @@ module RdfContext
|
|
535
574
|
end
|
536
575
|
|
537
576
|
# Prefix for namespace
|
577
|
+
# @param [Namespace] namespcae
|
578
|
+
# @return [String]
|
538
579
|
def prefix(namespace)
|
539
580
|
uri = namespace.is_a?(Namespace) ? namespace.uri.to_s : namespace
|
540
581
|
|
@@ -550,6 +591,7 @@ module RdfContext
|
|
550
591
|
end
|
551
592
|
|
552
593
|
# Hash of prefix => Namespace bindings
|
594
|
+
# @return [Hash{String => Namespace}]
|
553
595
|
def nsbinding
|
554
596
|
unless @nsbinding.is_a?(Hash)
|
555
597
|
@nsbinding = {}
|
@@ -568,6 +610,7 @@ module RdfContext
|
|
568
610
|
end
|
569
611
|
|
570
612
|
# Hash of uri => Namespace bindings
|
613
|
+
# @return [Hash{URIRef => Namespace}]
|
571
614
|
def uri_binding
|
572
615
|
nsbinding
|
573
616
|
@uri_binding
|
@@ -3,6 +3,10 @@ module RdfContext
|
|
3
3
|
class AbstractStore
|
4
4
|
attr_reader :nsbinding, :uri_binding, :identifier
|
5
5
|
|
6
|
+
# Create a new AbstractStore Store, should be subclassed
|
7
|
+
# @param [Resource] identifier
|
8
|
+
# @param[Hash] configuration Specific to type of storage
|
9
|
+
# @return [AbstractStore]
|
6
10
|
def initialize(identifier = nil, configuration = {})
|
7
11
|
@nsbinding = {}
|
8
12
|
# Reverse namespace binding
|
@@ -11,17 +15,54 @@ module RdfContext
|
|
11
15
|
@identifier = identifier || BNode.new
|
12
16
|
end
|
13
17
|
|
18
|
+
# Is store Context Aware, capable of being used for named graphs?
|
19
|
+
# @return [false]
|
14
20
|
def context_aware?; false; end
|
21
|
+
|
22
|
+
# Is store Formulae Aware, capable of storing variables?
|
23
|
+
# @return [false]
|
15
24
|
def formula_aware?; false; end
|
25
|
+
|
26
|
+
# Is store Transaction Aware, capable of rollback?
|
27
|
+
# @return [false]
|
16
28
|
def transaction_aware?; false; end
|
17
29
|
|
18
30
|
# Interfaces that must be implemented
|
31
|
+
|
32
|
+
# A generator over all matching triples
|
33
|
+
# @param [Triple] triple
|
34
|
+
# @param [Graph] context (nil)
|
35
|
+
# @return [Array<Triplle>]
|
36
|
+
# @raise [StoreException] Not Implemented
|
37
|
+
# @yield [triple, context]
|
38
|
+
# @yieldparam [Triple] triple
|
39
|
+
# @yieldparam [Graph] context
|
19
40
|
def triples(triple, context = nil) # :yields: triple, context
|
20
41
|
raise StoreException, "not implemented"
|
21
42
|
end
|
43
|
+
|
44
|
+
# Add triple to store
|
45
|
+
# @param [Triple] triple
|
46
|
+
# @param [Graph] context (nil)
|
47
|
+
# @param [Boolean] quoted (false) A quoted triple, for Formulae
|
48
|
+
# @raise [StoreException] Not Implemented
|
49
|
+
# @return [Triple]
|
22
50
|
def add(triple, context = nil, quoted = false); raise StoreException, "not implemented"; end
|
51
|
+
|
52
|
+
# Remove a triple from the store
|
53
|
+
# @param [Triple] triple
|
54
|
+
# @param [Graph] context (nil)
|
55
|
+
# @raise [StoreException] Not Implemented
|
56
|
+
# @return [void]
|
23
57
|
def remove(triple, context = nil); raise StoreException, "not implemented"; end
|
24
58
|
|
59
|
+
# Check to see if this store contains the specified triple
|
60
|
+
# @param [Triple] triple
|
61
|
+
# @param [Graph] context (nil) ignored
|
62
|
+
# @raise [StoreException] Not Implemented
|
63
|
+
# @return [Boolean]
|
64
|
+
def contains?(triple, context = nil); raise StoreException, "not implemented"; end
|
65
|
+
|
25
66
|
# Default (sub-optimal) implemenations of interfaces
|
26
67
|
def inspect
|
27
68
|
"#{self.class}[identifier=#{identifier.inspect}]"
|
@@ -33,7 +74,11 @@ module RdfContext
|
|
33
74
|
def commit; end
|
34
75
|
def rollback; end
|
35
76
|
|
36
|
-
|
77
|
+
##
|
78
|
+
# Bind a namespace to the store.
|
79
|
+
#
|
80
|
+
# @param [Nameespace] namespace the namespace to bind
|
81
|
+
# @return [Namespace] The newly bound or pre-existing namespace.
|
37
82
|
def bind(namespace)
|
38
83
|
# Over-write an empty prefix
|
39
84
|
uri = namespace.uri.to_s
|
@@ -45,16 +90,22 @@ module RdfContext
|
|
45
90
|
end
|
46
91
|
|
47
92
|
# Namespace for prefix
|
93
|
+
# @param [String] prefix
|
94
|
+
# @return [Namespace]
|
48
95
|
def namespace(prefix)
|
49
96
|
@nsbinding[prefix.to_s]
|
50
97
|
end
|
51
98
|
|
52
99
|
# Prefix for namespace
|
100
|
+
# @param [Namespace] namespcae
|
101
|
+
# @return [String]
|
53
102
|
def prefix(namespace)
|
54
103
|
namespace.is_a?(Namespace) ? @uri_binding[namespace.uri.to_s].prefix : @uri_binding[namespace].prefix
|
55
104
|
end
|
56
105
|
|
57
106
|
# Get all BNodes with usage count used within graph
|
107
|
+
# @param [Graph] context (nil)
|
108
|
+
# @return [Array<BNode>]
|
58
109
|
def bnodes(context = nil)
|
59
110
|
bn = {}
|
60
111
|
triples(Triple.new(nil, nil, nil), context) do |t, ctx|
|
@@ -74,10 +125,31 @@ module RdfContext
|
|
74
125
|
bn
|
75
126
|
end
|
76
127
|
|
128
|
+
|
129
|
+
# Number of Triples in the graph
|
130
|
+
# @param [Graph] context (nil)
|
131
|
+
# @return [Integer]
|
77
132
|
def size(context = nil); triples(Triple.new(nil, nil, nil), context).size; end
|
133
|
+
|
134
|
+
# List of distinct subjects in graph
|
135
|
+
# @param [Graph] context (nil)
|
136
|
+
# @return [Array<Resource>]
|
78
137
|
def subjects(context = nil); triples(Triple.new(nil, nil, nil), context).map {|t| t.subject}.uniq; end
|
138
|
+
|
139
|
+
# List of distinct predicates in graph
|
140
|
+
# @param [Graph] context (nil)
|
141
|
+
# @return [Array<Resource>]
|
79
142
|
def predicates(context = nil); triples(Triple.new(nil, nil, nil), context).map {|t| t.predicate}.uniq; end
|
143
|
+
|
144
|
+
# List of distinct objects in graph
|
145
|
+
# @param [Graph] context (nil)
|
146
|
+
# @return [Array<Resource>]
|
80
147
|
def objects(context = nil); triples(Triple.new(nil, nil, nil), context).map {|t| t.object}.uniq; end
|
148
|
+
|
149
|
+
# Return an indexed element from the graph
|
150
|
+
# @param [Integer] item Index into the serialized store
|
151
|
+
# @param [Graph] context
|
152
|
+
# @return [Array<Triple>]
|
81
153
|
def item(item, context = nil) triples(Triple.new(nil, nil, nil), context)[item]; end
|
82
154
|
end
|
83
155
|
end
|