31-01-2023 merge tra entità con prefissi diversi

Novità

  • Ho completato e testato il metodo per fondere due entità su Meta.
    • Ho verificato che lo Storer di oc_ocdm aggiorna correttamente i dati e la provenance di entità con supplier prefix diversi
  • Il generatore di CSV fonde due identificatori se hanno uguale schema e valore letterale. Questa funzione è stata testata.
  • Bugfix su oc_ocdm
    • Corretto un bug in oc_ocdm per cui le sringhe importate da Blazegraph avevano il datatype, mentre i valori creati da oc_ocdm no, per cui veniva generato un delta anche in assenza di cambiamenti.

    • Ho verificato con un test che, in caso di merge tra due entità A e B con prefissi diversi, veniva aggiornato solo l’info_file di provenance relativo al prefisso di A, sia per A che per B. Per correggere questo comportamento ho aggiunto una nuova funzione a oc_ocdm, la quale corregge il percorso dell’info_dir nel caso in cui contenga un prefisso discordante con il soggetto in considerazione.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      def _fix_info_dir(self, prov_subject: URIRef) -> None:
      if self.info_dir is None or self.info_dir == "":
      return
      if has_supplier_prefix(prov_subject, self.base_iri):
      supplier_prefix = get_prefix(prov_subject)
      info_dir_folders = os.path.normpath(self.info_dir).split(os.sep)
      info_dir_prefix = [
      folder for folder in info_dir_folders
      if folder.startswith('0') and folder.endswith('0') and folder.isdigit()][-1]
      if supplier_prefix != info_dir_prefix:
      new_info_dir = os.sep.join([folder if folder != info_dir_prefix else supplier_prefix for folder in info_dir_folders])
      self.info_dir = new_info_dir
      self.counter_handler: CounterHandler = FilesystemCounterHandler(new_info_dir)

      Questa modifica è totalmente retro-compatibile.

    • Ho creato un nuovo repo, rdflib-ocdm.

      • Classe OCDMGraph/OCDMConjunctiveGraph, eredita da rdflib.Graph/rdflib.ConjunctiveGraph e aggiunge il metodo

        1
        2
        def preexisting_finished(self):
        self.preexisting_graph = deepcopy(self)
      • Classe OCDMProvenance

        • La query di update viene generata facendo il diff tra il preexisting_graph e il grafo corrente.
      • TODO: aggiungere un metodo per fare il merge. Bisogna salvare le informazioni sulle entità fuse da riutilizzare in fase di generazione della provenance.


31-01-2023 merge tra entità con prefissi diversi
https://arcangelo7.github.io/p/15acb76e7e3246e3aea153aa6447880d/
Author
Arcangelo Massari
Posted on
January 30, 2023
Licensed under