@@ -84,6 +84,7 @@ def to_context_definition(context)
8484 def inspect
8585 v = %w( [TD )
8686 v << "id=#{ @id } "
87+ v << "term=#{ @term } "
8788 v << "rev" if reverse_property
8889 v << "container=#{ container_mapping } " if container_mapping
8990 v << "lang=#{ language_mapping . inspect } " unless language_mapping . nil?
@@ -602,8 +603,7 @@ def from_vocabulary(graph)
602603 when RDF ::XSD . boolean , RDF ::SCHEMA . Boolean , RDF ::XSD . date , RDF ::SCHEMA . Date ,
603604 RDF ::XSD . dateTime , RDF ::SCHEMA . DateTime , RDF ::XSD . time , RDF ::SCHEMA . Time ,
604605 RDF ::XSD . duration , RDF ::SCHEMA . Duration , RDF ::XSD . decimal , RDF ::SCHEMA . Number ,
605- RDF ::XSD . float , RDF ::SCHEMA . Float , RDF ::XSD . integer , RDF ::SCHEMA . Integer ,
606- RDF ::XSD . anyURI
606+ RDF ::XSD . float , RDF ::SCHEMA . Float , RDF ::XSD . integer , RDF ::SCHEMA . Integer
607607 td . type_mapping = r
608608 td . simple = false
609609 else
@@ -616,29 +616,6 @@ def from_vocabulary(graph)
616616 self
617617 end
618618
619- ## FIXME: this should go away
620- # Retrieve term mappings
621- #
622- # @return [Array<RDF::URI>]
623- # @deprecated
624- def mappings
625- term_definitions . inject ( { } ) do |memo , ( t , td ) |
626- memo [ t ] = td ? td . id : nil
627- memo
628- end
629- end
630-
631- ## FIXME: this should go away
632- # Retrieve term mapping
633- #
634- # @param [String, #to_s] term
635- #
636- # @return [RDF::URI, String]
637- # @deprecated
638- def mapping ( term )
639- term_definitions [ term ] ? term_definitions [ term ] . id : nil
640- end
641-
642619 # Set term mapping
643620 #
644621 # @param [#to_s] term
@@ -658,83 +635,57 @@ def set_mapping(term, value)
658635 term_definitions [ term ]
659636 end
660637
661- ## FIXME: this should go away
662- # Reverse term mapping, typically used for finding aliases for keys.
663- #
664- # Returns either the original value, or a mapping for this value.
665- #
666- # @example
667- # {"@context": {"id": "@id"}, "@id": "foo"} => {"id": "foo"}
668- #
669- # @param [RDF::URI, String] value
670- # @return [String]
671- # @deprecated
672- def alias ( value )
673- iri_to_term . fetch ( value , value )
674- end
675-
676- ##
677- # Retrieve term coercion
678- #
679- # @param [String] property in unexpanded form
680- #
681- # @return [RDF::URI, '@id']
682- def coerce ( property )
683- # Map property, if it's not an RDF::Value
684- # @type is always is an IRI
685- return '@id' if [ RDF . type , '@type' ] . include? ( property )
686- term_definitions [ property ] && term_definitions [ property ] . type_mapping
687- end
688- protected :coerce
689-
690638 ##
691639 # Retrieve container mapping, add it if `value` is provided
692640 #
693- # @param [String] property in unexpanded form
641+ # @param [Term, #to_s] term in unexpanded form
694642 # @return [String]
695- def container ( property )
696- return '@set' if property == '@graph'
697- return property if KEYWORDS . include? ( property )
698- term_definitions [ property ] && term_definitions [ property ] . container_mapping
699- end
700-
701- ## FIXME: this should go away
702- # Retrieve language mappings
703- #
704- # @return [Array<String>]
705- # @deprecated
706- def languages
707- term_definitions . inject ( { } ) do |memo , ( t , td ) |
708- memo [ t ] = td . language_mapping
709- memo
710- end
643+ def container ( term )
644+ return '@set' if term == '@graph'
645+ return term if KEYWORDS . include? ( term )
646+ term = term_definitions [ term . to_s ] unless term . is_a? ( TermDefinition )
647+ term && term . container_mapping
711648 end
712649
713650 ##
714- # Retrieve the language associated with a property, or the default language otherwise
651+ # Retrieve the language associated with a term, or the default language otherwise
652+ # @param [Term, #to_s] term in unexpanded form
715653 # @return [String]
716- def language ( property )
717- lang = term_definitions [ property ] && term_definitions [ property ] . language_mapping
654+ def language ( term )
655+ term = term_definitions [ term . to_s ] unless term . is_a? ( TermDefinition )
656+ lang = term && term . language_mapping
718657 lang . nil? ? @default_language : lang
719658 end
720659
721660 ##
722661 # Is this a reverse term
662+ # @param [Term, #to_s] term in unexpanded form
723663 # @return [Boolean]
724- def reverse? ( property )
725- term_definitions [ property ] && term_definitions [ property ] . reverse_property
664+ def reverse? ( term )
665+ term = term_definitions [ term . to_s ] unless term . is_a? ( TermDefinition )
666+ term && term . reverse_property
726667 end
727668
728669 ##
729- # Determine if `term` is a suitable term.
730- # Term may be any valid JSON string.
670+ # Given a term or IRI, find a reverse term definition matching that term. If the term is already reversed, find a non-reversed version.
731671 #
732- # @param [String] term
733- # @return [Boolean]
734- def term_valid? ( term )
735- term . is_a? ( String )
672+ # @param [Term, #to_s] term
673+ # @return [Term] related term definition
674+ def reverse_term ( term )
675+ # Direct lookup of term
676+ term = term_definitions [ term . to_s ] if term_definitions . has_key? ( term . to_s ) && !term . is_a? ( TermDefinition )
677+
678+ # Lookup term, assuming term is an IRI
679+ unless term . is_a? ( TermDefinition )
680+ td = term_definitions . values . detect { |t | t . id == term . to_s }
681+
682+ # Otherwise create a temporary term definition
683+ term = td || TermDefinition . new ( term . to_s , expand_iri ( term , vocab :true ) )
684+ end
685+
686+ # Now, return a term, which reverses this term
687+ term_definitions . values . detect { |t | t . id == term . id && t . reverse_property != term . reverse_property }
736688 end
737- protected :term_valid?
738689
739690 ##
740691 # Expand an IRI. Relative IRIs are expanded against any document base.
@@ -1155,7 +1106,45 @@ def dup
11551106 ec
11561107 end
11571108
1158- private
1109+ protected
1110+
1111+ ##
1112+ # Retrieve term coercion
1113+ #
1114+ # @param [String] property in unexpanded form
1115+ #
1116+ # @return [RDF::URI, '@id']
1117+ def coerce ( property )
1118+ # Map property, if it's not an RDF::Value
1119+ # @type is always is an IRI
1120+ return '@id' if [ RDF . type , '@type' ] . include? ( property )
1121+ term_definitions [ property ] && term_definitions [ property ] . type_mapping
1122+ end
1123+
1124+ ##
1125+ # Determine if `term` is a suitable term.
1126+ # Term may be any valid JSON string.
1127+ #
1128+ # @param [String] term
1129+ # @return [Boolean]
1130+ def term_valid? ( term )
1131+ term . is_a? ( String )
1132+ end
1133+
1134+ # Reverse term mapping, typically used for finding aliases for keys.
1135+ #
1136+ # Returns either the original value, or a mapping for this value.
1137+ #
1138+ # @example
1139+ # {"@context": {"id": "@id"}, "@id": "foo"} => {"id": "foo"}
1140+ #
1141+ # @param [RDF::URI, String] value
1142+ # @return [String]
1143+ def alias ( value )
1144+ iri_to_term . fetch ( value , value )
1145+ end
1146+
1147+ private
11591148
11601149 def uri ( value )
11611150 case value . to_s
@@ -1288,5 +1277,38 @@ def remove_base(iri)
12881277 end
12891278 iri
12901279 end
1280+
1281+ ## Used for testing
1282+ # Retrieve term mappings
1283+ #
1284+ # @return [Array<RDF::URI>]
1285+ def mappings
1286+ term_definitions . inject ( { } ) do |memo , ( t , td ) |
1287+ memo [ t ] = td ? td . id : nil
1288+ memo
1289+ end
1290+ end
1291+
1292+ ## Used for testing
1293+ # Retrieve term mapping
1294+ #
1295+ # @param [String, #to_s] term
1296+ #
1297+ # @return [RDF::URI, String]
1298+ def mapping ( term )
1299+ term_definitions [ term ] ? term_definitions [ term ] . id : nil
1300+ end
1301+
1302+ ## Used for testing
1303+ # Retrieve language mappings
1304+ #
1305+ # @return [Array<String>]
1306+ # @deprecated
1307+ def languages
1308+ term_definitions . inject ( { } ) do |memo , ( t , td ) |
1309+ memo [ t ] = td . language_mapping
1310+ memo
1311+ end
1312+ end
12911313 end
12921314end
0 commit comments