rdf-n3 3.2.1 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5b682c6d472f149d02a4f9d73c78478fa4cdb91d5b7594f1fb8ef7ff9fdc15f
4
- data.tar.gz: ce493e91c72e8f952b363daa321c9672c2823888a676b495650d786736774000
3
+ metadata.gz: 0b8ad4f6d7ca32219722ad7a0c73be390e31f4f1e8f743f3602bdfd4e0b2227d
4
+ data.tar.gz: a10d3b799d6dd79edb57c9e30842f20ec173dcdb5cce1bb82ed0cf658223171e
5
5
  SHA512:
6
- metadata.gz: 90ed9b5790afd03fae25fb075c4d3e22f19b88232783b1799a42a54ec8308f74e7dc11ff9d59254c17bb4a4c8804aa7aa1cde4c6ddb53b4d6b4b627c5e30a487
7
- data.tar.gz: 369ad2af5732ab29bbcb11c80589c0e3f8c014a8f157381b40312ba5394238e04d569e92ad7b9cb669f221058b8373d39f6965c15f8a4844e44661a1b33f9db2
6
+ metadata.gz: 29ec8639b1e5471a19f15108ddacc23c3c5e5e2df3e8684a488f346d49eeb00cf2741dfbe76c22ee54dbbee6e60b002471f16a84573d5981bef556cb75f78073
7
+ data.tar.gz: 3793b5d2e0fa7c488af872c57e6ebc136e123554d734ab64c5e19e20aa0cc87d886f17346937505705c709d5aba296fa2ba61d14fa5ac65f164d05a81598dbae
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # RDF::N3 reader/writer and reasoner
2
2
  Notation-3 reader/writer for [RDF.rb][RDF.rb] .
3
3
 
4
- [![Gem Version](https://badge.fury.io/rb/rdf-n3.png)](https://badge.fury.io/rb/rdf-n3)
4
+ [![Gem Version](https://badge.fury.io/rb/rdf-n3.svg)](https://badge.fury.io/rb/rdf-n3)
5
5
  [![Build Status](https://github.com/ruby-rdf/rdf-n3/workflows/CI/badge.svg?branch=develop)](https://github.com/ruby-rdf/rdf-n3/actions?query=workflow%3ACI)
6
6
  [![Coverage Status](https://coveralls.io/repos/github/ruby-rdf/rdf-n3/badge.svg?branch=develop)](https://coveralls.io/github/ruby-rdf/rdf-n3?branch=develop)
7
7
  [![Gitter chat](https://badges.gitter.im/ruby-rdf/rdf.png)](https://gitter.im/ruby-rdf/rdf)
@@ -159,6 +159,27 @@ Reasoning is discussed in the [Design Issues][] document.
159
159
  * `time:timeZone` (See {RDF::N3::Algebra::Time::Timezone})
160
160
  * `time:year` (See {RDF::N3::Algebra::Time::Year})
161
161
 
162
+ ## Parser features
163
+
164
+ ### Chaining with `iriPropertyList`
165
+
166
+ Adds a proposed syntactic extension for _subject embedding_ similar to a `blankNodePropertyList`. An `iriPropertyList` begins with `[ id _id_`, instead of a simple `[`. This sets _id_ as the **subject** to be used for the following `propertyList`. This provides a mechanisms similar to [JSON-LD Embedding](https://www.w3.org/TR/json-ld11/#embedding).
167
+
168
+ @prefix dc: <http://purl.org/dc/terms/>.
169
+ @prefix : <http://example.org/nd#>.
170
+
171
+ :SummerReadingList a :OrderedListOfBooks ;
172
+ :toRead (
173
+ [id :mobyDick dc:title "Moby Dick"; :setting :WhaleIntestines ]
174
+ [
175
+ id :jaws
176
+ dc:title "Jaws";
177
+ :setting :Beach
178
+ ]
179
+ ).
180
+
181
+ Note that the _id_ used in the `iriPropertyList` is not delimited by a `;`
182
+
162
183
  ### Formulae / Quoted Graphs
163
184
 
164
185
  N3 Formulae are introduced with the `{ statement-list }` syntax. A given formula is assigned an `RDF::Node` instance, which is also used as the graph_name for `RDF::Statement` instances provided to `RDF::N3::Reader#each_statement`. For example, the following N3 generates the associated statements:
@@ -193,11 +214,11 @@ Formulae are typically used to query the knowledge-base, which is set from the b
193
214
  Blank nodes associated with rdf:List statements used as part of a built-in are made _non-distinguished_ existential variables, and patters containing these variables become optional. If they are not bound as part of the query, the implicitly are bound as the original blank nodes defined within the formula, which allows for both constant list arguments, list arguments that contain variables, or arguments which are variables expanding to lists.
194
215
 
195
216
  ## Dependencies
196
- * [Ruby](https://ruby-lang.org/) (>= 2.6)
197
- * [RDF.rb](https://rubygems.org/gems/rdf) (~> 3.2)
198
- * [EBNF][EBNF gem] (~> 2.2)
199
- * [SPARQL][SPARQL gem] (~> 3.1)
200
- * [SXP][SXP gem] (~> 1.2)
217
+ * [Ruby](https://ruby-lang.org/) (>= 3.0)
218
+ * [RDF.rb](https://rubygems.org/gems/rdf) (~> 3.3)
219
+ * [EBNF][EBNF gem] (~> 2.4)
220
+ * [SPARQL][SPARQL gem] (~> 3.3)
221
+ * [SXP][SXP gem] (~> 1.3)
201
222
 
202
223
  ## Documentation
203
224
  Full documentation available on [RubyDoc.info](https://ruby-rdf.github.io/rdf-n3)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.2.1
1
+ 3.3.0
@@ -18,8 +18,7 @@ module RDF::N3::Algebra::Time
18
18
  case position
19
19
  when :subject
20
20
  return nil unless resource.literal?
21
- resource = resource.as_datetime
22
- RDF::Literal(resource.object.strftime("%d").to_i)
21
+ resource.as_datetime.day
23
22
  when :object
24
23
  return nil unless resource.literal? || resource.variable?
25
24
  resource
@@ -18,8 +18,7 @@ module RDF::N3::Algebra::Time
18
18
  case position
19
19
  when :subject
20
20
  return nil unless resource.literal?
21
- resource = resource.as_datetime
22
- RDF::Literal(resource.object.strftime("%H").to_i)
21
+ resource.as_datetime.hours
23
22
  when :object
24
23
  return nil unless resource.literal? || resource.variable?
25
24
  resource
@@ -21,9 +21,8 @@ module RDF::N3::Algebra::Time
21
21
  when RDF::Query::Variable
22
22
  resource
23
23
  when RDF::Literal
24
- resource = resource.as_datetime
25
24
  # Subject evaluates to seconds from the epoc
26
- RDF::Literal::Integer.new(resource.object.strftime("%s"))
25
+ RDF::Literal::Integer.new(resource.as_datetime.object.strftime("%s"))
27
26
  else
28
27
  nil
29
28
  end
@@ -18,8 +18,7 @@ module RDF::N3::Algebra::Time
18
18
  case position
19
19
  when :subject
20
20
  return nil unless resource.literal?
21
- resource = resource.as_datetime
22
- RDF::Literal(resource.object.strftime("%M").to_i)
21
+ resource.as_datetime.minutes
23
22
  when :object
24
23
  return nil unless resource.literal? || resource.variable?
25
24
  resource
@@ -18,8 +18,7 @@ module RDF::N3::Algebra::Time
18
18
  case position
19
19
  when :subject
20
20
  return nil unless resource.literal?
21
- resource = resource.as_datetime
22
- RDF::Literal(resource.object.strftime("%m").to_i)
21
+ resource.as_datetime.month
23
22
  when :object
24
23
  return nil unless resource.literal? || resource.variable?
25
24
  resource
@@ -18,8 +18,7 @@ module RDF::N3::Algebra::Time
18
18
  case position
19
19
  when :subject
20
20
  return nil unless resource.literal?
21
- resource = resource.as_datetime
22
- RDF::Literal(resource.object.strftime("%S").to_i)
21
+ RDF::Literal(resource.as_datetime.seconds.to_i)
23
22
  when :object
24
23
  return nil unless resource.literal? || resource.variable?
25
24
  resource
@@ -18,8 +18,7 @@ module RDF::N3::Algebra::Time
18
18
  case position
19
19
  when :subject
20
20
  return nil unless resource.literal?
21
- resource = resource.as_datetime
22
- RDF::Literal(resource.object.strftime("%Z"))
21
+ resource.as_datetime.tz
23
22
  when :object
24
23
  return nil unless resource.literal? || resource.variable?
25
24
  resource
@@ -18,8 +18,7 @@ module RDF::N3::Algebra::Time
18
18
  case position
19
19
  when :subject
20
20
  return nil unless resource.literal?
21
- resource = resource.as_datetime
22
- RDF::Literal(resource.object.strftime("%Y").to_i)
21
+ resource.as_datetime.year
23
22
  when :object
24
23
  return nil unless resource.literal? || resource.variable?
25
24
  resource
data/lib/rdf/n3/format.rb CHANGED
@@ -17,7 +17,10 @@ module RDF::N3
17
17
  #
18
18
  # @see https://www.w3.org/TR/rdf-testcases/#ntriples
19
19
  class Format < RDF::Format
20
- content_type 'text/n3', extension: :n3, aliases: %w(text/rdf+n3;q=0.2 application/rdf+n3;q=0.2)
20
+ content_type 'text/n3',
21
+ extension: :n3,
22
+ aliases: %w(text/rdf+n3;q=0.2 application/rdf+n3;q=0.2),
23
+ uri: 'http://www.w3.org/ns/formats/N3'
21
24
  content_encoding 'utf-8'
22
25
 
23
26
  reader { RDF::N3::Reader }
data/lib/rdf/n3/reader.rb CHANGED
@@ -181,6 +181,7 @@ module RDF::N3
181
181
 
182
182
  # @!parse none
183
183
  terminal(:ANON, ANON)
184
+ terminal(:IPLSTART, IPLSTART)
184
185
  terminal(:BLANK_NODE_LABEL, BLANK_NODE_LABEL)
185
186
  terminal(:IRIREF, IRIREF, unescape: true)
186
187
  terminal(:DOUBLE, DOUBLE)
@@ -311,6 +312,9 @@ module RDF::N3
311
312
  prod(:triples, %w{.}) do
312
313
  error("read_triples", "Unexpected end of file") unless token = @lexer.first
313
314
  subject = case token.type || token.value
315
+ when IPLSTART
316
+ # iriPropertyList predicateObjectList?
317
+ read_iriPropertyList || error("Failed to parse iriPropertyList", production: :triples, token: @lexer.first)
314
318
  when '['
315
319
  # blankNodePropertyList predicateObjectList?
316
320
  read_blankNodePropertyList || error("Failed to parse blankNodePropertyList", production: :triples, token: @lexer.first)
@@ -435,6 +439,7 @@ module RDF::N3
435
439
  read_quickVar ||
436
440
  read_collection ||
437
441
  read_blankNodePropertyList ||
442
+ read_iriPropertyList ||
438
443
  read_literal ||
439
444
  read_formula
440
445
  end
@@ -523,6 +528,28 @@ module RDF::N3
523
528
  end
524
529
  end
525
530
 
531
+ ##
532
+ # Read a iriPropertyList
533
+ #
534
+ # [21] iriPropertyList ::= IPLSTART iri predicateObjectList ']'
535
+ #
536
+ # @return [RDF::Node]
537
+ def read_iriPropertyList
538
+ token = @lexer.first
539
+ if token.type == :IPLSTART
540
+ prod(:iriPropertyList, %{]}) do
541
+ @lexer.shift
542
+ progress("iriPropertyList", depth: options[:depth], token: token)
543
+ node = read_iri
544
+ debug("iriPropertyList: subject", depth: options[:depth]) {node.to_sxp}
545
+ read_predicateObjectList(node)
546
+ error("iriPropertyList", "Expected closing ']'") unless @lexer.first === ']'
547
+ @lexer.shift
548
+ node
549
+ end
550
+ end
551
+ end
552
+
526
553
  ##
527
554
  # Read a collection (`RDF::List`)
528
555
  #
@@ -64,6 +64,9 @@ module RDF::N3
64
64
  # 25
65
65
  STRING_LITERAL_LONG_QUOTE = /"""(?:(?:"|"")?(?:[^"\\]|#{ECHAR}|#{UCHAR}))*"""/um.freeze
66
66
 
67
+ # 33
68
+ IPLSTART = /\[\s*id/um.freeze
69
+
67
70
  # 28t
68
71
  PREFIX = /@?prefix/ui.freeze
69
72
  # 29t
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf-n3
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregg
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-01-28 00:00:00.000000000 Z
12
+ date: 2023-08-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ebnf
@@ -17,140 +17,140 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '2.2'
20
+ version: '2.4'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '2.2'
27
+ version: '2.4'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rdf
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '3.2'
34
+ version: '3.3'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '3.2'
41
+ version: '3.3'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: sparql
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '3.2'
48
+ version: '3.3'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '3.2'
55
+ version: '3.3'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: sxp
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '1.2'
62
+ version: '1.3'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '1.2'
69
+ version: '1.3'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: json-ld
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '3.2'
76
+ version: '3.3'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '3.2'
83
+ version: '3.3'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: rdf-spec
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '3.2'
90
+ version: '3.3'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: '3.2'
97
+ version: '3.3'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rdf-isomorphic
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: '3.2'
104
+ version: '3.3'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: '3.2'
111
+ version: '3.3'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: rdf-trig
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: '3.2'
118
+ version: '3.3'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: '3.2'
125
+ version: '3.3'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: rdf-vocab
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - "~>"
131
131
  - !ruby/object:Gem::Version
132
- version: '3.2'
132
+ version: '3.3'
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: '3.2'
139
+ version: '3.3'
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: rspec
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
144
  - - "~>"
145
145
  - !ruby/object:Gem::Version
146
- version: '3.10'
146
+ version: '3.12'
147
147
  type: :development
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
151
  - - "~>"
152
152
  - !ruby/object:Gem::Version
153
- version: '3.10'
153
+ version: '3.12'
154
154
  - !ruby/object:Gem::Dependency
155
155
  name: rspec-its
156
156
  requirement: !ruby/object:Gem::Requirement
@@ -301,14 +301,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
301
301
  requirements:
302
302
  - - ">="
303
303
  - !ruby/object:Gem::Version
304
- version: '2.6'
304
+ version: '3.0'
305
305
  required_rubygems_version: !ruby/object:Gem::Requirement
306
306
  requirements:
307
307
  - - ">="
308
308
  - !ruby/object:Gem::Version
309
309
  version: '0'
310
310
  requirements: []
311
- rubygems_version: 3.1.4
311
+ rubygems_version: 3.2.33
312
312
  signing_key:
313
313
  specification_version: 4
314
314
  summary: Notation3 reader/writer and reasoner for RDF.rb.