def parse_source_into_vocabulary(self, source: Source, vocabulary: Vocabulary) -> bool: """ Parse a Source into the given vocabulary Args: source (Source) vocabulary (Vocabulary) Returns: bool, True if success, False if Error occurred, as an invalid File """ # if this is the predefined source don't parse it, just pretend it # was successful if source.predefined: return True voc_builder = VocabularyBuilder(vocabulary=vocabulary) g = rdflib.Graph() # format = rdflib.util.guess_format(source.source_path) voc_builder.add_source(source) voc_builder.set_current_source(source.id) g.parse(data=source.content, format="turtle") ontology_nodes = list( g.subjects(object=rdflib.term.URIRef( "http://www.w3.org/2002/07/owl#Ontology"), predicate=rdflib.term.URIRef(Tags.rdf_type.value))) # a source may have no ontology iri defined # if wanted on this place more info about the ontology can be extracted if len(ontology_nodes) > 0: source.ontology_iri = get_iri_from_uriref(ontology_nodes[0]) self.current_source = source self._parse_to_vocabulary(g, voc_builder) return True
def post_process_vocabulary(cls, vocabulary: Vocabulary, old_vocabulary: Optional[Vocabulary] = None): """Main methode to be called for post processing Args: vocabulary (Vocabulary): Freshly parsed Vocabulary old_vocabulary (Vocabulary): Existing Vocabulary of which the settings should be overtaken Returns: None """ # all methods have to reset the state that they are editing first. # consecutive calls of post_process_vocabulary need to have the same # result voc_builder = VocabularyBuilder(vocabulary=vocabulary) cls._set_labels(voc_builder) cls._add_predefined_source(voc_builder) cls._add_predefined_datatypes(voc_builder) cls._add_owl_thing(voc_builder) cls._remove_duplicate_parents(voc_builder) cls._log_and_clear_dependencies(voc_builder) cls._compute_ancestor_classes(voc_builder) cls._compute_child_classes(voc_builder) cls._combine_relations(voc_builder) if old_vocabulary is not None: cls.transfer_settings(new_vocabulary=vocabulary, old_vocabulary=old_vocabulary) cls._apply_vocabulary_settings(voc_builder) cls._ensure_parent_class(voc_builder) cls._sort_relations(voc_builder) cls._mirror_object_property_inverses(voc_builder) cls._save_initial_label_summary(vocabulary)