DOI: 10.5281/zenodo.16905198
title: MSR-2026-Mining-Challenge-Proposal

description: This repository provides the dataset used for the MSR-Mining Challenge Proposal.

 

This repository consists of 59,278 Ecore Files that were mined from GitHub. In total, we collected 86,827 committed Ecore versions from 3537 GitHub repositories.

These files can be found in metamodels.zip. The files are stored in the hierarchy found in the GitHub repository, where the _number at the end of the filename describes the version number, e.g., example_1.ecore was the first commit of this file. 

 

Furthermore, we also provide a database that stores the metamodels and their versions in a more organised manner. Furthermore, it also contains additional information about the version commits. 

Below is an excerpt of the datastructure:

Table metamodels: Contains all the found metamodel. It has the following rows:




Column
Data Type
Descripton


file_name            
text
the name of the file


file_path
text
the path of the file in the repository


file_sha
text
the sha of the file


file_html_url
text
the link to the file


repository_id
bigint
the identifier of the repository where the metamodel is stored


repository_name
text
the name of the repository


reposiotry_full_name
text
 


reposiotry_html_url
text
the link to the repository


owner_name
text
the name of the owner


owner_id
bigint
the id of the owner




The primariy keys are repository_id, file_html_url

Table versions: contains all the commits of the previously found metamodels. It consists of the following rows:




Column
Data Type
Descripton


file_html_url
text
the link to the file


 commits_html_url
text
the link to the commit


 repository_id  
bigint
the repository id


commit_author_name
text
the commit author name


commit_author_email
text
the commit author email


commit_author_date
timestamp
the commit date


commit_committer_name
text
the commiter name


commit_committer_email
text
the commiter email


commit_committer_date
timestamp
the commiter date


 commit_message
text
the commit message


content                
text
the content of the metamodel


size                  
bigint
the size in number of characters


nrclasses              
bigint
the number of classifiers found in the metamodel


nrattributes          
bigint
the number of attributes found in the metamodel


nrreferences          
bigint
the number of references found in the metamodel


nrcontainment          
bigint
the number of containments found in the metamodel


nropposite            
bigint
the number of opposites found in the metamodel


loc                    
bigint
the number of code line found in the metamodel




The primary key is : commits_html_url and there is a reference to models via FOREIGN KEY (repository_id, file_html_url) REFERENCES metamodels(repository_id, file_html_url) ON DELETE CASCADE

This repository consists of the following components:



restore.sql /3382.dat /3381.dat / toc.dat: Contains the files to restore the database with the stored metamodels.

metamodels.zip: contains the metamodels and their versions which we mined from git

EMFAnalyzer.zip: contains the simiple tool where we did a primilary analysis of the metamodels. 

datastructure.txt: contains the datastructure of the tables

metamodels.tar: A docker container that will setup a database


The mining was performed on a Windows 11 Server, where we stored the found entries on a Postgres 17 Database.

To restore the database, just run the SQL script.  Note:  The following two lines of code have to be adapted:



COPY public.metamodels (file_name, file_path, file_sha, file_html_url, repository_id, repository_name, repository_full_name, repository_html_url, owner_name, owner_id) FROM '$$PATH$$/3382.dat';

and



COPY public.versions (file_html_url, commits_html_url, repository_id, commit_author_name, commit_author_email, commit_author_date, commit_committer_name, commit_committer_email, commit_committer_date, commit_message, sha, author_login, author_id, author_html_url, committer_login, committer_id, committer_html_url, content, size, nrclasses, nrattributes, nrreferences, nrcontainment, nropposite, loc) FROM '$$PATH$$/3381.dat';

 


Here you have to change the $$PATH$$ to the location where both files are stored. Furthermore, if the files are located client-side, you have to change COPY to \COPY so that the local file is used when connecting to the server.



 





\COPY public.versions (file_html_url, commits_html_url, repository_id, commit_author_name, commit_author_email, commit_author_date, commit_committer_name, commit_committer_email, commit_committer_date, commit_message, sha, author_login, author_id, author_html_url, committer_login, committer_id, committer_html_url, content, size, nrclasses, nrattributes, nrreferences, nrcontainment, nropposite, loc) FROM '$$PATH$$/3381.dat';

 


On Windows, you can set up the database by calling:

 

.\psql.exe -U postgres -d template1 -f 'restore.sql'

 



-U is the user who connects to the database

-d is just a placeholder database since the SQL script creates the database with the content

-f is the filepath to the SQL script


 

Afterwards, you can connect to the database by calling:

 

.\psql.exe -U postgres -d metamodels 

 





-U is the user who connects to the database

-d is the database to connect to. The script creates a database called metamodels


Otherwise you can setup the database via the provided docker container file: 

First load the image by calling :

docker image load -i ./metamodels.tar

Next run a container for the loaded image : 

sudo docker run --name <containerName> jkumining:psql

where <containerName> is the name of the container you want it to give


with docker ps you can check if the the conatiner with the name is running. It should show a container like this

 

 CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS      NAMESd542f507d10e   jkumining:psql   "docker-entrypoint.s…"   8 seconds ago   Up 8 seconds   5432/tcp   <containerName>

 

<containerName> is the name given previously

 

Finally connect to the database via :

sudo docker exec -it <containerName> psql -U postgres

And check if the data is correctly loaded:

select count(*) from versions; count ------- 86827(1 row)