RMLio / rmlmapper-java

The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources
http://rml.io
MIT License
147 stars 61 forks source link

Mapping requires at least one TriplesMap #91

Closed ahmad88me closed 3 years ago

ahmad88me commented 3 years ago

Hello everyone, I've been following the example in here. I've created a similar mapping and I got the following error (with version 4.9.1):

12:38:36.835 [main] ERROR be.ugent.rml.cli.Main               .main(193) - Failed to make mapping file conformant to RML spec.
java.lang.Exception: Mapping requires at least one TriplesMap
    at be.ugent.rml.conformer.MappingConformer.detect(MappingConformer.java:80)
    at be.ugent.rml.conformer.MappingConformer.conform(MappingConformer.java:55)
    at be.ugent.rml.cli.Main.main(Main.java:187)
    at be.ugent.rml.cli.Main.main(Main.java:36)

mapping file:

@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix rml: <http://semweb.mmlab.be/ns/rml#>.
@prefix ql: <http://semweb.mmlab.be/ns/ql#>.
@prefix bbb: <bbb#>.
@base <http://bbb/ontology#>.

<#PortfolioMapping>
rml:logicalSource [
    rml:source "sample.csv" ;
    rml:referenceFormulation ql:CSV
];

rr:subjectMap [
    rr:template "http://bbb/project#{Project Number}";
    rr:class bbb:Person 
];

rr:predicateObjectMap [
    rr:predicate bbb:Id;
    rr:objectMap [ rml:reference "Project Number" ]  
].

Thanks

DylanVanAssche commented 3 years ago

Hi! Thanks for your interest in RML!

It seems that your mapping rules is missing a rr:TriplesMap:

@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix rml: <http://semweb.mmlab.be/ns/rml#>.
@prefix ql: <http://semweb.mmlab.be/ns/ql#>.
@prefix bbb: <bbb#>.
@base <http://bbb/ontology#>.

<#PortfolioMapping> a rr:TriplesMap;
rml:logicalSource [
    rml:source "sample.csv" ;
    rml:referenceFormulation ql:CSV
];

rr:subjectMap [
    rr:template "http://bbb/project#{Project Number}";
    rr:class bbb:Person 
];

rr:predicateObjectMap [
    rr:predicate bbb:Id;
    rr:objectMap [ rml:reference "Project Number" ]  
].

Without it, the processor won't recognize your TriplesMap. Please let us know if you encounter any other issues.

ahmad88me commented 3 years ago

@DylanVanAssche Thank you very much, this works

DylanVanAssche commented 3 years ago

Corrected the spec as well to avoid these issues, see https://rml.io/spec

rohit21755 commented 1 year ago

same error coming please help mapping file: `@prefix rr: http://www.w3.org/ns/r2rml# . @prefix rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# . @prefix rdfs: http://www.w3.org/2000/01/rdf-schema# . @prefix fnml: http://semweb.mmlab.be/ns/fnml# . @prefix fno: https://w3id.org/function/ontology# . @prefix d2rq: http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1# . @prefix void: http://rdfs.org/ns/void# . @prefix dc: http://purl.org/dc/terms/ . @prefix foaf: http://xmlns.com/foaf/0.1/ . @prefix rml: http://semweb.mmlab.be/ns/rml# . @prefix ql: http://semweb.mmlab.be/ns/ql# . @prefix : http://mapping.example.com/ . @prefix ex: http://www.example.com/ . @prefix e: http://myontology.com/ . @prefix dbo: http://dbpedia.org/ontology/ . @prefix grel: http://users.ugent.be/~bjdmeest/function/grel.ttl# .

:fn_000 rdf:type fno:Function ; rr:predicateObjectMap :pom_005 ; fno:executes grel:toUpperCase .

:gm_000 rdf:type rr:GraphMap ; rr:constant ex:Characters .

:gm_001 rdf:type rr:GraphMap ; rr:constant ex:Episodes .

:gm_002 rdf:type rr:GraphMap ; rr:constant ex:Episodes .

:gm_003 rdf:type rr:GraphMap ; rr:constant ex:Episodes .

:jc_000 rdf:type rr:Join ; rr:child "debut episode" ; rr:parent "number" .

:language_000 rr:constant "en" .

:map_episode_000 rdf:type rr:TriplesMap ; rdfs:label "episode" ; rr:logicalSource :source_001 .

:map_people_000 rdf:type rr:TriplesMap ; rdfs:label "people" ; rr:logicalSource :source_000 .

:om_000 rdf:type rr:ObjectMap ; rr:constant ex:Person ; rr:termType rr:IRI .

:om_001 rdf:type rr:ObjectMap ; rr:column "firstname" ; rr:termType rr:Literal .

:om_002 rdf:type rr:ObjectMap ; rr:column "lastname" ; rr:termType rr:Literal .

:om_003 rdf:type rr:ObjectMap ; rr:column "debut episode" ; rr:datatype http://www.w3.org/2001/XMLSchema#integer ; rr:termType rr:Literal .

:om_004 rml:languageMap :language_000 ; rdf:type fnml:FunctionTermMap ; rr:functionValue :fn_000 ; rr:termType rr:Literal .

:om_005 rdf:type rr:ObjectMap ; rr:column "hair color" ; rr:termType rr:Literal .

:om_006 rdf:type rr:ObjectMap ; rr:joinCondition :jc_000 ; rr:parentTriplesMap :map_episode_000 .

:om_007 rdf:type rr:ObjectMap ; rr:constant ex:Episode ; rr:termType rr:IRI .

:om_008 rdf:type rr:ObjectMap ; rr:column "title" ; rr:termType rr:Literal .

:pm_000 rdf:type rr:PredicateMap ; rr:constant rdf:type .

:pm_001 rdf:type rr:PredicateMap ; rr:constant http://schema.org/givenName .

:pm_002 rdf:type rr:PredicateMap ; rr:constant http://schema.org/lastName .

:pm_003 rdf:type rr:PredicateMap ; rr:constant e:debutEpisode .

:pm_004 rdf:type rr:PredicateMap ; rr:constant dbo:hairColor .

:pm_005 rdf:type rr:PredicateMap ; rr:constant grel:valueParameter .

:pm_006 rdf:type rr:PredicateMap ; rr:constant e:appearsIn .

:pm_007 rdf:type rr:PredicateMap ; rr:constant rdf:type .

:pm_008 rdf:type rr:PredicateMap ; rr:constant http://schema.org/title .

:pom_000 rdf:type rr:PredicateObjectMap ; rr:objectMap :om_000 ; rr:predicateMap :pm_000 .

:pom_001 rdf:type rr:PredicateObjectMap ; rr:objectMap :om_001 ; rr:predicateMap :pm_001 .

:pom_002 rdf:type rr:PredicateObjectMap ; rr:objectMap :om_002 ; rr:predicateMap :pm_002 .

:pom_003 rdf:type rr:PredicateObjectMap ; rr:graphMap :gm_001 ; rr:objectMap :om_003 ; rr:predicateMap :pm_003 .

:pom_004 rdf:type rr:PredicateObjectMap ; rr:graphMap :gm_002 ; rr:objectMap :om_004 ; rr:predicateMap :pm_004 .

:pom_005 rdf:type rr:PredicateObjectMap ; rr:objectMap :om_005 ; rr:predicateMap :pm_005 .

:pom_006 rdf:type rr:PredicateObjectMap ; rr:graphMap :gm_003 ; rr:objectMap :om_006 ; rr:predicateMap :pm_006 .

:pom_007 rdf:type rr:PredicateObjectMap ; rr:objectMap :om_007 ; rr:predicateMap :pm_007 .

:pom_008 rdf:type rr:PredicateObjectMap ; rr:objectMap :om_008 ; rr:predicateMap :pm_008 .

:rules_000 void:exampleResource :map_episode_000, :map_people_000 ; rdf:type void:Dataset .

:s_000 rdf:type rr:SubjectMap ; rr:graphMap :gm_000 ; rr:template "http://www.example.com/{id}" .

:s001 rdf:type rr:SubjectMap ; rr:template "http://www.example.com/episode{number}" .

:source_000 rml:referenceFormulation ql:JSONPath ; rml:source "people.json" ; rdf:type rr:LogicalSource .

:source_001 rml:referenceFormulation ql:JSONPath ; rml:source "episode.json" ; rdf:type rr:LogicalSource .

`

rohit21755 commented 1 year ago

@DylanVanAssche

DylanVanAssche commented 1 year ago

@rohit21755 You need to provide the JSON files as well to reproduce it. Your mappings have rr:TriplesMap.

rohit21755 commented 1 year ago

@DylanVanAssche ERROR be.ugent.rml.cli.Main .run(267) - Unable to parse mapping rules as Turtle. Does the file exist and is it valid Turtle? all files are in the same directory still getting this error while running the command java -jar /path/to/rmlmapper.jar -m rules. rm.ttl

the above file that I have given was generated by Ai. I have provided the original file below. Also if I got the same error "Failed to make mapping file conformant to RML spec.' what I have to do here ttl file : `@prefix rr: http://www.w3.org/ns/r2rml#. @prefix rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#. @prefix rdfs: http://www.w3.org/2000/01/rdf-schema#. @prefix fnml: http://semweb.mmlab.be/ns/fnml#. @prefix fno: https://w3id.org/function/ontology#. @prefix d2rq: http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#. @prefix void: http://rdfs.org/ns/void#. @prefix dc: http://purl.org/dc/terms/. @prefix foaf: http://xmlns.com/foaf/0.1/. @prefix rml: http://semweb.mmlab.be/ns/rml#. @prefix ql: http://semweb.mmlab.be/ns/ql#. @prefix : http://mapping.example.com/. @prefix ex: http://www.example.com/. @prefix e: http://myontology.com/. @prefix dbo: http://dbpedia.org/ontology/. @prefix grel: http://users.ugent.be/~bjdmeest/function/grel.ttl#.

:rules_000 a void:Dataset; void:exampleResource :map_people_000. :map_people_000 rml:logicalSource :source_000. :source_000 a rml:LogicalSource; rml:source "people.json"; rml:referenceFormulation . :map_people_000 a rr:TriplesMap; rdfs:label "people". :s_000 a rr:SubjectMap. :map_people_000 rr:subjectMap :s_000. :s_000 rr:template "http://www.example.com/{id}"; rr:graphMap :gm_000. :gm_000 a rr:GraphMap; rr:constant "http://www.example.com/Characters". :pom_000 a rr:PredicateObjectMap. :map_people_000 rr:predicateObjectMap :pom_000. :pm_000 a rr:PredicateMap. :pom_000 rr:predicateMap :pm_000. :pm_000 rr:constant rdf:type. :pom_000 rr:objectMap :om_000. :om_000 a rr:ObjectMap; rr:constant "http://schema.org/Person"; rr:termType rr:IRI. :pom_001 a rr:PredicateObjectMap. :map_people_000 rr:predicateObjectMap :pom_001. :pm_001 a rr:PredicateMap. :pom_001 rr:predicateMap :pm_001. :pm_001 rr:constant http://schema.org/givenName. :pom_001 rr:objectMap :om_001. :om_001 a rr:ObjectMap; rml:reference "firstname"; rr:termType rr:Literal. :pom_002 a rr:PredicateObjectMap. :map_people_000 rr:predicateObjectMap :pom_002. :pm_002 a rr:PredicateMap. :pom_002 rr:predicateMap :pm_002. :pm_002 rr:constant http://schema.org/lastName. :pom_002 rr:objectMap :om_002. :om_002 a rr:ObjectMap; rml:reference "lastname"; rr:termType rr:Literal. :pom_003 a rr:PredicateObjectMap. :map_people_000 rr:predicateObjectMap :pom_003. :pm_003 a rr:PredicateMap. :pom_003 rr:predicateMap :pm_003. :pm_003 rr:constant e:debutEpisode. :pom_003 rr:objectMap :om_003. :om_003 a rr:ObjectMap; rml:reference "debut episode"; rr:termType rr:Literal; rr:datatype http://www.w3.org/2001/XMLSchema#integer. :pom_003 rr:graphMap :gm_001. :gm_001 a rr:GraphMap; rr:constant "http://www.example.com/Episodes". :pom_004 a rr:PredicateObjectMap. :map_people_000 rr:predicateObjectMap :pom_004. :pm_004 a rr:PredicateMap. :pom_004 rr:predicateMap :pm_004. :pm_004 rr:constant dbo:hairColor. :pom_004 rr:objectMap :om_004. :om_004 a fnml:FunctionTermMap; rr:termType rr:Literal; rml:languageMap :language_000. :language_000 rr:constant "en". :om_004 fnml:functionValue :fn_000. :fn_000 rml:logicalSource :source_000; rr:predicateObjectMap :pomexec_000. :pomexec_000 rr:predicateMap :pmexec_000. :pmexec_000 rr:constant fno:executes. :pomexec_000 rr:objectMap :omexec_000. :omexec_000 rr:constant "http://users.ugent.be/~bjdmeest/function/grel.ttl#toUpperCase"; rr:termType rr:IRI. :fn_000 rr:predicateObjectMap :pom_005. :pom_005 a rr:PredicateObjectMap; rr:predicateMap :pm_005. :pm_005 a rr:PredicateMap; rr:constant grel:valueParameter. :pom_005 rr:objectMap :om_005. :om_005 a rr:ObjectMap; rml:reference "hair color"; rr:termType rr:Literal. :pom_006 a rr:PredicateObjectMap. :map_people_000 rr:predicateObjectMap :pom_006. :pm_006 a rr:PredicateMap. :pom_006 rr:predicateMap :pm_006. :pm_006 rr:constant e:appearsIn. :pom_006 rr:objectMap :om_006; rr:graphMap :gm_002. :gm_002 a rr:GraphMap; rr:constant "http://www.example.com/Episodes". :rules_000 void:exampleResource :map_episode_000. :map_episode_000 rml:logicalSource :source_001. :source_001 a rml:LogicalSource; rml:source "episodes.json"; rml:referenceFormulation . :map_episode_000 a rr:TriplesMap; rdfs:label "episode". :s_001 a rr:SubjectMap. :map_episode_000 rr:subjectMap :s_001. :s001 rr:template "http://www.example.com/episode{number}". :pom_007 a rr:PredicateObjectMap. :map_episode_000 rr:predicateObjectMap :pom_007. :pm_007 a rr:PredicateMap. :pom_007 rr:predicateMap :pm_007. :pm_007 rr:constant rdf:type. :pom_007 rr:objectMap :om_007. :om_007 a rr:ObjectMap; rr:constant "http://schema.org/Episode"; rr:termType rr:IRI. :pom_008 a rr:PredicateObjectMap. :map_episode_000 rr:predicateObjectMap :pom_008. :pm_008 a rr:PredicateMap. :pom_008 rr:predicateMap :pm_008. :pm_008 rr:constant http://schema.org/title. :pom_008 rr:objectMap :om_008. :om_008 a rr:ObjectMap; rml:reference "title"; rr:termType rr:Literal. :om_006 a rr:ObjectMap; rr:parentTriplesMap :map_episode_000; rr:joinCondition :jc_000. :jc_000 rr:child "debut episode"; rr:parent "number". `

people.json: [ { "id": 0, "firstname": "John Doe", "lastname": "Doe", "debut episode": 1, "hair color": "brown" }, { "id": 2, "firstname": "John Doe2", "lastname": "Doe2", "debut episode": 21, "hair color": "black" }, { "id": 3, "firstname": "John Doe3", "lastname": "Doe3", "debut episode": 31, "hair color": "red"}, { "id": 4, "firstname": "John Doe4", "lastname": "Doe4", "debut episode": 41, "hair color": "blonde" } ]

episode.json: `[ { "number": "1", "title": "Episode 1", "airdate": "2014-10-12" }, { "number": "2", "title": "Episode 2", "airdate": "2014-10-12" }, { "number": "3", "title": "Episode 3", "airdate": "2014-10-12"

} ] `

rohit21755 commented 1 year ago

@DylanVanAssche can you help in this

DylanVanAssche commented 1 year ago

the above file that I have given was generated by Ai.

The AI made a mistake as the RML above is not valid Turtle. You can validate your Turtle here: http://ttl.summerofcode.be/