예제 #1
0
    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
예제 #2
0
    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)