rdf 0.0.5 → 0.0.6

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 CHANGED
@@ -42,7 +42,7 @@ Examples
42
42
 
43
43
  ### Reading N-Triples data
44
44
 
45
- RDF::Reader::NTriples.open("spec/data/test.nt") do |reader|
45
+ RDF::NTriples::Reader.open("spec/data/test.nt") do |reader|
46
46
  reader.each_statement do |statement|
47
47
  puts statement.inspect
48
48
  end
@@ -55,47 +55,51 @@ Documentation
55
55
 
56
56
  ### RDF Objects
57
57
 
58
- * [RDF::Graph](http://rdf.rubyforge.org/RDF/Graph.html)
59
- * [RDF::Literal](http://rdf.rubyforge.org/RDF/Literal.html)
60
- * [RDF::Node](http://rdf.rubyforge.org/RDF/Node.html)
61
- * [RDF::Resource](http://rdf.rubyforge.org/RDF/Resource.html)
62
- * [RDF::Statement](http://rdf.rubyforge.org/RDF/Statement.html)
63
- * [RDF::URI](http://rdf.rubyforge.org/RDF/URI.html)
64
- * [RDF::Value](http://rdf.rubyforge.org/RDF/Value.html)
58
+ * {RDF::Graph}
59
+ * {RDF::Literal}
60
+ * {RDF::Node}
61
+ * {RDF::Resource}
62
+ * {RDF::Statement}
63
+ * {RDF::URI}
64
+ * {RDF::Value}
65
65
 
66
66
  ### RDF Serialization
67
67
 
68
- * [RDF::Reader](http://rdf.rubyforge.org/RDF/Reader.html)
69
- * [RDF::Writer](http://rdf.rubyforge.org/RDF/Writer.html)
68
+ * {RDF::Format}
69
+ * {RDF::Reader}
70
+ * {RDF::Writer}
70
71
 
71
- ### RDF Vocabularies
72
+ ### RDF Serialization Formats
72
73
 
73
- * [RDF::CC](http://rdf.rubyforge.org/RDF/CC.html) - Creative Commons (CC)
74
- * [RDF::DC](http://rdf.rubyforge.org/RDF/DC.html) - Dublin Core (DC)
75
- * [RDF::DOAP](http://rdf.rubyforge.org/RDF/DOAP.html) - Description of a Project (DOAP)
76
- * [RDF::EXIF](http://rdf.rubyforge.org/RDF/EXIF.html) - Exchangeable Image File Format (EXIF)
77
- * [RDF::FOAF](http://rdf.rubyforge.org/RDF/FOAF.html) - Friend of a Friend (FOAF)
78
- * [RDF::HTTP](http://rdf.rubyforge.org/RDF/HTTP.html) - Hypertext Transfer Protocol (HTTP)
79
- * [RDF::OWL](http://rdf.rubyforge.org/RDF/OWL.html) - Web Ontology Language (OWL)
80
- * [RDF::RDFS](http://rdf.rubyforge.org/RDF/RDFS.html) - RDF Schema (RDFS)
81
- * [RDF::RSS](http://rdf.rubyforge.org/RDF/RSS.html) - RDF Site Summary (RSS)
82
- * [RDF::SIOC](http://rdf.rubyforge.org/RDF/SIOC.html) - Semantically-Interlinked Online Communities (SIOC)
83
- * [RDF::SKOS](http://rdf.rubyforge.org/RDF/SKOS.html) - Simple Knowledge Organization System (SKOS)
84
- * [RDF::WOT](http://rdf.rubyforge.org/RDF/WOT.html) - Web of Trust (WOT)
85
- * [RDF::XHTML](http://rdf.rubyforge.org/RDF/XHTML.html) - Extensible HyperText Markup Language (XHTML)
86
- * [RDF::XSD](http://rdf.rubyforge.org/RDF/XSD.html) - XML Schema (XSD)
74
+ * {RDF::NTriples}
87
75
 
88
- Download
89
- --------
76
+ ### RDF Storage
90
77
 
91
- To get a local working copy of the development repository, do:
78
+ * {RDF::Repository}
92
79
 
93
- % git clone git://github.com/bendiken/rdf.git
80
+ ### RDF Querying
94
81
 
95
- Alternatively, you can download the latest development version as a tarball
96
- as follows:
82
+ * {RDF::Query}
83
+ * {RDF::Query::Pattern}
84
+ * {RDF::Query::Solution}
85
+ * {RDF::Query::Variable}
97
86
 
98
- % wget http://github.com/bendiken/rdf/tarball/master
87
+ ### RDF Vocabularies
88
+
89
+ * {RDF::CC} - Creative Commons (CC)
90
+ * {RDF::DC} - Dublin Core (DC)
91
+ * {RDF::DOAP} - Description of a Project (DOAP)
92
+ * {RDF::EXIF} - Exchangeable Image File Format (EXIF)
93
+ * {RDF::FOAF} - Friend of a Friend (FOAF)
94
+ * {RDF::HTTP} - Hypertext Transfer Protocol (HTTP)
95
+ * {RDF::OWL} - Web Ontology Language (OWL)
96
+ * {RDF::RDFS} - RDF Schema (RDFS)
97
+ * {RDF::RSS} - RDF Site Summary (RSS)
98
+ * {RDF::SIOC} - Semantically-Interlinked Online Communities (SIOC)
99
+ * {RDF::SKOS} - Simple Knowledge Organization System (SKOS)
100
+ * {RDF::WOT} - Web of Trust (WOT)
101
+ * {RDF::XHTML} - Extensible HyperText Markup Language (XHTML)
102
+ * {RDF::XSD} - XML Schema (XSD)
99
103
 
100
104
  Dependencies
101
105
  ------------
@@ -110,6 +114,18 @@ official release from Gemcutter, do:
110
114
 
111
115
  % [sudo] gem install rdf
112
116
 
117
+ Download
118
+ --------
119
+
120
+ To get a local working copy of the development repository, do:
121
+
122
+ % git clone git://github.com/bendiken/rdf.git
123
+
124
+ Alternatively, you can download the latest development version as a tarball
125
+ as follows:
126
+
127
+ % wget http://github.com/bendiken/rdf/tarball/master
128
+
113
129
  Resources
114
130
  ---------
115
131
 
@@ -122,6 +138,7 @@ Resources
122
138
  See also
123
139
  --------
124
140
 
141
+ * [RDFS.rb](http://rdfs.rubyforge.org/)
125
142
  * [RDFize](http://rdfize.rubyforge.org/)
126
143
  * [RDFbus](http://rdfbus.rubyforge.org/)
127
144
  * [RDFcache](http://rdfcache.rubyforge.org/)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
data/lib/rdf.rb CHANGED
@@ -11,12 +11,19 @@ module RDF
11
11
  autoload :Value, 'rdf/value'
12
12
 
13
13
  # RDF serialization
14
+ autoload :Format, 'rdf/format'
14
15
  autoload :Reader, 'rdf/reader'
15
16
  autoload :Writer, 'rdf/writer'
16
17
 
18
+ # RDF serialization formats
19
+ autoload :NTriples, 'rdf/ntriples'
20
+
17
21
  # RDF storage
18
22
  autoload :Repository, 'rdf/repository'
19
23
 
24
+ # RDF querying
25
+ autoload :Query, 'rdf/query'
26
+
20
27
  # RDF vocabularies
21
28
  autoload :Vocabulary, 'rdf/vocabulary'
22
29
  autoload :CC, 'rdf/vocabulary/cc'
data/lib/rdf/cli.rb CHANGED
@@ -57,7 +57,7 @@ module RDF
57
57
  # @return [nil]
58
58
  def self.each_statement(*files, &block)
59
59
  files.each do |file|
60
- RDF::Reader::NTriples.open(file) do |reader|
60
+ RDF::NTriples::Reader.open(file) do |reader|
61
61
  reader.each_statement(&block)
62
62
  end
63
63
  end
data/lib/rdf/format.rb ADDED
@@ -0,0 +1,95 @@
1
+ module RDF
2
+ ##
3
+ # An RDF serialization format.
4
+ class Format
5
+ include Enumerable
6
+
7
+ ##
8
+ # Enumerates known RDF format classes.
9
+ #
10
+ # @yield [klass]
11
+ # @yieldparam [Class]
12
+ def self.each(&block)
13
+ !block_given? ? @@subclasses : @@subclasses.each { |klass| yield klass } # FIXME: Enumerator
14
+ end
15
+
16
+ ##
17
+ # Returns the list of known MIME content types.
18
+ #
19
+ # @return [Hash{String => Array<Class>}]
20
+ def self.content_types
21
+ @@content_types
22
+ end
23
+
24
+ ##
25
+ # Returns the list of known file extensions.
26
+ #
27
+ # @return [Hash{Symbol => String}]
28
+ def self.file_extensions
29
+ @@file_extensions
30
+ end
31
+
32
+ ##
33
+ # @param [Symbol] format
34
+ # @return [Class]
35
+ def self.for(format)
36
+ klass = case format.to_s.downcase.to_sym
37
+ when :ntriples then RDF::NTriples::Format
38
+ else nil # FIXME
39
+ end
40
+ end
41
+
42
+ ##
43
+ # @yield [format]
44
+ # @yieldparam [Format]
45
+ def initialize(options = {}, &block)
46
+ @options = options
47
+
48
+ if block_given?
49
+ case block.arity
50
+ when 1 then block.call(self)
51
+ else instance_eval(&block)
52
+ end
53
+ end
54
+ end
55
+
56
+ protected
57
+
58
+ @@subclasses = [] # @private
59
+ @@file_extensions = {} # @private
60
+ @@content_types = {} # @private
61
+ @@content_encoding = {} # @private
62
+
63
+ def self.inherited(child) # @private
64
+ @@subclasses << child
65
+ super
66
+ end
67
+
68
+ def self.require(library)
69
+ # TODO
70
+ end
71
+
72
+ def self.content_type(type, options = {})
73
+ @@content_types[type] ||= []
74
+ @@content_types[type] << self
75
+
76
+ if options[:extension]
77
+ extensions = [options[:extension]].flatten.map { |ext| ext.to_sym }
78
+ extensions.each { |ext| @@file_extensions[ext] = type }
79
+ end
80
+ end
81
+
82
+ def self.content_encoding(encoding)
83
+ @@content_encoding[self] = encoding.to_sym
84
+ end
85
+
86
+ def self.reader(klass)
87
+ # TODO
88
+ end
89
+
90
+ def self.writer(klass)
91
+ # TODO
92
+ end
93
+
94
+ end
95
+ end
data/lib/rdf/graph.rb CHANGED
@@ -25,6 +25,14 @@ module RDF
25
25
  end
26
26
  end
27
27
 
28
+ ##
29
+ # Returns `true`.
30
+ #
31
+ # @return [Boolean]
32
+ def graph?
33
+ true
34
+ end
35
+
28
36
  ##
29
37
  # @return [Boolean]
30
38
  def named?() !unnamed? end
data/lib/rdf/literal.rb CHANGED
@@ -1,6 +1,43 @@
1
1
  module RDF
2
2
  ##
3
3
  # An RDF literal.
4
+ #
5
+ # @example Creating a plain literal
6
+ # value = RDF::Literal.new("Hello, world!")
7
+ # value.plain? #=> true
8
+ #
9
+ # @example Creating a language-tagged literal (1)
10
+ # value = RDF::Literal.new("Hello!", :language => :en)
11
+ # value.language? #=> true
12
+ # value.language #=> :en
13
+ #
14
+ # @example Creating a language-tagged literal (2)
15
+ # RDF::Literal.new("Wazup?", :language => :"en-US")
16
+ # RDF::Literal.new("Hej!", :language => :sv)
17
+ # RDF::Literal.new("¡Hola!", :language => :es)
18
+ #
19
+ # @example Creating an explicitly datatyped literal
20
+ # value = RDF::Literal.new("2009-12-31", :datatype => RDF::XSD.date)
21
+ # value.datatype? #=> true
22
+ # value.datatype #=> RDF::XSD.date
23
+ #
24
+ # @example Creating an implicitly datatyped literal
25
+ # value = RDF::Literal.new(Date.today)
26
+ # value.datatype? #=> true
27
+ # value.datatype #=> RDF::XSD.date
28
+ #
29
+ # @example Creating implicitly datatyped literals
30
+ # RDF::Literal.new(false).datatype #=> XSD.boolean
31
+ # RDF::Literal.new(true).datatype #=> XSD.boolean
32
+ # RDF::Literal.new(123).datatype #=> XSD.int
33
+ # RDF::Literal.new(9223372036854775807).datatype #=> XSD.long
34
+ # RDF::Literal.new(3.1415).datatype #=> XSD.double
35
+ # RDF::Literal.new(Time.now).datatype #=> XSD.dateTime
36
+ # RDF::Literal.new(Date.new(2010)).datatype #=> XSD.date
37
+ # RDF::Literal.new(DateTime.new(2010)).datatype #=> XSD.dateTime
38
+ #
39
+ # @see http://www.w3.org/TR/rdf-concepts/#section-Literals
40
+ # @see http://www.w3.org/TR/rdf-concepts/#section-Datatypes-intro
4
41
  class Literal < Value
5
42
  # @return [String] The normalized string representation of the value.
6
43
  attr_accessor :value
@@ -49,6 +86,14 @@ module RDF
49
86
  @value = @value.to_s
50
87
  end
51
88
 
89
+ ##
90
+ # Returns `true`.
91
+ #
92
+ # @return [Boolean]
93
+ def literal?
94
+ true
95
+ end
96
+
52
97
  ##
53
98
  # @return [Boolean]
54
99
  def eql?(other)
@@ -72,18 +117,38 @@ module RDF
72
117
  end
73
118
 
74
119
  ##
120
+ # Returns `true` if this is a plain literal.
121
+ #
75
122
  # @return [Boolean]
123
+ # @see http://www.w3.org/TR/rdf-concepts/#dfn-plain-literal
76
124
  def plain?
77
125
  language.nil? && datatype.nil?
78
126
  end
79
127
 
80
128
  ##
129
+ # Returns `true` if this is a language-tagged literal.
130
+ #
81
131
  # @return [Boolean]
82
- def typed?
132
+ # @see http://www.w3.org/TR/rdf-concepts/#dfn-plain-literal
133
+ def language?
134
+ !language.nil?
135
+ end
136
+
137
+ ##
138
+ # Returns `true` if this is a datatyped literal.
139
+ #
140
+ # @return [Boolean]
141
+ # @see http://www.w3.org/TR/rdf-concepts/#dfn-typed-literal
142
+ def datatype?
83
143
  !datatype.nil?
84
144
  end
85
145
 
146
+ alias_method :typed?, :datatype?
147
+ alias_method :datatyped?, :datatype?
148
+
86
149
  ##
150
+ # Returns a string representation of this literal.
151
+ #
87
152
  # @return [String]
88
153
  def to_s
89
154
  quoted = value # FIXME
data/lib/rdf/node.rb CHANGED
@@ -1,29 +1,59 @@
1
1
  module RDF
2
2
  ##
3
3
  # An RDF blank node, also known as an unlabeled node.
4
+ #
5
+ # @example Creating a blank node with an implicit identifier
6
+ # bnode = RDF::Node.new
7
+ #
8
+ # @example Creating a blank node with an UUID identifier (1)
9
+ # require 'uuid'
10
+ # bnode = RDF::Node.new(UUID.generate)
11
+ #
12
+ # @example Creating a blank node with an UUID identifier (2)
13
+ # require 'uuidtools'
14
+ # bnode = RDF::Node.new(UUIDTools::UUID.random_create)
15
+ #
16
+ # @see http://github.com/assaf/uuid
17
+ # @see http://uuidtools.rubyforge.org/
4
18
  class Node < Resource
5
19
  # @return [String]
6
20
  attr_accessor :id
7
21
 
8
22
  ##
9
- # @param [#to_s]
23
+ # @param [#to_s] id
10
24
  def initialize(id = nil)
11
25
  @id = (id || object_id).to_s
12
26
  end
13
27
 
14
28
  ##
29
+ # Returns `true`.
30
+ #
15
31
  # @return [Boolean]
16
- def anonymous?() true end
32
+ def node?
33
+ true
34
+ end
17
35
 
18
36
  ##
37
+ # Returns `true`.
38
+ #
19
39
  # @return [Boolean]
20
- def labeled?() !unlabeled? end
40
+ def anonymous?
41
+ true
42
+ end
43
+
44
+ alias_method :unlabeled?, :anonymous?
21
45
 
22
46
  ##
47
+ # Returns `false`.
48
+ #
23
49
  # @return [Boolean]
24
- def unlabeled?() anonymous? end
50
+ def labeled?
51
+ !unlabeled?
52
+ end
25
53
 
26
54
  ##
55
+ # Returns a string representation of this blank node.
56
+ #
27
57
  # @return [String]
28
58
  def to_s
29
59
  "_:%s" % id.to_s
@@ -0,0 +1,12 @@
1
+ module RDF
2
+ ##
3
+ # N-Triples serialization format.
4
+ #
5
+ # @see http://www.w3.org/TR/rdf-testcases/#ntriples
6
+ # @see http://en.wikipedia.org/wiki/N-Triples
7
+ module NTriples
8
+ autoload :Format, 'rdf/ntriples/format'
9
+ autoload :Reader, 'rdf/ntriples/reader'
10
+ autoload :Writer, 'rdf/ntriples/writer'
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module RDF module NTriples
2
+ ##
3
+ # N-Triples format specification.
4
+ #
5
+ # @see http://www.w3.org/TR/rdf-testcases/#ntriples
6
+ class Format < RDF::Format
7
+ content_type 'text/plain', :extension => :nt
8
+ content_encoding 'ascii'
9
+
10
+ reader RDF::NTriples::Reader
11
+ writer RDF::NTriples::Format
12
+ end
13
+ end end