app/aides/rdfapi.rb
# encoding: UTF-8
# Copyright 2011-2013 innoQ Deutschland GmbH
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
class RDFAPI
FIRST_LEVEL_OBJECT_CLASSES = [Iqvoc::Concept.base_class, Iqvoc::Collection.base_class]
SECOND_LEVEL_OBJECT_CLASSES = Iqvoc::Concept.labeling_classes.keys +
Iqvoc::Concept.note_classes +
Iqvoc::Concept.relation_classes +
Iqvoc::Concept.match_classes +
Iqvoc::Concept.notation_classes +
Iqvoc::Concept.additional_association_classes.keys +
[Iqvoc::Collection.member_class]
OBJECT_DICTIONARY = FIRST_LEVEL_OBJECT_CLASSES.inject({}) do |hash, klass|
hash["#{klass.rdf_namespace}:#{klass.rdf_class}"] = klass
hash
end
PREDICATE_DICTIONARY = SECOND_LEVEL_OBJECT_CLASSES.inject({}) do |hash, klass|
hash["#{klass.rdf_namespace}:#{klass.rdf_predicate}"] = klass
hash
end
URI_REGEXP = /^https?:\/\/[^\s]+$/
URI_LITERAL_REGEXP = /^<(https?:\/\/[^\s]+)>$/
LITERAL_REGEXP = /^"(.+)"(@(.+))?$/
BLANK_NODE_REGEXP = /^_:(.+)/
def self.devour(rdf_subject, rdf_predicate, rdf_object)
case rdf_predicate
when 'a', 'rdf:type'
case rdf_object
when String
target = OBJECT_DICTIONARY[rdf_object] || rdf_object.constantize
else
target = rdf_object
end
target.find_or_initialize_by(origin: rdf_subject)
when String
# dictionary lookup
target = PREDICATE_DICTIONARY[rdf_predicate] || rdf_predicate.constantize
target.build_from_rdf(rdf_subject, target, rdf_object)
else # is a class
rdf_predicate.build_from_rdf(rdf_subject, rdf_predicate, rdf_object)
end
end
end