{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Utilities to read/write csv files\n", "import csv\n", "# Utilities to handle character encodings\n", "import unicodedata\n", "# Ordered Dicts\n", "from collections import OrderedDict\n", "\n", "import json\n", "\n", "\n", "# OPZIONAL IMPORTS\n", "\n", "# For timestamping/simple speed tests\n", "from datetime import datetime\n", "# Random number generator\n", "from random import *\n", "# System & command line utilities\n", "import sys\n", "# Json for the dictionary\n", "import json" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import_dir = '/Users/federicaspinelli/Google Drive/OVI-CNR/CSV/corali/'\n", "export_dir = '/Users/federicaspinelli/Google Drive/OVI-CNR/RDF/corali/'" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Custom class to store URIs + related infos for the ontologies/repositories\n", "\n", "class RDFcoords:\n", " def __init__(self, uri, prefix, code = None):\n", " self.uri = uri\n", " self.prefix = prefix\n", " self.code = code\n", "\n", "\n", "# Repositories\n", "datiniCoords = RDFcoords('', 'dt:')\n", "personAuthCoords = RDFcoords('', 'pa:')\n", "# W3/CIDOC Predicates\n", "hasTypeCoords = RDFcoords('', 'tp:')\n", "hasTypePCoords = RDFcoords('', 'te:')\n", "carriesCoords = RDFcoords('', 'ca:')\n", "identifiedByCoords = RDFcoords('', 'ib:')\n", "labelCoords = RDFcoords('', 'lb:')\n", "wasBroughtCoords = RDFcoords('', 'wb:')\n", "carriedByCoords = RDFcoords('', 'cb:')\n", "hasCurrentPermanentLocationCoords = RDFcoords('', 'ap:')\n", "placeCoords = RDFcoords('', 'pl:', 'E53')\n", "hasTimeSpanCoords = RDFcoords('', 'hs:')\n", "hasNoteCoords = RDFcoords('', 'no:')\n", "hasCurrentOwnerCoords = RDFcoords('', 'ow:')\n", "\n", "# CIDOC Objects\n", "manMadeObjectCoords = RDFcoords('', 'mo:', 'E22')\n", "informationObjectCoords = RDFcoords('', 'io:', 'E73')\n", "titleCoords = RDFcoords('', 'ti:' ,'E35')\n", "placeAppellationCoords = RDFcoords('', 'pa:', 'E44')\n", "identifierCoords = RDFcoords('', 'id:', 'E42')\n", "typeCoords = RDFcoords('', 'ty:', 'E55')\n", "creationCoords = RDFcoords('', 'cr:', 'E65')\n", "personCoords = RDFcoords('', 'ps:', 'E21')\n", "timeSpanCoords = RDFcoords('', 'ts:', 'E52')\n", "stringCoords = RDFcoords('', 'st:', 'E62')\n", "tookPlaceCoords = RDFcoords('', 'tk:')\n", "carriedByCoords = RDFcoords('', 'cb:')\n", "consistCoords = RDFcoords('', 'cf:')\n", "cidocCoords = RDFcoords('', 'crm:')\n", "schemaCoords = RDFcoords('', 'schema:')\n", "personCoords = RDFcoords('', 'person:')\n", "nsCoords = RDFcoords('', 'rdf:')\n", "materialCoords = RDFcoords('', 'mt:', 'E57')\n", "composedCoords = RDFcoords('', 'cmp:')\n", "dimensionsCoords = RDFcoords('', 'dm:', 'E54')\n", "hasDimensionsCoords = RDFcoords('', 'hd:')\n", "hasConditionCoords = RDFcoords('', 'hc:')\n", "conditionCoords = RDFcoords('', 'cs:', 'E3')\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Basic functions for triples / shortened triples in TTL format\n", "\n", "def triple(subject, predicate, object1):\n", " line = subject + ' ' + predicate + ' ' + object1\n", " return line\n", "\n", "def doublet(predicate, object1):\n", " line = ' ' + predicate + ' ' + object1\n", " return line\n", "\n", "def singlet(object1):\n", " line = ' ' + object1\n", " return line\n", "\n", "# Line endings in TTL format\n", "continueLine1 = ' ;\\n'\n", "continueLine2 = ' ,\\n'\n", "closeLine = ' .\\n'" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def writeTTLHeader(output):\n", " output.write('@prefix ' + datiniCoords.prefix + ' ' + datiniCoords.uri + closeLine)\n", " output.write('@prefix ' + personAuthCoords.prefix + ' ' + personAuthCoords.uri + closeLine)\n", " output.write('@prefix ' + hasTypeCoords.prefix + ' ' + hasTypeCoords.uri + closeLine)\n", " output.write('@prefix ' + hasTypePCoords.prefix + ' ' + hasTypePCoords.uri + closeLine)\n", " output.write('@prefix ' + manMadeObjectCoords.prefix + ' ' + manMadeObjectCoords.uri + closeLine)\n", " output.write('@prefix ' + carriesCoords.prefix + ' ' + carriesCoords.uri + closeLine)\n", " output.write('@prefix ' + informationObjectCoords.prefix + ' ' + informationObjectCoords.uri + closeLine)\n", " output.write('@prefix ' + identifiedByCoords.prefix + ' ' + identifiedByCoords.uri + closeLine)\n", " output.write('@prefix ' + titleCoords.prefix + ' ' + titleCoords.uri + closeLine)\n", " output.write('@prefix ' + labelCoords.prefix + ' ' + labelCoords.uri + closeLine)\n", " output.write('@prefix ' + identifierCoords.prefix + ' ' + identifierCoords.uri + closeLine)\n", " output.write('@prefix ' + wasBroughtCoords.prefix + ' ' + wasBroughtCoords.uri + closeLine)\n", " output.write('@prefix ' + typeCoords.prefix + ' ' + typeCoords.uri + closeLine)\n", " output.write('@prefix ' + carriedByCoords.prefix + ' ' + carriedByCoords.uri + closeLine)\n", " output.write('@prefix ' + personCoords.prefix + ' ' + personCoords.uri + closeLine)\n", " output.write('@prefix ' + hasCurrentPermanentLocationCoords.prefix + ' ' + hasCurrentPermanentLocationCoords.uri + closeLine)\n", " output.write('@prefix ' + placeCoords.prefix + ' ' + placeCoords.uri + closeLine)\n", " output.write('@prefix ' + hasTimeSpanCoords.prefix + ' ' + hasTimeSpanCoords.uri + closeLine)\n", " output.write('@prefix ' + timeSpanCoords.prefix + ' ' + timeSpanCoords.uri + closeLine)\n", " output.write('@prefix ' + hasNoteCoords.prefix + ' ' + hasNoteCoords.uri + closeLine)\n", " output.write('@prefix ' + stringCoords.prefix + ' ' + stringCoords.uri + closeLine)\n", " output.write('@prefix ' + tookPlaceCoords.prefix + ' ' + tookPlaceCoords.uri + closeLine) \n", " output.write('@prefix ' + carriedByCoords.prefix + ' ' + carriedByCoords.uri + closeLine)\n", " output.write('@prefix ' + consistCoords.prefix + ' ' + consistCoords.uri + closeLine)\n", " output.write('@prefix ' + cidocCoords.prefix + ' ' + cidocCoords.uri + closeLine)\n", " output.write('@prefix ' + schemaCoords.prefix + ' ' + schemaCoords.uri + closeLine)\n", " output.write('@prefix ' + materialCoords.prefix + ' ' + materialCoords.uri + closeLine)\n", " output.write('@prefix ' + creationCoords.prefix + ' ' + creationCoords.uri + closeLine)\n", " output.write('@prefix ' + composedCoords.prefix + ' ' + composedCoords.uri + closeLine)\n", " output.write('@prefix ' + dimensionsCoords.prefix + ' ' + dimensionsCoords.uri + closeLine)\n", " output.write('@prefix ' + hasDimensionsCoords.prefix + ' ' + hasDimensionsCoords.uri + closeLine)\n", " output.write('@prefix ' + hasCurrentOwnerCoords.prefix + ' ' + hasCurrentOwnerCoords.uri + closeLine)\n", " output.write('@prefix ' + hasConditionCoords.prefix + ' ' + hasConditionCoords.uri + closeLine)\n", " output.write('@prefix ' + conditionCoords.prefix + ' ' + conditionCoords.uri + closeLine)\n", " output.write('\\n')\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [] }, "outputs": [ { "ename": "NameError", "evalue": "name 'e73placeHolder' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/var/folders/_n/1ldwyw1s547dcpvn3485fr7r0000gn/T/ipykernel_16200/872495697.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;31m# E25 Title\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0me35placeHolder\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 26\u001b[0;31m \u001b[0mline\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtriple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me73placeHolder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0midentifiedByCoords\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprefix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0me35placeHolder\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mcloseLine\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 27\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mline\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mline\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtriple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me35placeHolder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhasTypeCoords\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprefix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtitleCoords\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprefix\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mcloseLine\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'e73placeHolder' is not defined" ] } ], "source": [ "filePrefix = 'data_'\n", "fileType = 'maxref'\n", "max_entries = 100000000\n", "\n", "with open(import_dir + filePrefix + fileType + '.csv', newline=\"\") as csv_file, open(export_dir + filePrefix + fileType + 'min.ttl', 'w') as output:\n", " reader = csv.DictReader(csv_file)\n", " writeTTLHeader(output)\n", " first = True\n", " ii = 0\n", " for row in reader:\n", " # The index ii is used to process a limited number of entries for testing purposes\n", " ii = ii+1\n", " if (row['ID'] != ''): \n", " e73placeHolder = \"\"\n", " \n", " e25mplaceHolder = \"\"\n", " # E42 Identifier\n", " e22placeHolder = \"\"\n", " e42placeHolder = \"\"\n", " #line = triple(e25mplaceHolder, identifiedByCoords.prefix, e42placeHolder) + closeLine\n", " #output.write(line)\n", " #line = triple(e42placeHolder, hasTypeCoords.prefix, identifierCoords.prefix) + closeLine\n", " #output.write(line)\n", " #line = triple(e42placeHolder, labelCoords.prefix, '\\\"Historiated initial S from a Gradual\\\"') + closeLine\n", " #output.write(line)\n", " # E25 Title\n", " e35placeHolder = \"\"\n", " line = triple(e73placeHolder, identifiedByCoords.prefix, e35placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(e35placeHolder, hasTypeCoords.prefix, titleCoords.prefix) + closeLine\n", " output.write(line)\n", " line = triple(e35placeHolder, labelCoords.prefix, '\\\"Presentation in the Temple\\\"') + closeLine\n", " output.write(line)\n", " line = triple(e35placeHolder, '', '\\\"Marlay cutting It. 13A\\\"') + closeLine\n", " output.write(line)\n", " e57placeHolder = \"\" \n", " line = triple(e25mplaceHolder, consistCoords.prefix, e57placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(e57placeHolder, hasTypeCoords.prefix, materialCoords.prefix) + closeLine\n", " output.write(line)\n", " line = triple(e57placeHolder, labelCoords.prefix, '\\\"Parchment, mounted on cardboard\\\"') + closeLine\n", " output.write(line)\n", " line = triple(consistCoords.prefix, labelCoords.prefix, '\\\"consist of\\\"') + closeLine\n", " output.write(line)\n", " # E73 Information Object\n", " line = triple(e25mplaceHolder, carriesCoords.prefix, e73placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(e73placeHolder, hasTypeCoords.prefix, informationObjectCoords.prefix) + closeLine\n", " output.write(line)\n", " line = triple(e73placeHolder, labelCoords.prefix, '\\\"Information object: Presentation in the Temple\\\"') + closeLine\n", " output.write(line)\n", " # E65 Creation\n", " e65placeHolder = \"\"\n", " line = triple(e73placeHolder, wasBroughtCoords.prefix, e65placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(e65placeHolder, hasTypeCoords.prefix, creationCoords.prefix) + closeLine\n", " output.write(line)\n", " line = triple(e65placeHolder, labelCoords.prefix, '\\\"Creation of Presentation in the Temple\\\"') + closeLine\n", " output.write(line)\n", " # E52 \n", " e52placeHolder = \"\"\n", " line = triple(e65placeHolder, hasTimeSpanCoords.prefix, e52placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(e52placeHolder, hasTypeCoords.prefix, timeSpanCoords.prefix) + closeLine\n", " output.write(line)\n", " line = triple(e52placeHolder, labelCoords.prefix, '\\\"1370-1375\\\"') + closeLine\n", " output.write(line)\n", " PC14placeHolder = \"\" \n", " e39placeHolder = \"\"\n", " line = triple(e65placeHolder, '', PC14placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(PC14placeHolder, labelCoords.prefix, \"\\\"Author of the creation\\\"\") + closeLine\n", " output.write(line)\n", " line = triple(PC14placeHolder, hasTypeCoords.prefix, '') + closeLine\n", " output.write(line)\n", " line = triple(PC14placeHolder, '', e39placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(e39placeHolder, labelCoords.prefix, \"\\\"Don Silvestro dei Gherarducci\\\"\") + closeLine\n", " output.write(line)\n", " e39placeHolder2=\"\"\n", " line = triple(e39placeHolder, '', e39placeHolder2) + closeLine\n", " output.write(line)\n", " line = triple(e39placeHolder2, labelCoords.prefix, \"\\\"Silvestro dei Gherarducci\\\"\") + closeLine\n", " output.write(line)\n", " E55placeHolder = \"\"\n", " line = triple(PC14placeHolder, '', E55placeHolder) + closeLine\n", " line = triple(E55placeHolder, hasTypeCoords.prefix, '') + closeLine\n", " output.write(line)\n", " line = triple(E55placeHolder, labelCoords.prefix, \"\\\"Author\\\"\" ) + closeLine\n", " output.write(line)\n", " e53placeHolder = \"\"\n", " line = triple(e65placeHolder, tookPlaceCoords.prefix, e53placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(e53placeHolder, hasTypeCoords.prefix, placeCoords.prefix) + closeLine\n", " output.write(line)\n", " line = triple(e53placeHolder, labelCoords.prefix, '\\\"Florence\\\"') + closeLine\n", " output.write(line)\n", " e55placeHolder = \"\"\n", " line = triple(e53placeHolder, hasTypePCoords.prefix, e55placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(e55placeHolder, labelCoords.prefix, '\\\"Origin\\\"') + closeLine\n", " output.write(line)\n", " line = triple(e73placeHolder, '', '\\\"The initial S introduced the Mass for the feast of the Purification of the Virgin (2 February) in Corale 2, a Gradual made for the monastery of Santa Maria degli Angeli in Florence in 1370-1375. As in many medieval and Renaissance images, the Purification of the Virgin, indicated by the white dove in Joseph’s hands, is conflated with the Circumcision of Christ. Mary and Joseph have entrusted the infant Christ to Simeon and Anna, while the priest behind, knife in hand, is ready to perform the circumcision. Painted by Don Silvestro dei Gherarducci, the image reveals his debt to Sienese painting. The model for the composition is Ambrogio Lorenzetti’s eponymous altarpiece completed in 1342 for the Crescentius Chapel in Siena Cathedral (now in the Uffizi, Florence). The tiled floor imparts a sense of depth to the pictorial space. The intricate designs on the haloes, each displaying a different pattern, emulate the innovative punchwork of Sienese artists from the early 1300s. Three different blue pigments were used in this image: most blue areas were painted with ultramarine, occasionally shaded with an organic red dye which yields a purplish hue, visible in the temple’s walls and in the folds of Anna’s mantle. Ultramarine was also used for the blue leaves in the border, but azurite was added in the dark blue areas, and the leaves were outlined with indigo.\\\"') + closeLine\n", " output.write(line)\n", " # E54\n", " e54placeHolder = \"\"\n", " line = triple(e25mplaceHolder, hasDimensionsCoords.prefix, e54placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(e54placeHolder, hasTypeCoords.prefix, dimensionsCoords.prefix) + closeLine\n", " output.write(line)\n", " line = triple(e54placeHolder, labelCoords.prefix, '\\\"300 x 270 mm\\\"') + closeLine\n", " output.write(line)\n", " # E22 - P52 - E74\n", " E74placeHolder = ''\n", " line = triple(e25mplaceHolder, '', E74placeHolder) + closeLine\n", " output.write(line)\n", " line = triple(E74placeHolder, labelCoords.prefix, \"\\\"Fitzwilliam Museum, University of Cambridge\\\"\") + closeLine\n", " output.write(line)\n", " \n", " output.write('\\n')\n", " # Limit number of entries processed (if desired)\n", " if(ii>max_entries):\n", " break" ] } ], "metadata": { "interpreter": { "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" }, "kernelspec": { "display_name": "Python 3.9.0 64-bit", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.0" }, "metadata": { "interpreter": { "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" } } }, "nbformat": 4, "nbformat_minor": 2 }