def _get_lines_dbpedia_instance_transitive_caligraph_types(graph) -> list: """Serialize transitive CaLiGraph types for DBpedia resources.""" instance_transitive_clg_types = [] caligraph_ancestors = defaultdict(set) for n in graph.traverse_nodes_topdown(): parents = graph.parents(n) caligraph_ancestors[n] = parents | { a for p in parents for a in caligraph_ancestors[p] } for res in graph.get_all_resources(): dbp_res = clg_util.clg_resource2dbp_resource(res) if dbp_res not in dbp_store.get_resources(): continue types = graph.get_nodes_for_resource(res) direct_types = types.difference( {a for t in types for a in caligraph_ancestors[t]}) transitive_types = { tt for t in direct_types for tt in graph.ancestors(t) }.difference(direct_types | {rdf_util.CLASS_OWL_THING}) instance_transitive_clg_types.extend([ serialize_util.as_object_triple(dbp_res, rdf_util.PREDICATE_TYPE, tt) for tt in transitive_types ]) return instance_transitive_clg_types
def _get_lines_dbpedia_instance_relations(graph) -> list: """Serialize new facts for DBpedia resources in DBpedia namespace.""" new_instance_relations = set() for node in graph.nodes: for prop, val in graph.get_axioms(node): dbp_prop = clg_util.clg_type2dbp_type(prop) dbp_val = clg_util.clg_resource2dbp_resource( val) if clg_util.is_clg_resource(val) else val for res in graph.get_resources(node): dbp_res = clg_util.clg_resource2dbp_resource(res) if dbp_res not in dbp_store.get_resources( ) or dbp_prop not in dbp_store.get_properties( dbp_res) or dbp_val not in dbp_store.get_properties( dbp_res)[dbp_prop]: new_instance_relations.add((dbp_res, dbp_prop, dbp_val)) lines_dbpedia_instance_relations = [] for s, p, o in new_instance_relations: if dbp_util.is_dbp_resource(o): lines_dbpedia_instance_relations.append( serialize_util.as_object_triple(s, p, o)) else: lines_dbpedia_instance_relations.append( serialize_util.as_literal_triple(s, p, o)) return lines_dbpedia_instance_relations
def _get_lines_instances_dbpedia_mapping(graph) -> list: """Serialize DBpedia mapping for resources.""" lines_instances_dbpedia_mapping = [] axiom_resources = { ax[1] for n in graph.nodes for ax in graph.get_axioms(n, transitive=False) if clg_util.is_clg_resource(ax[1]) } for res in graph.get_all_resources() | axiom_resources: equivalent_res = clg_util.clg_resource2dbp_resource(res) if equivalent_res in dbp_store.get_resources(): lines_instances_dbpedia_mapping.append( serialize_util.as_object_triple(res, rdf_util.PREDICATE_SAME_AS, equivalent_res)) return lines_instances_dbpedia_mapping
def _get_lines_dbpedia_instances(graph) -> list: """Serialize new DBpedia resources in DBpedia namespace.""" lines_dbpedia_instances = [] new_instances = { clg_util.clg_resource2dbp_resource(res) for res in graph.get_all_resources() }.difference(dbp_store.get_resources()) for inst in new_instances: lines_dbpedia_instances.append( serialize_util.as_object_triple( inst, rdf_util.PREDICATE_TYPE, rdf_util.CLASS_OWL_NAMED_INDIVIDUAL)) label = graph.get_label(clg_util.dbp_resource2clg_resource(inst)) if label: lines_dbpedia_instances.append( serialize_util.as_literal_triple(inst, rdf_util.PREDICATE_LABEL, label)) return lines_dbpedia_instances
def _get_lines_dbpedia_instance_types(graph) -> list: """Serialize new types for DBpedia resources in DBpedia namespace.""" new_dbpedia_types = defaultdict(set) for node in graph.nodes: node_types = graph.get_transitive_dbpedia_types(node, force_recompute=True) transitive_node_types = { tt for t in node_types for tt in dbp_store.get_transitive_supertype_closure(t) }.difference({rdf_util.CLASS_OWL_THING}) for res in graph.get_resources(node): dbp_res = clg_util.clg_resource2dbp_resource(res) if dbp_res in dbp_store.get_resources(): new_dbpedia_types[dbp_res].update( transitive_node_types.difference( dbp_store.get_transitive_types(dbp_res))) else: new_dbpedia_types[dbp_res].update(transitive_node_types) return [ serialize_util.as_object_triple(res, rdf_util.PREDICATE_TYPE, t) for res, types in new_dbpedia_types.items() for t in types ]