rdf-normalize 0.5.0 → 0.5.1
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.
- checksums.yaml +4 -4
- data/README.md +17 -8
- data/VERSION +1 -1
- data/lib/rdf/normalize/urdna2015.rb +20 -26
- data/lib/rdf/normalize/urgna2012.rb +3 -5
- data/lib/rdf/normalize/version.rb +1 -1
- data/lib/rdf/normalize/writer.rb +1 -1
- data/lib/rdf/normalize.rb +1 -1
- metadata +10 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75218bd6e68ada2e64c27fb691f0ff8b92cfd8b9fe9747f02d862bcbcdd8a5dd
|
4
|
+
data.tar.gz: fbe6c3579b66435b0b2620178a3ebf46e1bd56f17180a7a64f081aab65a3c447
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1363fb834466a6a643245a12776ab6c49cff62436af19ecd5d6dfe58feb83b49971868838dc1d9f687a997ee93af2b12b98a51eedc2f6846e1e0e74810eb4285
|
7
|
+
data.tar.gz: 62fb2457433083c9b4181353bfa0ec8740a871f3f58b6ac83233a0dd6385b3556a7540c62b1041bab5ba2aee17a55234c70a323fedfc41db09912bf7d3675215
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ RDF Graph normalizer for [RDF.rb][RDF.rb].
|
|
7
7
|
[](https://gitter.im/ruby-rdf/rdf)
|
8
8
|
|
9
9
|
## Description
|
10
|
-
This is a [Ruby][] implementation of a [RDF
|
10
|
+
This is a [Ruby][] implementation of a [RDF Dataset Canonicalization][] for [RDF.rb][].
|
11
11
|
|
12
12
|
## Features
|
13
13
|
RDF::Normalize generates normalized [N-Quads][] output for an RDF Dataset using the algorithm
|
@@ -16,8 +16,8 @@ to serialize normalized statements.
|
|
16
16
|
|
17
17
|
Algorithms implemented:
|
18
18
|
|
19
|
-
* [URGNA2012](https://
|
20
|
-
* [URDNA2015](https://
|
19
|
+
* [URGNA2012](https://www.w3.org/TR/rdf-canon/#dfn-urgna2012)
|
20
|
+
* [URDNA2015](https://www.w3.org/TR/rdf-canon/#dfn-urdna2015)
|
21
21
|
|
22
22
|
Install with `gem install rdf-normalize`
|
23
23
|
|
@@ -27,7 +27,17 @@ Install with `gem install rdf-normalize`
|
|
27
27
|
## Usage
|
28
28
|
|
29
29
|
## Documentation
|
30
|
-
|
30
|
+
|
31
|
+
Full documentation available on [GitHub][Normalize doc]
|
32
|
+
|
33
|
+
## Examples
|
34
|
+
|
35
|
+
### Returning normalized N-Quads
|
36
|
+
|
37
|
+
require 'rdf/normalize'
|
38
|
+
require 'rdf/turtle'
|
39
|
+
g = RDF::Graph.load("etc/doap.ttl")
|
40
|
+
puts g.dump(:normalize)
|
31
41
|
|
32
42
|
### Principle Classes
|
33
43
|
* {RDF::Normalize}
|
@@ -37,7 +47,6 @@ Full documentation available on [Rubydoc.info][Normalize doc]
|
|
37
47
|
* {RDF::Normalize::URGNA2012}
|
38
48
|
* {RDF::Normalize::URDNA2015}
|
39
49
|
|
40
|
-
|
41
50
|
## Dependencies
|
42
51
|
|
43
52
|
* [Ruby](https://ruby-lang.org/) (>= 2.6)
|
@@ -80,7 +89,7 @@ see <https://unlicense.org/> or the accompanying {file:LICENSE} file.
|
|
80
89
|
[YARD]: https://yardoc.org/
|
81
90
|
[YARD-GS]: https://rubydoc.info/docs/yard/file/docs/GettingStarted.md
|
82
91
|
[PDD]: https://unlicense.org/#unlicensing-contributions
|
83
|
-
[RDF.rb]: https://
|
92
|
+
[RDF.rb]: https://ruby-rdf.github.io/rdf-normalize
|
84
93
|
[N-Triples]: https://www.w3.org/TR/rdf-testcases/#ntriples
|
85
|
-
[RDF
|
86
|
-
[Normalize doc]:https://
|
94
|
+
[RDF Dataset Canonicalization]: https://www.w3.org/TR/rdf-canon/
|
95
|
+
[Normalize doc]: https://ruby-rdf.github.io/rdf-normalize/
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.1
|
@@ -27,30 +27,23 @@ module RDF::Normalize
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
ns.hash_to_bnodes = {}
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
hash = log_depth {ns.hash_first_degree_quads(node)}
|
39
|
-
log_debug("1deg") {"hash: #{hash}"}
|
40
|
-
ns.add_bnode_hash(node, hash)
|
41
|
-
end
|
32
|
+
# Calculate hashes for first degree nodes
|
33
|
+
ns.bnode_to_statements.each_key do |node|
|
34
|
+
hash = log_depth {ns.hash_first_degree_quads(node)}
|
35
|
+
log_debug("1deg") {"hash: #{hash}"}
|
36
|
+
ns.add_bnode_hash(node, hash)
|
37
|
+
end
|
42
38
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
ns.hash_to_bnodes.delete(hash)
|
52
|
-
simple = true
|
53
|
-
end
|
39
|
+
# Create canonical replacements for hashes mapping to a single node
|
40
|
+
ns.hash_to_bnodes.keys.sort.each do |hash|
|
41
|
+
identifier_list = ns.hash_to_bnodes[hash]
|
42
|
+
next if identifier_list.length > 1
|
43
|
+
node = identifier_list.first
|
44
|
+
id = ns.canonical_issuer.issue_identifier(node)
|
45
|
+
log_debug("single node") {"node: #{node.to_ntriples}, hash: #{hash}, id: #{id}"}
|
46
|
+
ns.hash_to_bnodes.delete(hash)
|
54
47
|
end
|
55
48
|
|
56
49
|
# Iterate over hashs having more than one node
|
@@ -107,12 +100,13 @@ module RDF::Normalize
|
|
107
100
|
|
108
101
|
def add_statement(node, statement)
|
109
102
|
bnode_to_statements[node] ||= []
|
110
|
-
bnode_to_statements[node] << statement unless bnode_to_statements[node].
|
103
|
+
bnode_to_statements[node] << statement unless bnode_to_statements[node].any? {|st| st.eql?(statement)}
|
111
104
|
end
|
112
105
|
|
113
106
|
def add_bnode_hash(node, hash)
|
114
107
|
hash_to_bnodes[hash] ||= []
|
115
|
-
|
108
|
+
# Match on object IDs of nodes, rather than simple node equality
|
109
|
+
hash_to_bnodes[hash] << node unless hash_to_bnodes[hash].any? {|n| n.eql?(node)}
|
116
110
|
end
|
117
111
|
|
118
112
|
# @param [RDF::Node] node
|
@@ -143,7 +137,7 @@ module RDF::Normalize
|
|
143
137
|
identifier = canonical_issuer.identifier(related) ||
|
144
138
|
issuer.identifier(related) ||
|
145
139
|
hash_first_degree_quads(related)
|
146
|
-
input = position
|
140
|
+
input = "#{position}"
|
147
141
|
input << statement.predicate.to_ntriples unless position == :g
|
148
142
|
input << identifier
|
149
143
|
log_debug("hrel") {"input: #{input.inspect}, hash: #{hexdigest(input)}"}
|
@@ -225,7 +219,7 @@ module RDF::Normalize
|
|
225
219
|
|
226
220
|
hash = log_depth {hash_related_node(term, statement, issuer, pos)}
|
227
221
|
map[hash] ||= []
|
228
|
-
map[hash] << term unless map[hash].
|
222
|
+
map[hash] << term unless map[hash].any? {|n| n.eql?(term)}
|
229
223
|
end
|
230
224
|
end
|
231
225
|
end
|
@@ -23,9 +23,7 @@ module RDF::Normalize
|
|
23
23
|
identifier = canonical_issuer.identifier(related) ||
|
24
24
|
issuer.identifier(related) ||
|
25
25
|
hash_first_degree_quads(related)
|
26
|
-
input = position.
|
27
|
-
input << statement.predicate.to_s
|
28
|
-
input << identifier
|
26
|
+
input = "#{position}#{statement.predicate}#{identifier}"
|
29
27
|
log_debug("hrel") {"input: #{input.inspect}, hash: #{hexdigest(input)}"}
|
30
28
|
hexdigest(input)
|
31
29
|
end
|
@@ -35,11 +33,11 @@ module RDF::Normalize
|
|
35
33
|
if statement.subject.node? && statement.subject != identifier
|
36
34
|
hash = log_depth {hash_related_node(statement.subject, statement, issuer, :p)}
|
37
35
|
map[hash] ||= []
|
38
|
-
map[hash] << statement.subject unless map[hash].
|
36
|
+
map[hash] << statement.subject unless map[hash].any? {|n| n.eql?(statement.subject)}
|
39
37
|
elsif statement.object.node? && statement.object != identifier
|
40
38
|
hash = log_depth {hash_related_node(statement.object, statement, issuer, :r)}
|
41
39
|
map[hash] ||= []
|
42
|
-
map[hash] << statement.object unless map[hash].
|
40
|
+
map[hash] << statement.object unless map[hash].any? {|n| n.eql?(statement.object)}
|
43
41
|
end
|
44
42
|
end
|
45
43
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module RDF::Normalize::VERSION
|
2
|
-
VERSION_FILE = File.
|
2
|
+
VERSION_FILE = File.expand_path("../../../../VERSION", __FILE__)
|
3
3
|
MAJOR, MINOR, TINY, EXTRA = File.read(VERSION_FILE).chop.split(".")
|
4
4
|
|
5
5
|
STRING = [MAJOR, MINOR, TINY, EXTRA].compact.join('.')
|
data/lib/rdf/normalize/writer.rb
CHANGED
@@ -4,7 +4,7 @@ module RDF::Normalize
|
|
4
4
|
#
|
5
5
|
# Normalizes the enumerated statements into normal form in the form of N-Quads.
|
6
6
|
#
|
7
|
-
# @author [Gregg Kellogg](
|
7
|
+
# @author [Gregg Kellogg](https://greggkellogg.net/)
|
8
8
|
class Writer < RDF::NQuads::Writer
|
9
9
|
format RDF::Normalize::Format
|
10
10
|
|
data/lib/rdf/normalize.rb
CHANGED
@@ -25,7 +25,7 @@ module RDF
|
|
25
25
|
# writer << RDF::Repository.load("etc/doap.ttl")
|
26
26
|
# end
|
27
27
|
#
|
28
|
-
# @author [Gregg Kellogg](
|
28
|
+
# @author [Gregg Kellogg](https://greggkellogg.net/)
|
29
29
|
module Normalize
|
30
30
|
require 'rdf/normalize/format'
|
31
31
|
autoload :Base, 'rdf/normalize/base'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-normalize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdf
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.10'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: webmock
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '3.11'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '3.11'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: json-ld
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,7 +80,7 @@ dependencies:
|
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0.9'
|
97
|
-
description: RDF::Normalize
|
83
|
+
description: RDF::Normalize performs Dataset Canonicalization for RDF.rb.
|
98
84
|
email: public-rdf-ruby@w3.org
|
99
85
|
executables: []
|
100
86
|
extensions: []
|
@@ -115,7 +101,12 @@ files:
|
|
115
101
|
homepage: https://github.com/ruby-rdf/rdf-normalize
|
116
102
|
licenses:
|
117
103
|
- Unlicense
|
118
|
-
metadata:
|
104
|
+
metadata:
|
105
|
+
documentation_uri: https://ruby-rdf.github.io/rdf-normalize
|
106
|
+
bug_tracker_uri: https://github.com/ruby-rdf/rdf-normalize/issues
|
107
|
+
homepage_uri: https://github.com/ruby-rdf/rdf-normalize
|
108
|
+
mailing_list_uri: https://lists.w3.org/Archives/Public/public-rdf-ruby/
|
109
|
+
source_code_uri: https://github.com/ruby-rdf/rdf-normalize
|
119
110
|
post_install_message:
|
120
111
|
rdoc_options: []
|
121
112
|
require_paths:
|
@@ -131,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
122
|
- !ruby/object:Gem::Version
|
132
123
|
version: '0'
|
133
124
|
requirements: []
|
134
|
-
rubygems_version: 3.3.
|
125
|
+
rubygems_version: 3.3.7
|
135
126
|
signing_key:
|
136
127
|
specification_version: 4
|
137
128
|
summary: RDF Graph normalizer for Ruby.
|