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.
Files changed (44) hide show
  1. data/.yardopts +10 -0
  2. data/{History.txt → History.rdoc} +8 -1
  3. data/Rakefile +9 -2
  4. data/VERSION +1 -1
  5. data/bin/rdf_context +5 -2
  6. data/lib/rdf_context/aggregate_graph.rb +31 -2
  7. data/lib/rdf_context/array_hacks.rb +3 -3
  8. data/lib/rdf_context/bnode.rb +3 -3
  9. data/lib/rdf_context/conjunctive_graph.rb +8 -8
  10. data/lib/rdf_context/duration.rb +17 -4
  11. data/lib/rdf_context/graph.rb +84 -46
  12. data/lib/rdf_context/literal.rb +36 -3
  13. data/lib/rdf_context/n3parser.rb +4 -4
  14. data/lib/rdf_context/namespace.rb +21 -8
  15. data/lib/rdf_context/parser.rb +31 -16
  16. data/lib/rdf_context/quoted_graph.rb +5 -4
  17. data/lib/rdf_context/rdfaparser.rb +176 -91
  18. data/lib/rdf_context/rdfxmlparser.rb +50 -13
  19. data/lib/rdf_context/serializer/abstract_serializer.rb +14 -4
  20. data/lib/rdf_context/serializer/nt_serializer.rb +5 -0
  21. data/lib/rdf_context/serializer/recursive_serializer.rb +4 -0
  22. data/lib/rdf_context/serializer/turtle_serializer.rb +28 -27
  23. data/lib/rdf_context/serializer/xml_serializer.rb +11 -9
  24. data/lib/rdf_context/store/abstract_sql_store.rb +47 -4
  25. data/lib/rdf_context/store/abstract_store.rb +73 -1
  26. data/lib/rdf_context/store/list_store.rb +25 -6
  27. data/lib/rdf_context/store/memory_store.rb +33 -1
  28. data/lib/rdf_context/store/sqlite3_store.rb +7 -4
  29. data/lib/rdf_context/term_utils.rb +6 -0
  30. data/lib/rdf_context/triple.rb +17 -6
  31. data/lib/rdf_context/uriref.rb +19 -3
  32. data/spec/html4-manifest.yml +176 -176
  33. data/spec/html5-manifest.yml +176 -176
  34. data/spec/rdfa_helper.rb +8 -2
  35. data/spec/rdfa_parser_spec.rb +1 -1
  36. data/spec/rdfcore/Manifest.yml +1561 -2626
  37. data/spec/swap_test/n3parser.yml +134 -279
  38. data/spec/swap_test/regression.yml +140 -305
  39. data/spec/turtle/manifest-bad.yml +155 -310
  40. data/spec/turtle/manifest.yml +155 -310
  41. data/spec/xhtml-manifest.yml +139 -587
  42. data/spec/xhtml11-manifest.yml +4405 -0
  43. metadata +21 -7
  44. data/.gitmodules +0 -3
data/.yardopts ADDED
@@ -0,0 +1,10 @@
1
+ --title "RDF::RDFa - XHTML+RDFa Support for RDF.rb"
2
+ --output-dir doc/yard
3
+ --protected
4
+ --no-private
5
+ --hide-void-return
6
+ --markup rdoc
7
+ --readme README.rdoc
8
+ -
9
+ History.rdoc
10
+ VERSION
@@ -1,3 +1,10 @@
1
+ === 0.5.7
2
+ * Add back support for RDFa 1.0 as well as RDFa 1.1. Parser checks @version to determine which
3
+ * Remove specs for html4 and html5 until sorted out.
4
+ * Don't allow _ as a prefix name.
5
+ * Don't emit non-URI predicate values
6
+ * Use sqlite3-ruby version 1.2.5, as 1.3.1 breaks multiple argument execs.
7
+
1
8
  === 0.5.6
2
9
  * Remove trailing ' in #encoding for treetop grammer, which caused problems installing rdoc in ruby 1.9.
3
10
  * Fixed corner case in RDFa parser where document doesn't exist, which was raising an error.
@@ -45,7 +52,7 @@
45
52
  === 0.5.0
46
53
  * Support for Ruby 1.9, 1.8.7 and 1.8.6.
47
54
  * Unicode escapes and URIRefs only work properly in Ruby 1.9
48
- * Replaced some (&:meth) spells with {|c| c.meth} for Ruby 1.8.6 compatibility
55
+ * Replaced some <code>(&:meth)</code> spells with <code>{|c| c.meth}</code> for Ruby 1.8.6 compatibility
49
56
  * Fully compliant N3 parser (n3-rdf level) with extnensive tests, including SWAP, CWM and Turtle test suites.
50
57
  * Supports paths, keywords, all semantic expressions.
51
58
  * No support yet for Formulae, variables, rules or automatic reification
data/Rakefile CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'rubygems'
2
+ require 'yard'
3
+
2
4
  begin
3
5
  gem 'jeweler'
4
6
  require 'jeweler'
@@ -28,6 +30,7 @@ begin
28
30
  gemspec.add_dependency('patron', '>= 0.4.6')
29
31
  gemspec.add_development_dependency('rspec')
30
32
  gemspec.add_development_dependency('activesupport', '>= 2.3.0')
33
+ gemspec.add_development_dependency('yard')
31
34
  gemspec.extra_rdoc_files = %w(README.rdoc History.txt)
32
35
  end
33
36
  Jeweler::GemcutterTasks.new
@@ -78,10 +81,14 @@ Rake::RDocTask.new("doc:rdoc") do |rdoc|
78
81
 
79
82
  rdoc.rdoc_dir = 'doc/rdoc'
80
83
  rdoc.title = "rdf_context #{version}"
81
- rdoc.rdoc_files.include('README*', "History.txt")
84
+ rdoc.rdoc_files.include('README*', "History.rdoc")
82
85
  rdoc.rdoc_files.include('lib/**/*.rb')
83
86
  end
84
87
 
88
+ YARD::Rake::YardocTask.new do |t|
89
+ t.files = %w(lib/**/*.rb README.rdoc History.rdoc) # optional
90
+ end
91
+
85
92
  desc "Generate RDF Core Manifest.yml"
86
93
  namespace :spec do
87
94
  task :prepare do
@@ -91,7 +98,7 @@ namespace :spec do
91
98
  require 'spec/rdf_helper'
92
99
  require 'fileutils'
93
100
 
94
- %w(xhtml html4 html5).each do |suite|
101
+ %w(xhtml xhtml11 html4 html5).each do |suite|
95
102
  yaml = manifest_file = File.join(File.dirname(__FILE__), "spec", "#{suite}-manifest.yml")
96
103
  FileUtils.rm_f(yaml)
97
104
  RdfaHelper::TestCase.to_yaml(suite, yaml)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.6
1
+ 0.5.7
data/bin/rdf_context CHANGED
@@ -50,7 +50,7 @@ def rdfa_tc(number, parse, store)
50
50
  head = "" +
51
51
  %(<?xml version="1.0" encoding="UTF-8"?>\n) +
52
52
  %(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">\n) +
53
- %(<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML+RDFa 1.1"\n)
53
+ %(<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML+RDFa #{$rdfa_version}"\n)
54
54
  tc = head + "#{namespaces}>\n#{body.gsub(/\$TCPATH/, tcpath)}\n</html>"
55
55
 
56
56
  puts "Input file: #{tc}" if $DEBUG || $verbose
@@ -62,6 +62,7 @@ raise "Mode must be one of 'parse'" unless mode == "parse"
62
62
 
63
63
  $verbose = false
64
64
  $format = "ttl"
65
+ $rdfa_version = "1.1"
65
66
  base_uri = "http://example.com"
66
67
  store = :list_store
67
68
  opts = GetoptLong.new(
@@ -71,7 +72,8 @@ opts = GetoptLong.new(
71
72
  ["--format", GetoptLong::REQUIRED_ARGUMENT],
72
73
  ["--store", GetoptLong::REQUIRED_ARGUMENT],
73
74
  ["--uri", GetoptLong::REQUIRED_ARGUMENT],
74
- ["--rdfa", GetoptLong::NO_ARGUMENT]
75
+ ["--rdfa", GetoptLong::NO_ARGUMENT],
76
+ ["--1_0", GetoptLong::NO_ARGUMENT]
75
77
  )
76
78
  opts.each do |opt, arg|
77
79
  case opt
@@ -81,6 +83,7 @@ opts.each do |opt, arg|
81
83
  when '--format' then $format = arg
82
84
  when '--uri' then base_uri = arg
83
85
  when '--rdfa' then $rdfa = true
86
+ when '--1_0' then $rdfa_version = "1.0"
84
87
  when '--store'
85
88
  case arg
86
89
  when /list/
@@ -5,48 +5,68 @@ module RdfContext
5
5
  #
6
6
  # Essentially a ConjunctiveGraph over an explicit subset of the entire store.
7
7
  class AggregateGraph < Graph
8
+ # List of constituent graphs
9
+ # @return [Array<Graph>]
8
10
  attr_reader :graphs
9
11
 
10
12
  # List of graphs to aggregate
13
+ # @param [Array<Graph>] graph List of constituent graphs
11
14
  def initialize(*graph)
12
15
  @graphs = graph
13
16
  end
14
17
 
18
+ # @raise [ReadOnlyGraphException]
15
19
  def destroy(configuration = nil); raise ReadOnlyGraphException; end
20
+ # @raise [ReadOnlyGraphException]
16
21
  def commit; raise ReadOnlyGraphException; end
22
+ # @raise [ReadOnlyGraphException]
17
23
  def rollback; raise ReadOnlyGraphException; end
24
+ # @raise [ReadOnlyGraphException]
18
25
  def add; raise ReadOnlyGraphException; end
26
+ # @raise [ReadOnlyGraphException]
19
27
  def remove; raise ReadOnlyGraphException; end
28
+ # @param [Namespace] namespace
29
+ # @raise [ReadOnlyGraphException]
20
30
  def bind(namespace); raise ReadOnlyGraphException; end
31
+ # @param [#read, #to_s] stream
32
+ # @param [URIRef, String] uri
33
+ # @raise [ReadOnlyGraphException]
21
34
  def parse(stream, uri, options = {}); raise ReadOnlyGraphException; end
35
+ # @raise [ReadOnlyGraphException]
22
36
  def n3; raise ReadOnlyGraphException; end
23
37
 
24
38
  # Open the graphs
39
+ # @return [void]
25
40
  def open(configuration = {})
26
41
  @graphs.each {|g| g.open(configuration)}
27
42
  end
28
43
 
29
44
  # Close the graphs
45
+ # @return [void]
30
46
  def close(configuration = {})
31
47
  @graphs.each {|g| g.close(configuration)}
32
48
  end
33
49
 
34
50
  # Number of Triples in the graph
51
+ # @return [Integer]
35
52
  def size
36
53
  @graphs.inject(0) {|memo, g| memo += g.size}
37
54
  end
38
55
 
39
56
  # List of distinct subjects in graph
57
+ # @return [Array<Resource>]
40
58
  def subjects
41
59
  @graphs.inject([]) {|memo, g| memo += g.subjects}
42
60
  end
43
61
 
44
62
  # List of distinct predicates in graph
63
+ # @return [Array<Resource>]
45
64
  def predicates
46
65
  @graphs.inject([]) {|memo, g| memo += g.predicates}
47
66
  end
48
67
 
49
68
  # List of distinct objects in graph
69
+ # @return [Array<Resource>]
50
70
  def objects
51
71
  @graphs.inject([]) {|memo, g| memo += g.objects}
52
72
  end
@@ -54,31 +74,40 @@ module RdfContext
54
74
  # Triples from graph, optionally matching subject, predicate, or object.
55
75
  # Delegates to Store#triples.
56
76
  #
57
- # @param [Triple, nil] triple:: Triple to match, may be a pattern triple or nil
58
- # @return [Array]:: List of matched triples
77
+ # @param [Triple] triple (Triple.new) Triple to match, may be a pattern triple or nil
78
+ # @yield [triple, context]
79
+ # @yieldparam [Triple] triple
80
+ # @yieldparam [Resource] context
81
+ # @return [Array<Triple>] List of matched triples
59
82
  def triples(triple = Triple.new(nil, nil, nil), &block) # :yields: triple, context
60
83
  @graphs.inject([]) {|memo, g| memo += g.triples(triple, &block)}
61
84
  end
62
85
 
63
86
  # Check to see if this graph contains the specified triple
87
+ # @param [Triple] triple Triple to match, may be a pattern triple or nil
64
88
  def contains?(triple)
65
89
  @graphs.any? {|g| g.contains?(triple) }
66
90
  end
67
91
 
68
92
  # Get all BNodes with usage count used within graph
93
+ # @return [Array<BNode>]
69
94
  def bnodes
70
95
  @graphs.inject([]) {|memo, g| memo += g.bnodes}
71
96
  end
72
97
 
73
98
  # Only compares to another AggregateGraph. Compares each sub-graph
99
+ # @param [AggregateGraph, Object] other Graph to compare with
100
+ # @return [Boolean]
74
101
  def eql?(other)
75
102
  other.is_a?(AggregateGraph) ? super : false
76
103
  end
77
104
 
105
+ # @return [Hash{String => Namespace}]
78
106
  def nsbinding
79
107
  @graphs.inject({}) {|memo, g| memo.merge(g.nsbinding)}
80
108
  end
81
109
 
110
+ # @return [Hash{URIRef => Namespace}]
82
111
  def uri_binding
83
112
  @graphs.inject({}) {|memo, g| memo.merge(g.uri_binding)}
84
113
  end
@@ -15,9 +15,9 @@ class Array
15
15
  end
16
16
 
17
17
  # Converts the array to a comma-separated sentence where the last element is joined by the connector word. Options:
18
- # * <tt>:words_connector</tt> - The sign or word used to join the elements in arrays with two or more elements (default: ", ")
19
- # * <tt>:two_words_connector</tt> - The sign or word used to join the elements in arrays with two elements (default: " and ")
20
- # * <tt>:last_word_connector</tt> - The sign or word used to join the last element in arrays with three or more elements (default: ", and ")
18
+ # @option [String] :words_connector (", ") The sign or word used to join the elements in arrays with two or more elements
19
+ # @option [String] :two_words_connector (" and ") The sign or word used to join the elements in arrays with two elements
20
+ # @option [String] :last_word_connector (", ") The sign or word used to join the elements in arrays with two or more elements
21
21
  def to_sentence(options = {})
22
22
  default_words_connector = ", "
23
23
  default_two_words_connector = " and "
@@ -13,8 +13,8 @@ module RdfContext
13
13
  # to lookup previoiusly defined BNodes using the same identifier. Names are *not* preserved
14
14
  # within the underlying storage model.
15
15
  #
16
- # @param [String] identifier:: Legal NCName or nil for a named BNode
17
- # @param [Hash] context:: Context used to store named BNodes
16
+ # @param [String] identifier (nil) Legal NCName or nil for a named BNode
17
+ # @param [Hash] context ({}) Context used to store named BNodes
18
18
  def initialize(identifier = nil, context = {})
19
19
  if identifier.nil?
20
20
  @identifier = generate_bn_identifier
@@ -38,7 +38,7 @@ module RdfContext
38
38
  # ==== Example
39
39
  # b = BNode.new; b.to_n3 # => returns a string of the BNode in n3 form
40
40
  #
41
- # @return [String]:: The BNode in n3.
41
+ # @return [String] The BNode in n3.
42
42
  #
43
43
  # @author Tom Morris
44
44
  def to_n3
@@ -36,8 +36,8 @@ module RdfContext
36
36
  # Triples across all contexts in store, optionally matching subject, predicate, or object.
37
37
  # Delegates to Store#triples.
38
38
  #
39
- # @param [Triple, nil] triple:: Triple to match, may be a pattern triple or nil
40
- # @return [Array]:: List of matched triples
39
+ # @param [Triple] triple (nil) Triple to match, may be a pattern triple or nil
40
+ # @return [Array] List of matched triples
41
41
  def triples(triple = Triple.new(nil, nil, nil), &block) # :yields: triple, context
42
42
  @store.triples(triple, nil, &block) || []
43
43
  end
@@ -46,13 +46,13 @@ module RdfContext
46
46
  #
47
47
  # Create a new context (Graph) and parse into that.
48
48
  #
49
- # @param [IO, String] stream:: the RDF IO stream, string, Nokogiri::HTML::Document or Nokogiri::XML::Document
50
- # @param [String] uri:: the URI of the document
49
+ # @param [IO, String] stream the RDF IO stream, string, Nokogiri::HTML::Document or Nokogiri::XML::Document
50
+ # @param [URIRef, String] uri the URI of the document
51
51
  # @param [Hash] options:: Options from
52
- # <em>options[:debug]</em>:: Array to place debug messages
53
- # <em>options[:type]</em>:: One of _rdfxml_, _html_, or _n3_
54
- # <em>options[:strict]</em>:: Raise Error if true, continue with lax parsing, otherwise
55
- # @return [Graph]:: Returns the graph containing parsed triples
52
+ # @option options [Array] :debug (nil) Array to place debug messages
53
+ # @option options [:rdfxml, :html, :n3] :type (nil)
54
+ # @option options [Boolean] :strict (false) Raise Error if true, continue with lax parsing, otherwise
55
+ # @return [Graph] Returns the graph containing parsed triples
56
56
  def parse(stream, uri, options = {}, &block) # :yields: triple
57
57
  graph = Graph.new(:identifier => uri, :store => self.store)
58
58
  Parser.parse(stream, uri, options.merge(:graph => graph), &block)
@@ -7,6 +7,8 @@ module RdfContext
7
7
  # * Given a time, extract second
8
8
  # * Given a Flaat, use value direcly
9
9
  # * Given a String, parse as xsd:duration
10
+ # @param [Integer, Time, Float, String] value (#to_i)
11
+ # @return [Duration]
10
12
  def initialize(value)
11
13
  case value
12
14
  when Hash
@@ -28,11 +30,15 @@ module RdfContext
28
30
  self.normalize
29
31
  end
30
32
 
33
+
34
+ # Reverse convert from XSD version of duration
35
+ # XSD allows -P1111Y22M33DT44H55M66.666S with any combination in regular order
36
+ # We assume 1M == 30D, but are out of spec in this regard
37
+ # We only output up to hours
38
+ #
39
+ # @param [String] value XSD formatted duration
40
+ # @return [Duration]
31
41
  def self.parse(value)
32
- # Reverse convert from XSD version of duration
33
- # XSD allows -P1111Y22M33DT44H55M66.666S with any combination in regular order
34
- # We assume 1M == 30D, but are out of spec in this regard
35
- # We only output up to hours
36
42
  if value.to_s.match(/^(-?)P(\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?([\d\.]+S)?$/)
37
43
  hash = {}
38
44
  hash[:ne] = $1 == "-" ? -1 : 1
@@ -48,11 +54,16 @@ module RdfContext
48
54
  self.new(value)
49
55
  end
50
56
 
57
+ # @return [Float]
51
58
  def to_f
52
59
  (((((@yr.to_i * 12 + @mo.to_i) * 30 + @da.to_i) * 24 + @hr.to_i) * 60 + @mi.to_i) * 60 + @se.to_f) * (@ne || 1)
53
60
  end
54
61
 
62
+ # @return [Integer]
55
63
  def to_i; Integer(self.to_f); end
64
+
65
+ # @param [Duration, String, Numeric] something (false)
66
+ # @return [Boolean]
56
67
  def eql?(something)
57
68
  case something
58
69
  when Duration
@@ -67,6 +78,8 @@ module RdfContext
67
78
  end
68
79
  alias_method :==, :eql?
69
80
 
81
+ # @param [Symbol] format Output format, :xml outputs in xmlschema mode, otherwise in Human form
82
+ # @return [String]
70
83
  def to_s(format = nil)
71
84
  usec = (@se * 1000).to_i % 1000
72
85
  sec_str = usec > 0 ? "%2.3f" % @se : @se.to_i.to_s
@@ -31,10 +31,9 @@ module RdfContext
31
31
  # by name. If none is given, the graph is assigned a BNode for it's identifier.
32
32
  # For more on named graphs, see: http://en.wikipedia.org/wiki/RDFLib
33
33
  #
34
- # @param [Hash] options:: Options
35
- # <em>options[:store]</em>:: storage, defaults to a new ListStore instance. May be symbol :list_store or :memory_store
36
- # <em>options[:identifier]</em>:: Identifier for this graph, BNode or URIRef
37
- # <em>options[:allow_n3]</em>:: Allow N3-specific triples: Literals as subject, BNodes as predicate
34
+ # @option options [AbstractStore, Symbol] :store defaults to a new ListStore instance. May be symbol :list_store or :memory_store
35
+ # @option options[Resource] :identifier Identifier for this graph, BNode or URIRef
36
+ # @option options[Boolean] :allow_n3 Allow N3-specific triples: Literals as subject, BNodes as predicate
38
37
  def initialize(options = {})
39
38
  # Instantiate triple store
40
39
  @store = case options[:store]
@@ -54,14 +53,17 @@ module RdfContext
54
53
  end
55
54
 
56
55
  # Hash of graph, based on graph type and identifier
56
+ # @return [String]
57
57
  def hash
58
58
  [self.class.to_s, self.identifier].hash
59
59
  end
60
60
 
61
+ # @return [Boolean]
61
62
  def context_aware?; @store.context_aware?; end
62
63
 
63
64
  # Destroy the store identified by _configuration_ if supported
64
65
  # If configuration is nil, remove the graph context
66
+ # @return [void]
65
67
  def destroy(configuration = nil)
66
68
  if configuration
67
69
  @store.destroy(configuration)
@@ -73,15 +75,18 @@ module RdfContext
73
75
  end
74
76
 
75
77
  # Commit changes to graph
78
+ # @return [void]
76
79
  def commit; @store.commit; end
77
80
 
78
81
  # Rollback active transactions
82
+ # @return [void]
79
83
  def rollback; @store.rollback; end
80
84
 
81
85
  # Open the graph store
82
86
  #
83
87
  # Might be necessary for stores that require opening a connection to a
84
88
  # database or acquiring some resource.
89
+ # @return [void]
85
90
  def open(configuration = {})
86
91
  @store.open(configuration)
87
92
  end
@@ -90,20 +95,21 @@ module RdfContext
90
95
  #
91
96
  # Might be necessary for stores that require closing a connection to a
92
97
  # database or releasing some resource.
98
+ # @param [Boolean] commit_pending_transaction (false)
99
+ # @return [void]
93
100
  def close(commit_pending_transaction=false)
94
101
  @store.close(commit_pending_transaction)
95
102
  end
96
103
 
97
104
  # Serialize graph using specified serializer class.
98
105
  #
99
- # @param [Hash] options:: Options
100
- # <em>options[:format]</em>:: serializer, defaults to a new NTSerializer instance. Otherwise may be a symbol from :nt, :turtle, :xml
101
- # <em>options[:io]</em>:: IO (or StringIO) object, otherwise serializes to a string
102
- # <em>options[:base]</em>:: Base URI for output
106
+ # @option options [#to_sym] :format serializer, defaults to a new NTSerializer instance. Otherwise may be a symbol from :nt, :turtle, :xml
107
+ # @option options [#read, #to_s] :io IO (or StringIO) object, otherwise serializes to a string
108
+ # @option options [URIRef] :base serializer, defaults to a new NTSerializer instance. Otherwise may be a symbol from :nt, :turtle, :xml
103
109
  #
104
110
  # Other options are parser specific.
105
111
  #
106
- # @returns [IO, String]:: Passed IO/StringIO object or a string
112
+ # @return [IO, String]:: Passed IO/StringIO object or a string
107
113
  def serialize(options)
108
114
  serializer = case options[:format].to_sym
109
115
  when AbstractSerializer then options[:serializer]
@@ -122,10 +128,10 @@ module RdfContext
122
128
  ##
123
129
  # Exports the graph to RDF in N-Triples form.
124
130
  #
125
- # ==== Example
131
+ # @example
126
132
  # g = Graph.new; g.add_triple(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new); g.to_ntriples # => returns a string of the graph in N-Triples form
127
133
  #
128
- # @return [String]:: The graph in N-Triples.
134
+ # @return [String] The serialized graph in N-Triples.
129
135
  #
130
136
  # @author Tom Morris
131
137
  def to_ntriples
@@ -133,12 +139,13 @@ module RdfContext
133
139
  end
134
140
 
135
141
  # Output graph using to_ntriples
142
+ # @return [String] The serialized graph in N-Triples.
136
143
  def to_s; self.to_ntriples; end
137
144
 
138
145
  ##
139
146
  # Exports the graph to RDF in RDF/XML form.
140
147
  #
141
- # @return [String]:: The RDF/XML graph
148
+ # @return [String] The serialized RDF/XML graph
142
149
  def to_rdfxml
143
150
  serialize(:format => :rdfxml)
144
151
  end
@@ -146,24 +153,26 @@ module RdfContext
146
153
  ##
147
154
  # Bind a namespace to the graph.
148
155
  #
149
- # ==== Example
156
+ # @example
150
157
  # g = Graph.new; g.bind(Namespace.new("http://xmlns.com/foaf/0.1/", "foaf")) # => binds the Foaf namespace to g
151
158
  #
152
- # @param [String] namespace:: the namespace to bind
153
- # @return [Namespace]:: The newly bound or pre-existing namespace.
159
+ # @param [Nameespace] namespace the namespace to bind
160
+ # @return [Namespace] The newly bound or pre-existing namespace.
154
161
  def bind(namespace)
155
162
  raise GraphException, "Can't bind #{namespace.inspect} as namespace" unless namespace.is_a?(Namespace)
156
163
  @store.bind(namespace)
157
164
  end
158
165
 
159
- # Hash of prefix => Namespace bindings
166
+ # @return [Hash{String => Namespace}]
160
167
  def nsbinding; @store.nsbinding; end
161
168
 
162
- # Hash of uri => Namespace bindings
169
+ # @return [Hash{URIRef => Namespace}]
163
170
  def uri_binding; @store.uri_binding; end
164
171
 
165
172
  # QName for a URI
166
173
  # Try bound namespaces, and if not found, try well-known namespaces
174
+ # @param [URIRef] uri
175
+ # @return [String]
167
176
  def qname(uri)
168
177
  uri.to_qname(self.uri_binding) || begin
169
178
  qn = uri.to_qname(WELLKNOWN_NAMESPACES)
@@ -173,36 +182,45 @@ module RdfContext
173
182
  end
174
183
 
175
184
  # Namespace for prefix
185
+ # @param [String] prefix
186
+ # @return [Namespace]
176
187
  def namespace(prefix); @store.namespace(prefix); end
177
188
 
178
189
  # Prefix for namespace
190
+ # @param [Namespace] namespcae
191
+ # @return [String]
179
192
  def prefix(namespace); @store.prefix(namespace); end
180
193
 
181
194
  # Number of Triples in the graph
195
+ # @return [Integer]
182
196
  def size; @store.size(self); end
183
197
 
184
198
  # List of distinct subjects in graph
199
+ # @return [Array<Resource>]
185
200
  def subjects; @store.subjects(self); end
186
201
 
187
202
  # List of distinct predicates in graph
203
+ # @return [Array<Resource>]
188
204
  def predicates; @store.predicates(self); end
189
205
 
190
206
  # List of distinct objects in graph
207
+ # @return [Array<Resource>]
191
208
  def objects; @store.objects(self); end
192
209
 
193
210
  # Indexed statement in serialized graph triples. Equivalent to graph.triples[item]
211
+ # @return [Triple]
194
212
  def [] (item); @store.item(item, self); end
195
213
 
196
214
  # Adds a triple to a graph directly from the intended subject, predicate, and object.
197
215
  #
198
- # ==== Example
216
+ # @example
199
217
  # g = Graph.new; g.add_triple(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new) # => results in the triple being added to g; returns an array of g's triples
200
218
  #
201
- # @param [URIRef, BNode] subject:: the subject of the triple
202
- # @param [URIRef] predicate:: the predicate of the triple
203
- # @param [URIRef, BNode, Literal] object:: the object of the triple
204
- # @return [Graph]:: Returns the graph
205
- # @raise [Error]:: Checks parameter types and raises if they are incorrect.
219
+ # @param [URIRef, BNode] subject the subject of the triple
220
+ # @param [URIRef] predicate the predicate of the triple
221
+ # @param [URIRef, BNode, Literal] object the object of the triple
222
+ # @return [Graph] Returns the graph
223
+ # @raise [Error] Checks parameter types and raises if they are incorrect.
206
224
  def add_triple(subject, predicate, object)
207
225
  self.add(Triple.new(subject, predicate, object))
208
226
  self
@@ -211,13 +229,13 @@ module RdfContext
211
229
  ##
212
230
  # Adds an more extant triples to a graph. Delegates to Store.
213
231
  #
214
- # ==== Example
232
+ # @example
215
233
  # g = Graph.new;
216
234
  # t = Triple.new(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new);
217
235
  # g << t
218
236
  #
219
- # @param [Triple] t:: the triple to be added to the graph
220
- # @return [Graph]:: Returns the graph
237
+ # @param [Triple] triple the triple to be added to the graph
238
+ # @return [Graph] Returns the graph
221
239
  def << (triple)
222
240
  triple.validate_rdf unless @allow_n3 # Only add triples if n3-mode is set
223
241
  @store.add(triple, self)
@@ -227,15 +245,15 @@ module RdfContext
227
245
  ##
228
246
  # Adds one or more extant triples to a graph. Delegates to Store.
229
247
  #
230
- # ==== Example
248
+ # @example
231
249
  # g = Graph.new;
232
250
  # t1 = Triple.new(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new);
233
251
  # t2 = Triple.new(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new);
234
252
  # g.add(t1, t2, ...)
235
253
  #
236
- # @param [Triple] triples:: one or more triples. Last element may be a hash for options
237
- # <em>options[:context]</em>:: Graph context in which to deposit triples, defaults to default_context or self
238
- # @return [Graph]:: Returns the graph
254
+ # @param [Array<Triple>] triples one or more triples. Last element may be a hash for options
255
+ # @option [Resource] :context Graph context in which to deposit triples, defaults to default_context or self
256
+ # @return [Graph] Returns the graph
239
257
  def add(*triples)
240
258
  options = triples.last.is_a?(Hash) ? triples.pop : {}
241
259
  ctx = options[:context] || @default_context || self
@@ -249,11 +267,11 @@ module RdfContext
249
267
 
250
268
  ##
251
269
  # Adds a list of resources as an RDF list by creating bnodes and first/rest triples
252
- # @param [URIRef, BNode] subject:: the subject of the triple
253
- # @param [URIRef] predicate:: the predicate of the triple
254
- # @param [Array] objects:: List of objects to serialize
255
- # @return [Graph]:: Returns the graph
256
- # @raise [Error]:: Checks parameter types and raises if they are incorrect.
270
+ # @param [URIRef, BNode] subject the subject of the triple
271
+ # @param [URIRef] predicate the predicate of the triple
272
+ # @param [Array] objects List of objects to serialize
273
+ # @return [Graph] Returns the graph
274
+ # @raise [Error] Checks parameter types and raises if they are incorrect.
257
275
  def add_seq(subject, predicate, objects)
258
276
  if objects.empty?
259
277
  add_triple(subject, predicate, RDF_NS.nil)
@@ -282,19 +300,23 @@ module RdfContext
282
300
 
283
301
  # Remove a triple from the graph. Delegates to store.
284
302
  # Nil matches all triples and thus empties the graph
303
+ # @param [Triple] triple
304
+ # @return [void]
285
305
  def remove(triple); @store.remove(triple, self); end
286
306
 
287
307
  # Triples from graph, optionally matching subject, predicate, or object.
288
308
  # Delegates to Store#triples.
289
309
  #
290
- # @param [Triple, nil] triple:: Triple to match, may be a pattern triple or nil
291
- # @return [Array]:: List of matched triples
310
+ # @param [Triple] triple (nil) Triple to match, may be a pattern triple or nil
311
+ # @return [Array<Triple>] List of matched triples
292
312
  def triples(triple = Triple.new(nil, nil, nil), &block) # :yields: triple, context
293
313
  @store.triples(triple, self, &block) || []
294
314
  end
295
315
  alias_method :find, :triples
296
316
 
297
317
  # Returns ordered rdf:_n objects or rdf:first, rdf:rest for a given subject
318
+ # @param [Resource] subject
319
+ # @return [Array<Resource>]
298
320
  def seq(subject)
299
321
  props = properties(subject)
300
322
  rdf_type = (props[RDF_TYPE.to_s] || []).map {|t| t.to_s}
@@ -328,13 +350,17 @@ module RdfContext
328
350
  #
329
351
  # Properties arranged as a hash with the predicate Term as index to an array of resources or literals
330
352
  #
331
- # Example:
353
+ # @example
332
354
  # graph.parse(':foo a :bar; rdfs:label "An example" .', "http://example.com/")
333
355
  # graph.resources("http://example.com/subject") =>
334
356
  # {
335
357
  # "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" => [<http://example.com/#bar>],
336
358
  # "http://example.com/#label" => ["An example"]
337
359
  # }
360
+ #
361
+ # @param [Resource] subject
362
+ # @param [Boolean] recalc Refresh cache of property values
363
+ # @return [Hash{String => Resource}]
338
364
  def properties(subject, recalc = false)
339
365
  @properties ||= {}
340
366
  @properties.delete(subject.to_s) if recalc
@@ -352,6 +378,8 @@ module RdfContext
352
378
 
353
379
 
354
380
  # Synchronize properties to graph
381
+ # @param [Resource] subject
382
+ # @return [void]
355
383
  def sync_properties(subject)
356
384
  props = properties(subject)
357
385
 
@@ -369,14 +397,15 @@ module RdfContext
369
397
  end
370
398
 
371
399
  # Return an n3 identifier for the Graph
400
+ # @return [String]
372
401
  def n3
373
402
  "[#{self.identifier.to_n3}]"
374
403
  end
375
404
 
376
405
  # Detect the presence of a BNode in the graph, either as a subject or an object
377
406
  #
378
- # @param [BNode] bn:: BNode to find
379
- #
407
+ # @param [BNode] bn BNode to find
408
+ # @return [Boolean]
380
409
  def has_bnode_identifier?(bn)
381
410
  self.triples do |triple, context|
382
411
  return true if triple.subject.eql?(bn) || triple.object.eql?(bn)
@@ -385,11 +414,14 @@ module RdfContext
385
414
  end
386
415
 
387
416
  # Check to see if this graph contains the specified triple
417
+ # @param [Triple] triple
418
+ # @return [Boolean]
388
419
  def contains?(triple)
389
420
  @store.contains?(triple, self)
390
421
  end
391
422
 
392
423
  # Get all BNodes with usage count used within graph
424
+ # @return [Array<BNode>]
393
425
  def bnodes
394
426
  @store.bnodes(self)
395
427
  end
@@ -397,16 +429,21 @@ module RdfContext
397
429
  # Get list of subjects having rdf:type == object
398
430
  #
399
431
  # @param [Resource, Regexp, String] object:: Type resource
432
+ # @return [Array<Triple>]
400
433
  def get_by_type(object)
401
434
  triples(Triple.new(nil, RDF_TYPE, object)).map {|t, ctx| t.subject}
402
435
  end
403
436
 
404
437
  # Get type(s) of subject, returns a list of symbols
438
+ # @param [Resource] subject
439
+ # @return [URIRef]
405
440
  def type_of(subject)
406
441
  triples(Triple.new(subject, RDF_TYPE, nil)).map {|t, ctx| t.object}
407
442
  end
408
443
 
409
444
  # Merge a graph into this graph
445
+ # @param [Graph] graph
446
+ # @return [void]
410
447
  def merge!(graph)
411
448
  raise GraphException.new("merge without a graph") unless graph.is_a?(Graph)
412
449
 
@@ -432,6 +469,8 @@ module RdfContext
432
469
  # after sorting each graph.
433
470
  #
434
471
  # We just follow Python RDFlib's lead and do a simple comparison
472
+ # @param [Graph] graph
473
+ # @return [Boolean]
435
474
  def eql?(other)
436
475
  #puts "eql? size #{self.size} vs #{other.size}" if $DEBUG
437
476
  return false if !other.is_a?(Graph) || self.size != other.size
@@ -486,12 +525,11 @@ module RdfContext
486
525
  #
487
526
  # @param [IO, String] stream:: the RDF IO stream, string, Nokogiri::HTML::Document or Nokogiri::XML::Document
488
527
  # @param [String] uri:: the URI of the document
489
- # @param [Hash] options:: Options from
490
- # <em>options[:debug]</em>:: Array to place debug messages
491
- # <em>options[:type]</em>:: One of _rdfxml_, _html_, or _n3_
492
- # <em>options[:strict]</em>:: Raise Error if true, continue with lax parsing, otherwise
493
- # <em>options[:allow_n3]</em>:: Allow N3-specific triples: Literals as subject, BNodes as predicate
494
- # @return [Graph]:: Returns the graph containing parsed triples
528
+ # @option options [Array] :debug (nil) Array to place debug messages
529
+ # @option options [:rdfxml, :html, :n3] :type (nil)
530
+ # @option options [Boolean] :strict (false) Raise Error if true, continue with lax parsing, otherwise
531
+ # @option options [Boolean] :allow_n3 (false) Allow N3-specific triples: Literals as subject, BNodes as predicate
532
+ # @return [Graph] Returns the graph containing parsed triples
495
533
  def parse(stream, uri = nil, options = {}, &block) # :yields: triple
496
534
  @allow_n3 ||= options[:allow_n3]
497
535
  Parser.parse(stream, uri, options.merge(:graph => self), &block)
OSZAR »