{"id":22428023,"url":"https://github.com/vcityteam/conver-g","last_synced_at":"2026-01-02T20:02:46.973Z","repository":{"id":178350442,"uuid":"656205080","full_name":"VCityTeam/ConVer-G","owner":"VCityTeam","description":"This project aims to create a knowledge hub that can store and query a set of RDF datasets with a versioning system. The project is part of the BD team's research efforts within the LIRIS and VCity project. The aim of this POC is to query a set of city version and extract associated knowledge.","archived":false,"fork":false,"pushed_at":"2024-11-07T09:21:31.000Z","size":557,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-11-07T10:18:43.529Z","etag":null,"topics":["rdf","sparql","sql","versioning"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VCityTeam.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-20T13:13:26.000Z","updated_at":"2024-11-07T09:19:03.000Z","dependencies_parsed_at":"2023-09-26T17:03:24.636Z","dependency_job_id":"5db7fc96-c6b9-4369-84de-1c8b8c71f6fb","html_url":"https://github.com/VCityTeam/ConVer-G","commit_stats":null,"previous_names":["vcityteam/sparql-to-sql","vcityteam/conver-g"],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VCityTeam%2FConVer-G","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VCityTeam%2FConVer-G/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VCityTeam%2FConVer-G/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VCityTeam%2FConVer-G/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VCityTeam","download_url":"https://codeload.github.com/VCityTeam/ConVer-G/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228363986,"owners_count":17908319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rdf","sparql","sql","versioning"],"created_at":"2024-12-05T20:13:34.099Z","updated_at":"2026-01-02T20:02:46.967Z","avatar_url":"https://github.com/VCityTeam.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ConVer-G project\n\n\u003e Which means Concurrent Versioning of knowledge Graphs\n\nThis project aims to create a knowledge hub that can store and query a set of RDF datasets with a versioning system.\nThe project is part of the BD team's research efforts within the [LIRIS](https://liris.cnrs.fr/)\nand [VCity project](https://projet.liris.cnrs.fr/vcity/).\nThe aim of this POC is to query a set of city version and extract associated knowledge.\n\n\u003e This system has a demonstration and its code source is [available on GitHub](https://github.com/VCityTeam/UD-Demo-VCity-Knowledge_Evolution).\n\u003e An experiment on knowledge evolution with weather forecasting data is also available [on GitHub](https://github.com/VCityTeam/UD-Demo-VCity-Knowledge_Evolution/blob/JOSS-ConVer-G/Reproducibility.md).\n\n## Motivations\n\n### Why create a \"SPARQL to SQL\" translator rather than a from scratch engine?\n\nOur motivation is to find a method for *retrieving knowledge* from a *set of urban data versions* stored in *RDF\nformat*.\n\nMotivations for linking SPARQL and SQL are numerous, particularly in the fields of science, technology,\nand business, where there is a growing need to integrate increasingly diverse data sources (captors, institutions, ...).\nBy using a SPARQL to SQL translator, we can enable relational databases to be exposed on the Semantic Web and queried\nwith SPARQL *(with the same performance as with SQL?)*.\nThis allows researchers and developers to work with RDF and relational data seamlessly and efficiently while leveraging\nthe performance optimizations of existing relational databases.\n\nA *\"from scratch\"* engine that is not based on SPARQL nor SQL *would not be interoperable* with these query systems.\nIt is more simple than reimplementing the full stack (algebra, including join algorithms, optimisation, efficient\nstorage and indexing)\nand because we think that performance will be comparable to a dedicated implementation.\n\n### Why this experiment?\n\nWe want to ensure the **provenance, accuracy, efficiency, and reliability** of querying a condensed representation of\nthe various version of a dataset with regard to querying each different version represented extensionally,\nthat is understanding whether our proposal of adding to each quad the set of versions it appears in,\ninstead of representing each version as a separate dataset, leads to a more efficient way of answering queries across\nversions.\nA query-scenario of this experiment can be : *\"Which city version has the highest number of trees in the district 1?\"*\n\n### Notes\n\nUsing a SQL as a backend for SPARQL has been done in some cases.\n\n- **[A Mapping of SPARQL Onto Conventional SQL - W3C](https://www.w3.org/2008/07/MappingRules/StemMapping)**\n  This paper discusses a semantics for expressing relational data as an RDF graph and an algebra for mapping SPARQL\n  SELECT queries over that RDF to SQL queries over the original relational data.\n  The goal is to provide a specification for SPARQL tool vendors and a foundation for the Semantic Web. It highlights\n  the importance of creating a computable mapping from SPARQL semantics to SQL semantics.\n- **[Evaluating SPARQL to SQL Translation in Ontop - Free University of Bozen-Bolzano](https://www.inf.unibz.it/~calvanese/papers/rodr-etal-ORE-2013.pdf)**\n  This research paper discusses the importance of mapping relational databases into RDF using the R2RML standard.\n  It mentions the research focused on translating SPARQL queries into SQL and evaluates the SPARQL to SQL translation in\n  the Ontop system.\n- **[RDF and SPARQL: Using Semantic Web Technology to Integrate the World's Data - W3C](https://www.w3.org/2007/03/VLDB/)**\n  This resource explains how RDF and SPARQL can be used to improve access to relational databases. It discusses\n  techniques for improving mappings between RDF and relational data and mentions that several query engines map SPARQL\n  queries to relational queries,\n  either by rewriting them into SQL queries or by compiling them directly into evaluation structures native to the\n  database.\n\n## Getting started\n\n### Installation\n\nThis project uses Java 21 JDK + Maven and\na [dockerized (make sure that Docker is installed too)](https://www.docker.com/) [PostgreSQL 17 database](https://www.postgresql.org/docs/17/index.html).\nIf you don't have Java 21 installed by default, I recommend that you install [SDKMAN!](https://sdkman.io/) and use this\ntool to set Java 21 as current session version.\n\n\u003e SDKMAN! is a tool for managing parallel versions of multiple Software Development Kits on most Unix based systems.\n\nOnce you have `SDKMAN!` installed, run:\n\n```shell\nsdk install java 21.0.1-amzn\nsdk use java 21.0.1-amzn\n```\n\nMake sure you have Maven installed. If you don't have Maven installed, run: `sudo apt install maven`.\n\n### Maven\n\n#### ⌛ Quads-Loader\n\nThis project:\n\n- uses the `jena-arq` library for parsing SPARQL statements in Java,\n- uses the `springdoc-openapi-starter-webmvc-ui` library to parse the Swagger API annotations and displays\n  the [swagger-ui](http://localhost:8080/swagger-ui/index.html),\n- needs a [PostgreSQL 17 database](https://www.postgresql.org/docs/17/index.html), so the `postgresql` driver is\n  installed too.\n\nThis project has been tested with:\n\n- `sonarqube`, assuring the code quality,\n- `JaCoCo`, testing the code coverage.\n\n#### 🦆 Quads-Query\n\nThis project:\n\n- uses the `jena-fuseki-server` Apache Jena Fuseki is a SPARQL server,\n- needs a [PostgreSQL 17 database](https://www.postgresql.org/docs/17/index.html) if you use this target language, so\n  the `postgresql` driver is\n  installed too.\n\nThis project has been tested with: `junit-jupiter-engine`\n\n### Start the application\n\n#### ⌛ Quads-Loader\n\n```shell\n# at the root of the project\n# starts the database declared inside the docker-compose.yml file\ndocker compose up -d\n\n# if you want to hack the import program\ncd quads-loader\n\n## wait until the PostgreSQL database is up\n## starts the Java Spring application locally (http://localhost:8080/)\njava \"-DDATASOURCE_URL=\u003curl\u003e\" \"-DDATASOURCE_USERNAME=\u003cusername\u003e\" \"-DDATASOURCE_PASSWORD=\u003cpassword\u003e\" -jar target/quads-loader-0.0.1-SNAPSHOT.jar\n```\n\n#### 🦆 Quads-Query\n\n```shell\n# at the root of the project\n# starts the database declared inside the docker-compose.yml file\ndocker compose up -d\n\n# if you want to hack the import program\ncd quads-query\n\n## wait until the PostgreSQL database is up\n# build the project\nmvn package\n\n## starts the Java Spring application locally (http://localhost:8081/)\njava \"-DDATASOURCE_URL=\u003curl\u003e\" \"-DDATASOURCE_USERNAME=\u003cusername\u003e\" \"-DDATASOURCE_PASSWORD=\u003cpassword\u003e\" ?\"-DTARGET_LANG=\u003ctarget language\u003e\" ?\"-DCONDENSED_MODE=\u003cboolean\u003e\" -jar quads-query-1.0-SNAPSHOT-jar-with-dependencies.jar\n```\n\n### Implementation\n\n#### Ontology\n\n![The graph versioning ontology](https://www.ldf.fi/service/rdf-grapher?rdf=%40prefix+vers%3A+%3Chttps%3A%2F%2Fgithub.com%2FVCityTeam%2FConVer-G%2F%3E+.%0D%0A%40prefix+rdf%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E+.%0D%0A%40prefix+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E+.%0D%0A%40prefix+purl%3A+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%3E+.%0D%0A%40prefix+prov%3A+%3Chttp%3A%2F%2Fwww.w3.org%2Fns%2Fprov%23%3E+.%0D%0A%0D%0A%3Cvers%3AVersioned-Named-Graph%3E+%3Crdf%3Atype%3E+prov%3AEntity+.%0D%0A%3Cvers%3AVersioned-Named-Graph%3E+%3Crdfs%3Acomment%3E+%22A+versioned+graph+name%22+.%0D%0A%3Cvers%3AVersioned-Named-Graph%3E+%3Crdfs%3Alabel%3E+%22Versioned+named+graph%22%40en+.%0D%0A%3Cvers%3AVersioned-Named-Graph%3E+%3Crdfs%3Alabel%3E+%22Graphe+nomm%C3%A9+versionn%C3%A9%22%40fr+.%0D%0A%0D%0A%3Cvers%3AVersioned-Named-Graph%3E+%3Cprov%3AatLocation%3E+prov%3ALocation+.%0D%0A%0D%0A%3Cvers%3AVersioned-Named-Graph%3E+%3Cprov%3AspecializationOf%3E+vers%3ANamed-Graph+.%0D%0A%3Cvers%3ANamed-Graph%3E+%3Crdf%3Atype%3E+prov%3AEntity+.%0D%0A%3Cvers%3ANamed-Graph%3E+%3Crdfs%3Acomment%3E+%22A+graph+name%22+.%0D%0A%3Cvers%3ANamed-Graph%3E+%3Crdfs%3Alabel%3E+%22Named+graph%22%40en+.%0D%0A%3Cvers%3ANamed-Graph%3E+%3Crdfs%3Alabel%3E+%22Graphe+nomm%C3%A9%22%40fr+.%0D%0A%0D%0A%3Cvers%3AVersioning%3E+%3Crdf%3Atype%3E+%3Chttp%3A%2F%2Fwww.w3.org%2F2002%2F07%2Fowl%23Ontology%3E+.%0D%0A%3Cvers%3AVersioning%3E+%3Cpurl%3Atitle%3E+%22The+graph+versioning+vocabulary%22+.%0D%0A%3Cvers%3AVersioning%3E+%3Cpurl%3Adate%3E+%222024-08-26%22+.%0D%0A%3Cvers%3AVersioning%3E+%3Cpurl%3Adescription%3E+%22RDF+schema+of+the+graph+versioning+vocabulary+terms%22+.\u0026from=ttl\u0026to=png)\n\n#### Conceptual model\n\n```mermaid\nerDiagram\n    VersionedQuad |{--|{ Version: \"bitstring index\"\n    VersionedQuad ||--|{ VersionedNamedGraph: \"(named_graph, bitstring index)\"\n    Version ||--|{ VersionedNamedGraph: \"index\"\n    VersionedQuad {\n        text subject\n        text predicate\n        text object\n        text named_graph\n        bitstring validity\n    }\n    VersionedNamedGraph {\n        text versioned_named_graph\n        int index_version\n        text named_graph\n    }\n    Version {\n        int index_version\n        text message\n        timestamptz transaction_time_start\n        timestamptz transaction_time_end\n    }\n    Metadata {\n        text subject\n        text predicate\n        text object\n    }\n```\n\n#### Entity–Relationship model\n\n```mermaid\nerDiagram\n    VersionedQuad ||--|{ ResourceOrLiteral: \"subject\"\n    VersionedQuad ||--|{ ResourceOrLiteral: \"object\"\n    VersionedQuad ||--|{ ResourceOrLiteral: \"predicate\"\n    VersionedQuad ||--|{ ResourceOrLiteral: \"named graph\"\n    VersionedNamedGraph ||--|{ ResourceOrLiteral: \"named graph\"\n    VersionedNamedGraph ||--|{ ResourceOrLiteral: \"versioned named graph\"\n    Metadata }|--|{ ResourceOrLiteral: \"subject\"\n    Metadata }|--|{ ResourceOrLiteral: \"object\"\n    Metadata }|--|{ ResourceOrLiteral: \"predicate\"\n    VersionedQuad ||--|{ VersionedNamedGraph: \"foreign key\"\n    VersionedQuad {\n        int id_subject PK, FK\n        int id_predicate PK, FK\n        int id_object PK, FK\n        int id_named_graph FK\n        bitstring validity\n    }\n    VersionedNamedGraph {\n        int id_versioned_named_graph PK, FK\n        int index_version\n        int id_named_graph FK\n    }\n    ResourceOrLiteral {\n        int id_resource_or_literal PK, FK\n        text name\n        string type \"Not null if literal\"\n    }\n    Version {\n        int index_version \"PK, (FK)\"\n        text message\n        timestamptz transaction_time_start\n        timestamptz transaction_time_end\n    }\n    Metadata {\n        int id_subject PK, FK\n        int id_predicate PK, FK\n        int id_object PK, FK\n    }\n```\n\n#### Flowcharts\n##### Translation of a SPARQL query to SQL\n\n```mermaid\nflowchart TD\n    %% Main Control Flow\n    n1([SPARQL Query]) --\u003e A(\"Compile SPARQL \u0026\u003cbr\u003eInitialize an empty SQL query\")\n    A --\u003e C(\"Get current operator from the algebraic plan\")\n    C --\u003e D{\"Is operator composite?\"}\n    \n    D -- No --\u003e n3\n    D -- Yes --\u003e E{\"Operator Type?\"}\n\n    %% Subgraphs for Operator Processing\n    subgraph s1 [Create Quad Pattern SQL Fragment]\n        direction TB\n        n3(\"Translate quads to SQL SELECT\")\n        n3 --\u003e n4(\"Filter rows based on given resources\")\n        n4 --\u003e J3(\"Add the Quad Pattern fragment to the SQL query\")\n    end\n    \n    subgraph s4 [Create Join SQL Fragment]\n        direction TB\n        F1(\"Recursively evaluate left \u0026 right parts\")\n        F1 --\u003e n13{\"Are there more\u003cbr\u003ecommon variables?\"}\n        n13 -- Yes --\u003e IE1{\"Are variable representations equal?\"}\n        IE1 -- No --\u003e Jo2(\"Unify to a lower representation\")\n        Jo2 --\u003e Jo1(\"Build join equality condition\")\n        IE1 -- Yes --\u003e Jo1\n        Jo1 --\u003e n13\n        n13 -- No --\u003e F2(\"Add the Join fragment to the SQL query\")\n    end\n    \n    subgraph s2 [Create Group SQL Fragment]\n        direction TB\n        n5{\"Is grouped variable condensed?\"}\n        n5 -- Yes --\u003e n6(\"Flatten representation\")\n        n6 --\u003e n10\n        n5 -- No --\u003e n10(\"Build aggregations\u003cbr\u003e(e.g., COUNT, SUM)\")\n        n10 --\u003e n11(\"Build GROUP BY variables\")\n        n11 --\u003e n12(\"Add the Group fragment to the SQL query\")\n    end\n\n    %% Operator Dispatcher\n    E -- OpJoin --\u003e F1\n    E -- OpGroup --\u003e n5\n    E -- ... --\u003e H(\"Process other composite operators\")\n\n    %% Final Control Flow\n    J3 --\u003e K\n    n12 --\u003e K\n    F2 --\u003e K\n    H --\u003e K{\"Are there more operators to process?\"}\n    K -- Yes --\u003e C\n    K -- No --\u003e L(\"Return the built SQL query\")\n    L --\u003e n2([SQL Query])\n```\n\n##### Query the relational database with a SPARQL query\n\n```mermaid\nflowchart BT\n    CS[Computer Scientist] --\u003e|Sends the SPARQL query to the endpoint| SE\n    SE --\u003e|Sends the quads to the Computer Scientist| CS\n    subgraph Server\n        SE --\u003e|Sends the SPARQL query for translation| ARQ[SPARQL to SQL translator]\n        ARQ --\u003e|Sends the SQL translated query to JDBC| JDBC[Java Database Connectivity]\n        JDBC --\u003e|The filtered quads| ARQ\n        ARQ --\u003e|The filtered quads| SE\n\n    end\n    subgraph Database\n        JDBC --\u003e|Sends the SQL query to the database| DB[PostgreSQL]\n        DB --\u003e|Sends the result of the SQL query| JDBC\n    end\n```\n\n##### Store RDF quads inside a relational database\n\n```mermaid\nflowchart TB\n    CS[Computer Scientist] --\u003e|Sends the files to the import endpoint| SE\n    SE --\u003e|Returns the version number via HTTP| CS\n    \n    subgraph Server\n        SE --\u003e|Sends files to import| RIOT[Jena RIOT]\n        RIOT --\u003e|Send the quads for insertion| JDBC[Java Database Connectivity]\n        \n        JDBC --\u003e|Sends the version number| SE\n    end\n    \n    subgraph Database\n        JDBC --\u003e|Sends the SQL query to the database| DB[PostgreSQL]\n        DB --\u003e|Sends the version information| JDBC\n    end\n```\n\n### Testing\n\n#### Swagger\n\nThe API description is available on the [swagger-ui](http://localhost:8080/swagger-ui/index.html) at runtime.\n\n#### Tests\n\n```shell\n# make sure your database is up\n\n# starts the tests\nmvn spring-boot:run test\n```\n\n#### Code quality and coverage\n\nThe code coverage and quality is available on the [Sonarqube server](http://localhost:9000) after running a sonar\ninspection.\n\n### Sample data and workflow\n\nThis project has been tested with a dataset created by the [UD-Graph Project](https://github.com/VCityTeam/UD-Graph).\nThis dataset as been transformed to be compatible with the designed conceptual model.\n\n```mermaid\nsequenceDiagram\n    title Transformation, Import and query workflow\n    autonumber\n\n    participant BSBM\n    participant Annotation\n\n    System -\u003e\u003e+ BSBM: Ask for a set of versions\n    BSBM -\u003e\u003e- System: Generate a set of versions\n\n    loop For each generated version\n        System -\u003e\u003e+ Annotation: Send the versionable data to annotate\n        Annotation -\u003e\u003e- System: The annotated data with the version index\n        System -\u003e\u003e+ Annotation: Send the versionable data to annotate\n        Annotation -\u003e\u003e- System: The annotated data with the graph name\n    end\n    \n    participant Triple store\n\n    loop For each Annotated version\n        System -\u003e\u003e+ QuaDer: Sends the version to import\n        QuaDer -\u003e\u003e+ Database: Inserts the version\n        Database -\u003e\u003e- QuaDer: Returns the insert status\n        QuaDer -\u003e\u003e- System: Returns the version index\n        \n        System -\u003e\u003e+ Triple store: Sends the version to import\n        Triple store -\u003e\u003e- System: Returns the insert status\n    end\n    \n    System -\u003e\u003e+ Triple store: Sends the theoretical annotations to import\n    Triple store -\u003e\u003e- System: Returns the insert status\n    \n    box QuaQue\n        participant SPARQL-SQL translator\n        participant SPARQL API\n    end\n    \n    actor User client\n    \n    User client -\u003e\u003e+ SPARQL API: Sends a SPARQL query\n    SPARQL API -\u003e\u003e+ SPARQL-SQL translator: Translates the SPARQL query\n    SPARQL-SQL translator -\u003e\u003e- SPARQL API: Returns the SQL query\n    SPARQL API -\u003e\u003e+ Database: Sends the SQL query\n    Database -\u003e\u003e- SPARQL API: Returns the queried result\n    SPARQL API -\u003e\u003e- User client: Returns the result\n```\n\nThe workflows have been moved inside the [UD-knowledge-evolution-experiment](https://github.com/VCityTeam/UD-knowledge-evolution-experiment) repository.\n\n#### Entity linking\n\nBefore importing the dataset inside the triple store and the relational database, we transform the data to match the\ntheoretical model and the implementation.\n\n##### Contextualization\n\nWe add a quad for each triple (the graph name).\nIts semantic is the link between the triple and the source of the data.\nThe transformation has been made with the [annotate program](quads-creator).\nLet's assume that we have a dataset with 2 versions with the following quads:\n\n**Version 1 (buildings-2015.trig):**\n\n| Subject                       | Predicate | Object | Named Graph                               |\n| ----------------------------- | --------- | ------ | ----------------------------------------- |\n| http://example.edu/Building#1 | height    | 10.5   | http://example.edu/Named-Graph#Grand-Lyon |\n| http://example.edu/Building#2 | height    | 9.1    | http://example.edu/Named-Graph#Grand-Lyon |\n| http://example.edu/Building#1 | height    | 11     | http://example.edu/Named-Graph#IGN        |\n\n**Version 2 (buildings-2018.trig):**\n\n| Subject                       | Predicate | Object | Named Graph                               |\n| ----------------------------- | --------- | ------ | ----------------------------------------- |\n| http://example.edu/Building#1 | height    | 10.5   | http://example.edu/Named-Graph#IGN        |\n| http://example.edu/Building#1 | height    | 10.5   | http://example.edu/Named-Graph#Grand-Lyon |\n| http://example.edu/Building#3 | height    | 15     | http://example.edu/Named-Graph#Grand-Lyon |\n\n##### Theoretical model\n\nAfter some transformations, we have the following quads representing the theoretical model:\n\n| Subject                                                              | Predicate                                  | Object                                    | Named Graph                                                          |\n| -------------------------------------------------------------------- | ------------------------------------------ | ----------------------------------------- | -------------------------------------------------------------------- |\n| http://example.edu/Building#1                                        | height                                     | 10.5                                      | https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-1 |\n| http://example.edu/Building#2                                        | height                                     | 9.1                                       | https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-1 |\n| http://example.edu/Building#1                                        | height                                     | 11                                        | https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-2 |\n| https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-1 | http://www.w3.org/ns/prov#specializationOf | http://example.edu/Named-Graph#Grand-Lyon |                                                                      |\n| https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-1 | http://www.w3.org/ns/prov#atLocation       | buildings-2015                            |                                                                      |\n| https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-2 | http://www.w3.org/ns/prov#specializationOf | http://example.edu/Named-Graph#IGN        |                                                                      |\n| https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-2 | http://www.w3.org/ns/prov#atLocation       | buildings-2015                            |                                                                      |\n| http://example.edu/Building#1                                        | height                                     | 10.5                                      | https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-3 |\n| http://example.edu/Building#3                                        | height                                     | 15                                        | https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-3 |\n| http://example.edu/Building#1                                        | height                                     | 10.5                                      | https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-4 |\n| https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-3 | http://www.w3.org/ns/prov#specializationOf | http://example.edu/Named-Graph#Grand-Lyon |                                                                      |\n| https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-3 | http://www.w3.org/ns/prov#atLocation       | buildings-2018                            |                                                                      |\n| https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-4 | http://www.w3.org/ns/prov#specializationOf | http://example.edu/Named-Graph#IGN        |                                                                      |\n| https://github.com/VCityTeam/ConVer-G/Versioned-Named-Graph#sha256-4 | http://www.w3.org/ns/prov#atLocation       | buildings-2018                            |                                                                      |\n\n##### Implementation\n\nAfter the import inside the relational database, we have the following quads representing the implementation:\n\n| Subject                       | Predicate | Object | Named Graph                               | Validity |\n| ----------------------------- | --------- | ------ | ----------------------------------------- | -------- |\n| http://example.edu/Building#1 | height    | 10.5   | http://example.edu/Named-Graph#Grand-Lyon | 11       |\n| http://example.edu/Building#2 | height    | 9.1    | http://example.edu/Named-Graph#Grand-Lyon | 10       |\n| http://example.edu/Building#1 | height    | 11     | http://example.edu/Named-Graph#IGN        | 10       |\n| http://example.edu/Building#1 | height    | 10.5   | http://example.edu/Named-Graph#IGN        | 01       |\n| http://example.edu/Building#3 | height    | 15     | http://example.edu/Named-Graph#Grand-Lyon | 01       |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvcityteam%2Fconver-g","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvcityteam%2Fconver-g","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvcityteam%2Fconver-g/lists"}