Package: maplib
maplibDataframe-based interactive knowledge graph construction, validation and enrichment using stOTTR templates and SPARQL. The library is especially suitable for problems that arise when building industrial knowledge graphs. The library is a Rust-based implementation ofstOTTR. Implemented withApache Arrowin Rust usingPola.rs, with a Python wrapper.There is an associated paper [1] that can be foundhere.MappingWe can easily map DataFrames to RDF-graphs using the Python library. Below is a reproduction of the example in the paper [1]. Assume that we have a DataFrame given by:ex="https://github.com/DataTreehouse/maplib/example#"co="https://github.com/DataTreehouse/maplib/countries#"pi="https://github.com/DataTreehouse/maplib/pizza#"ing="https://github.com/DataTreehouse/maplib/pizza/ingredients#"importpolarsaspldf=pl.DataFrame({"p":[pi+"Hawaiian",pi+"Grandiosa"],"c":[co+"CAN",co+"NOR"],"is":[[ing+"Pineapple",ing+"Ham"],[ing+"Pepper",ing+"Meat"]]})dfThat is, our DataFrame is:pcisstrstrlist[str]"https://.../pizza#Hawaiian""https://.../maplib/countries#CAN"[".../ingredients#Pineapple", ".../ingredients#Ham"]"https://.../pizza#Grandiosa""https://.../maplib/countries#NOR"[".../ingredients#Pepper", ".../ingredients#Meat"]Then we can define a stOTTR template, and create our knowledge graph by expanding this template with our DataFrame as input:frommaplibimportMappingpl.Config.set_fmt_str_lengths(150)doc="""@prefix pizza:<https://github.com/DataTreehouse/maplib/pizza#>.@prefix xsd:<http://www.w3.org/2001/XMLSchema#>.@prefix ex:<https://github.com/DataTreehouse/maplib/pizza#>.ex:Pizza[?p, xsd:anyURI ?c, List<xsd:anyURI> ?is] :: {ottr:Triple(?p, a, pizza:Pizza),ottr:Triple(?p, pizza:fromCountry, ?c),cross | ottr:Triple(?p, pizza:hasIngredient, ++?is)}."""m=Mapping([doc])m.expand("ex:Pizza",df)We can immediately query the mapped knowledge graph:m.query("""PREFIX pizza:<https://github.com/DataTreehouse/maplib/pizza#>SELECT ?p ?i WHERE {?p a pizza:Pizza .?p pizza:hasIngredient ?i .}""")The query gives the following result (a DataFrame):pistrstr"https://.../pizza#Grandiosa""https://.../ingredients#Meat""https://.../pizza#Grandiosa""https://.../ingredients#Pepper""https://.../pizza#Hawaiian""https://.../ingredients#Pineapple""https://.../pizza#Hawaiian""https://.../ingredients#Ham"Next, we are able to perform a construct query, which creates new triples but does not insert them.hpizzas="""PREFIX pizza:<https://github.com/DataTreehouse/maplib/pizza#>PREFIX ing:<https://github.com/DataTreehouse/maplib/pizza/ingredients#>CONSTRUCT { ?p a pizza:UnorthodoxPizza }WHERE {?p a pizza:Pizza .?p pizza:hasIngredient ing:Pineapple .}"""res=m.query(hpizzas)res[0]The resulting triples are given below:subjectverbobjectstrstrstr"https://.../pizza#Hawaiian""http://.../22-rdf-syntax-ns#type""https://.../pizza#UnorthodoxPizza"If we are happy with the output of this construct-query, we can insert it in the mapping state. Afterwards we check that the triple is added with a query.m.insert(hpizzas)m.query("""PREFIX pizza:<https://github.com/DataTreehouse/maplib/pizza#>SELECT ?p WHERE {?p a pizza:UnorthodoxPizza}""")Indeed, we have added the triple:pstr"https://github.com/DataTreehouse/maplib/pizza#Hawaiian"APIThe Python API is documentedhereInstallingThe package is published on PyPi:pipinstallmaplibReferences[1] M. Bakken, "maplib: Interactive, literal RDF model mapping for industry," in IEEE Access, doi: 10.1109/ACCESS.2023.3269093.[2] M. G. Skjæveland, D. P. Lupp, L. H. Karlsen, and J. W. Klüwer, “Ottr: Formal templates for pattern-based ontology engineering.” in WOP (Book),
2021, pp. 349–377.LicensingAll code produced since August 1st. 2023 is copyrighted toData Treehouse ASwith an Apache 2.0 license unless otherwise noted.All code which was produced before August 1st. 2023 copyrighted toPrediktor ASwith an Apache 2.0 license unless otherwise noted, and has been financed byThe Research Council of Norway(grant no. 316656) andPrediktor ASas part of a PhD Degree. The code at this state is archived in the repository athttps://github.com/magbak/maplib.