@@ -621,16 +621,22 @@ def parent
621621 end
622622
623623 ##
624- # Returns a qualified name (QName) for this URI based on available vocabularies, if possible.
624+ # Returns a qualified name (QName) as a tuple of `[prefix, suffix]` for this URI based on available vocabularies, if possible.
625625 #
626626 # @example
627627 # RDF::URI('http://www.w3.org/2000/01/rdf-schema#').qname #=> [:rdfs, nil]
628628 # RDF::URI('http://www.w3.org/2000/01/rdf-schema#label').qname #=> [:rdfs, :label]
629629 # RDF::RDFS.label.qname #=> [:rdfs, :label]
630630 #
631+ # @param [Hash{Symbol => String}] prefixes
632+ # Explicit set of prefixes to look for matches, defaults to loaded vocabularies.
631633 # @return [Array(Symbol, Symbol)] or `nil` if no QName found
632- def qname
633- if self . to_s =~ %r([:/#]([^:/#]*)$)
634+ def qname ( prefixes : nil )
635+ if prefixes
636+ prefixes . each do |prefix , uri |
637+ return [ prefix , self . to_s [ uri . length ..-1 ] . to_sym ] if self . start_with? ( uri )
638+ end
639+ elsif self . to_s =~ %r([:/#]([^:/#]*)$)
634640 local_name = $1
635641 vocab_uri = local_name . empty? ? self . to_s : self . to_s [ 0 ...-( local_name . length ) ]
636642 Vocabulary . each do |vocab |
@@ -655,9 +661,11 @@ def qname
655661 ##
656662 # Returns a string version of the QName or the full IRI
657663 #
664+ # @param [Hash{Symbol => String}] prefixes
665+ # Explicit set of prefixes to look for matches, defaults to loaded vocabularies.
658666 # @return [String] or `nil`
659- def pname
660- ( q = self . qname ) ? q . join ( ":" ) : to_s
667+ def pname ( prefixes : nil )
668+ ( q = self . qname ( prefixes : prefixes ) ) ? q . join ( ":" ) : to_s
661669 end
662670
663671 ##
0 commit comments