{"id":15714210,"url":"https://github.com/blokhin/genealogical-trees","last_synced_at":"2025-04-14T22:09:48.988Z","repository":{"id":100839523,"uuid":"45060065","full_name":"blokhin/genealogical-trees","owner":"blokhin","description":"Semantic Web Exercise: Reasoning and Visualization of the Genealogical Ontologies","archived":false,"fork":false,"pushed_at":"2024-07-11T09:19:39.000Z","size":215,"stargazers_count":28,"open_issues_count":5,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-14T22:09:41.202Z","etag":null,"topics":["d3","family-history","gedcom","genealogical-trees","genealogy","graphs","inference","ontologies","rdflib","semantic","semantic-data","visualization"],"latest_commit_sha":null,"homepage":"https://blokhin.github.io/genealogical-trees/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blokhin.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":"2015-10-27T18:03:26.000Z","updated_at":"2025-03-12T20:24:58.000Z","dependencies_parsed_at":"2024-10-24T11:56:52.694Z","dependency_job_id":null,"html_url":"https://github.com/blokhin/genealogical-trees","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blokhin%2Fgenealogical-trees","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blokhin%2Fgenealogical-trees/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blokhin%2Fgenealogical-trees/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blokhin%2Fgenealogical-trees/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blokhin","download_url":"https://codeload.github.com/blokhin/genealogical-trees/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248968914,"owners_count":21191162,"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":["d3","family-history","gedcom","genealogical-trees","genealogy","graphs","inference","ontologies","rdflib","semantic","semantic-data","visualization"],"created_at":"2024-10-03T21:35:02.501Z","updated_at":"2025-04-14T22:09:48.965Z","avatar_url":"https://github.com/blokhin.png","language":"HTML","funding_links":[],"categories":["Other Awesome","Misc"],"sub_categories":["BBedit"],"readme":"Semantic Web Genealogical Trees\n======\n[![DOI](https://zenodo.org/badge/18811/blokhin/genealogical-trees.svg)](https://zenodo.org/badge/latestdoi/18811/blokhin/genealogical-trees)\n\nRationale\n------\n\nThis is an example of logical reasoning applied to the graphs of genealogical trees. Defining the kinship types on top of genealogical trees seems to be the perfect use case for semantic technologies.\n\nThe source of data is the GEDCOM file format (**.ged**) common for exchange of genealogical information. With the aid of **RDFLib** and **gedcom** Python libraries GEDCOM files are converted into the OWL 2 ontologies (ABox) in Turtle syntax (**.ttl** file extension), adopting the TBox of the Family History Knowledge Base ([FHKB](http://ceur-ws.org/Vol-1207/paper_11.pdf), see ```data/header.ttl``` file). Note that the FHKB ontology is although very small but uses unusually complex role hierarchy and is rather hard for modern reasoners. After reasoning with the naive Python implementation of the OWL 2 RL Profile and inferring all possible triples the ontologies are finally converted to the JSON-formatted graphs for in-browser visualization. This is done inside the bundled ```index.html``` HTML5 web-app by means of **D3.js** JavaScript library.\n\nUsing this repository\n------\n\nThe above is summarized in the ```gedcom2json.sh``` script, which is used like this:\n\n```shell\n./gedcom2json.sh path/to/your/gedcom.ged path/to/entailed_graph.json\n```\n\nResulting file ```entailed_graph.json``` is to be uploaded and visualized in the bundled HTML5 web-app ```index.html``` (no server scripting is used). Its copy is currently hosted at GitHub: [http://blokhin.github.io/genealogical-trees](http://blokhin.github.io/genealogical-trees). Locally it should be served from a web-server (e.g. ```python -m SimpleHTTPServer``` or ```php -S localhost:8000```).\n\nBefore processing, the required Python libraries listed in ```requirements.txt``` should be installed (virtualenv is highly recommended).\n\nBlog tutorial\n------\n\nhttps://blog.tilde.pro/semantic-web-technologies-on-an-example-of-family-trees-7518f3f835a9\n\nRemark on FHKB\n------\n\nNote however the [following comment](http://www.researchgate.net/publication/271131820_Manchester_Family_History_Advanced_OWL_Tutorial) from FHKB authors:\n\n\u003e We probably do not wish to drive a genealogical application using an FHKB in this form. Its purpose is educational. It touches most of OWL 2 and shows a lot of what it can do, but also a considerable amount of what it cannot do.\n\u003e As inference is maximised, the FHKB breaks most of the OWL 2 reasoners at the time of writing. However, it serves its role to teach about OWL 2.\n\u003e OWL 2 on its own and using it in this style, really does not work for family history.\n\nRemark on reasoning\n------\n\nReasoning with the naive Python implementation of the OWL 2 RL Profile is very slow and takes hours for relatively big family trees. Therefore use of the fast native reasoner (like Fact++) is very desirable. Wrapped in the [owl-cpp](http://owl-cpp.sourceforge.net) Python bindings, Fact++ performs up to two orders of magnitude faster.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblokhin%2Fgenealogical-trees","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblokhin%2Fgenealogical-trees","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblokhin%2Fgenealogical-trees/lists"}