rdf 3.2.2 → 3.2.3
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/VERSION +1 -1
- data/lib/rdf/model/uri.rb +23 -3
- data/lib/rdf/vocabulary.rb +34 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4482866c0eb2c223af0f3a88f1eba8e1e2126c238c1136ff992a795de5047699
|
4
|
+
data.tar.gz: 38e58d5e2bab26f76b55affe2cb362aff85afb49c7692056837b69d34cad6081
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 464c0043d3238fc3c4b077dfe6144a145b2c636b0e7de53ea6e8ce7ea96d2fd196b88053b1974d939650295416a2e4f07d298009d06d3a0320c297caf7883309
|
7
|
+
data.tar.gz: 0b27d632fe51c621bd50c27c2b7ecf5da91cd615e4e39ddf82e9f65517bddadcba4adb387a33807f8f2f0851b3a1d3c0429ccf41f4ec1610371c57fe28bd0709
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.
|
1
|
+
3.2.3
|
data/lib/rdf/model/uri.rb
CHANGED
@@ -111,6 +111,10 @@ module RDF
|
|
111
111
|
tag tel turn turns tv urn javascript
|
112
112
|
).freeze
|
113
113
|
|
114
|
+
# Characters in a PName which must be escaped
|
115
|
+
PN_ESCAPE_CHARS = /[~\.\-!\$&'\(\)\*\+,;=\/\?\#@%_]/.freeze
|
116
|
+
PN_ESCAPES = /\\#{PN_ESCAPE_CHARS}/.freeze
|
117
|
+
|
114
118
|
##
|
115
119
|
# Cache size may be set through {RDF.config} using `uri_cache_size`.
|
116
120
|
#
|
@@ -627,10 +631,14 @@ module RDF
|
|
627
631
|
# RDF::URI('http://www.w3.org/2000/01/rdf-schema#').qname #=> [:rdfs, nil]
|
628
632
|
# RDF::URI('http://www.w3.org/2000/01/rdf-schema#label').qname #=> [:rdfs, :label]
|
629
633
|
# RDF::RDFS.label.qname #=> [:rdfs, :label]
|
634
|
+
# RDF::Vocab::DC.title.qname(
|
635
|
+
# prefixes: {dcterms: 'http://purl.org/dc/terms/'}) #=> [:dcterms, :title]
|
636
|
+
#
|
637
|
+
# @note within this software, the term QName is used to describe the tuple of prefix and suffix for a given IRI, where the prefix identifies some defined vocabulary. This somewhat contrasts with the notion of a [Qualified Name](https://www.w3.org/TR/2006/REC-xml-names11-20060816/#ns-qualnames) from XML, which are a subset of Prefixed Names.
|
630
638
|
#
|
631
639
|
# @param [Hash{Symbol => String}] prefixes
|
632
640
|
# Explicit set of prefixes to look for matches, defaults to loaded vocabularies.
|
633
|
-
# @return [Array(Symbol, Symbol)] or `nil` if no QName found
|
641
|
+
# @return [Array(Symbol, Symbol)] or `nil` if no QName found. The suffix component will not have [reserved characters](https://www.w3.org/TR/turtle/#reserved) escaped.
|
634
642
|
def qname(prefixes: nil)
|
635
643
|
if prefixes
|
636
644
|
prefixes.each do |prefix, uri|
|
@@ -659,13 +667,25 @@ module RDF
|
|
659
667
|
end
|
660
668
|
|
661
669
|
##
|
662
|
-
# Returns a
|
670
|
+
# Returns a Prefixed Name (PName) or the full IRI with any [reserved characters](https://www.w3.org/TR/turtle/#reserved) in the suffix escaped.
|
671
|
+
#
|
672
|
+
# @example Using a custom prefix for creating a PNname.
|
673
|
+
# RDF::URI('http://purl.org/dc/terms/creator').
|
674
|
+
# pname(prefixes: {dcterms: 'http://purl.org/dc/terms/'})
|
675
|
+
# #=> "dcterms:creator"
|
663
676
|
#
|
664
677
|
# @param [Hash{Symbol => String}] prefixes
|
665
678
|
# Explicit set of prefixes to look for matches, defaults to loaded vocabularies.
|
666
679
|
# @return [String] or `nil`
|
680
|
+
# @see #qname
|
681
|
+
# @see https://www.w3.org/TR/rdf-sparql-query/#prefNames
|
667
682
|
def pname(prefixes: nil)
|
668
|
-
|
683
|
+
q = self.qname(prefixes: prefixes)
|
684
|
+
return self.to_s unless q
|
685
|
+
prefix, suffix = q
|
686
|
+
suffix = suffix.to_s.gsub(PN_ESCAPE_CHARS) {|c| "\\#{c}"} if
|
687
|
+
suffix.to_s.match?(PN_ESCAPE_CHARS)
|
688
|
+
[prefix, suffix].join(":")
|
669
689
|
end
|
670
690
|
|
671
691
|
##
|
data/lib/rdf/vocabulary.rb
CHANGED
@@ -53,8 +53,7 @@ module RDF
|
|
53
53
|
# "rdfs:subClassOf" => "http://example/SuperClass"
|
54
54
|
# end
|
55
55
|
#
|
56
|
-
# @see
|
57
|
-
# @see http://en.wikipedia.org/wiki/QName
|
56
|
+
# @see https://www.w3.org/TR/rdf-sparql-query/#prefNames
|
58
57
|
class Vocabulary
|
59
58
|
extend ::Enumerable
|
60
59
|
|
@@ -379,15 +378,20 @@ module RDF
|
|
379
378
|
alias_method :__properties__, :properties
|
380
379
|
|
381
380
|
##
|
382
|
-
# Attempt to expand a Compact IRI/PName
|
381
|
+
# Attempt to expand a Compact IRI/PName using loaded vocabularies
|
383
382
|
#
|
384
383
|
# @param [String, #to_s] pname
|
384
|
+
# The local-part of the PName will will have [reserved character escapes](https://www.w3.org/TR/turtle/#reserved) unescaped.
|
385
385
|
# @return [Term]
|
386
|
-
# @raise [KeyError] if pname suffix not found in identified vocabulary
|
386
|
+
# @raise [KeyError] if pname suffix not found in identified vocabulary.
|
387
387
|
# @raise [ArgumentError] if resulting URI is not valid
|
388
388
|
def expand_pname(pname)
|
389
389
|
return pname unless pname.is_a?(String) || pname.is_a?(Symbol)
|
390
390
|
prefix, suffix = pname.to_s.split(":", 2)
|
391
|
+
# Unescape escaped PN_ESCAPE_CHARS
|
392
|
+
if suffix.match?(/\\#{RDF::URI::PN_ESCAPE_CHARS}/)
|
393
|
+
suffix = suffix.gsub(RDF::URI::PN_ESCAPES) {|matched| matched[1..-1]}
|
394
|
+
end
|
391
395
|
if prefix == "rdf"
|
392
396
|
RDF[suffix]
|
393
397
|
elsif vocab_detail = RDF::Vocabulary.vocab_map[prefix.to_sym]
|
@@ -417,9 +421,10 @@ module RDF
|
|
417
421
|
end
|
418
422
|
|
419
423
|
##
|
420
|
-
# Return the Vocabulary term associated with a
|
424
|
+
# Return the Vocabulary term associated with a URI
|
421
425
|
#
|
422
|
-
# @param [RDF::URI] uri
|
426
|
+
# @param [RDF::URI, String] uri
|
427
|
+
# If `uri` has is a pname in a locded vocabulary, the suffix portion of the PName will have escape characters unescaped before resolving against the vocabulary.
|
423
428
|
# @return [Vocabulary::Term]
|
424
429
|
def find_term(uri)
|
425
430
|
uri = RDF::URI(uri)
|
@@ -428,7 +433,8 @@ module RDF
|
|
428
433
|
if vocab.ontology == uri
|
429
434
|
vocab.ontology
|
430
435
|
else
|
431
|
-
|
436
|
+
suffix = uri.to_s[vocab.to_uri.to_s.length..-1].to_s
|
437
|
+
vocab[suffix]
|
432
438
|
end
|
433
439
|
end
|
434
440
|
end
|
@@ -643,12 +649,31 @@ module RDF
|
|
643
649
|
alias_method :__name__, :name
|
644
650
|
|
645
651
|
##
|
646
|
-
# Returns a suggested
|
652
|
+
# Returns a suggested vocabulary prefix for this vocabulary class.
|
647
653
|
#
|
648
654
|
# @return [Symbol]
|
649
655
|
# @since 0.3.0
|
650
656
|
def __prefix__
|
651
|
-
|
657
|
+
instance_variable_defined?(:@__prefix__) ?
|
658
|
+
@__prefix__ :
|
659
|
+
__name__.split('::').last.downcase.to_sym
|
660
|
+
end
|
661
|
+
|
662
|
+
##
|
663
|
+
# Sets the vocabulary prefix to use for this vocabulary..
|
664
|
+
#
|
665
|
+
# @example Overriding a standard vocabulary prefix.
|
666
|
+
# RDF::Vocab::DC.__prefix__ = :dcterms
|
667
|
+
# RDF::Vocab::DC.title.pname #=> 'dcterms:title'
|
668
|
+
#
|
669
|
+
# @param [Symbol] prefix
|
670
|
+
# @return [Symbol]
|
671
|
+
# @since 3.2.3
|
672
|
+
def __prefix__=(prefix)
|
673
|
+
params = RDF::Vocabulary.vocab_map[__prefix__]
|
674
|
+
@__prefix__ = prefix.to_sym
|
675
|
+
RDF::Vocabulary.register(@__prefix__, self, **params)
|
676
|
+
@__prefix__
|
652
677
|
end
|
653
678
|
|
654
679
|
protected
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arto Bendiken
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-01-
|
13
|
+
date: 2022-01-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: link_header
|