You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have a tool that generates a R2RML Direct Mapping for this table. Following the R2RML specs, this mapping should define r2rml:termType r2rml:BlankNode in the r2rml:subjectMap,
However, Ontop:5.1 (r2rml-api-core:0.9.0) is throwing an NullPointerException when I try to create an OntopVirtualRepository connection.
It looks like eu.optique-project:r2rml-api-core:0.9.0 doesn't properly support Term Type Blank Nodes in the Subject Map.
eu.optique.r2rml.api.model.impl.R2RMLMappingCollectionImpl github
If I update R2RMLMappingCollectionImpl to allow blank nodes, it fixes the NullPointerException. However, Ontop produces the wrong result.
R2RMLMappingCollectionImpl
// look for RDF star triple
if (resource == null) {
resource = readObjectInMappingGraph(node, getRDF().createIRI(R2RMLVocabulary.PROP_TERM_TYPE));
if ((resource instanceof IRI) && resource.toString().equals(RDFStarVocabulary.TERM_STAR_TRIPLE)) {
termMapType = TermMap.TermMapType.RDF_STAR_VALUED;
} // TODO: Change comparison
// BEGIN-FIX
else if ((resource instanceof IRI) && resource.toString().equals(R2RMLVocabulary.TERM_BLANK_NODE)) {
return mfact.createSubjectMap((IRI) resource);
}
// END-FIX
Running a simple query: SELECT * FROM NoPK produces incorrect results
SPARQL query:
SELECT (?noPK_1_column1 AS ?Column1) (?noPK_1_column2 AS ?Column2)
WHERE
{ ?_cls_NoPK a <rdb:schemas/ONTOP_KEYS/NoPK> ;
<rdb:schemas/ONTOP_KEYS/NoPK#Column1> ?noPK_1_column1 ;
<rdb:schemas/ONTOP_KEYS/NoPK#Column2> ?noPK_1_column2
}
Resulting native query:
ans1(Column1, Column2)
CONSTRUCT [Column1, Column2] [Column2/RDF(VARCHARToTEXT(Column21m4),xsd:string), Column1/RDF(VARCHARToTEXT(Column11m5),xsd:string)]
NATIVE [Column11m5, Column21m4]
SELECT DISTINCT v4.`Column1` AS `Column11m5`, v5.`Column2` AS `Column21m4`
FROM (SELECT 1 AS uselessVariable
FROM `NoPK` v1
LIMIT 1) v3, `NoPK` v4, `NoPK` v5
WHERE (v4.`Column1` IS NOT NULL AND v5.`Column2` IS NOT NULL)
Expected:
Column1
Column2
4
4
Actual:
Column1
Column2
2
3
4
3
2
4
4
4
NullPointerException
java.lang.NullPointerException: A TriplesMap must have a SubjectMap.
at eu.optique.r2rml.api.model.impl.TriplesMapImpl.setSubjectMap(TriplesMapImpl.java:85) ~[r2rml-api-core-0.9.0.jar:?]
at eu.optique.r2rml.api.model.impl.TriplesMapImpl.<init>(TriplesMapImpl.java:56) ~[r2rml-api-core-0.9.0.jar:?]
at eu.optique.r2rml.api.model.impl.MappingFactoryImpl.createTriplesMap(MappingFactoryImpl.java:40) ~[r2rml-api-core-0.9.0.jar:?]
at eu.optique.r2rml.api.model.impl.R2RMLMappingCollectionImpl.readTriplesMap(R2RMLMappingCollectionImpl.java:157) ~[r2rml-api-core-0.9.0.jar:?]
at eu.optique.r2rml.api.model.impl.R2RMLMappingCollectionImpl.readTriplesMaps(R2RMLMappingCollectionImpl.java:138) ~[r2rml-api-core-0.9.0.jar:?]
at eu.optique.r2rml.api.model.impl.R2RMLMappingCollectionImpl.load(R2RMLMappingCollectionImpl.java:103) ~[r2rml-api-core-0.9.0.jar:?]
at eu.optique.r2rml.api.model.impl.R2RMLMappingCollectionImpl.<init>(R2RMLMappingCollectionImpl.java:80) ~[r2rml-api-core-0.9.0.jar:?]
at eu.optique.r2rml.api.model.impl.R2RMLMappingManagerImpl.extractR2RMLMapping(R2RMLMappingManagerImpl.java:105) ~[r2rml-api-core-0.9.0.jar:?]
at eu.optique.r2rml.api.model.impl.R2RMLMappingManagerImpl.importMappings(R2RMLMappingManagerImpl.java:66) ~[r2rml-api-core-0.9.0.jar:?]
at it.unibz.inf.ontop.spec.mapping.parser.impl.R2RMLMappingParser.parse(R2RMLMappingParser.java:102) ~[ontop-mapping-r2rml-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.spec.mapping.parser.impl.R2RMLMappingParser.parse(R2RMLMappingParser.java:78) ~[ontop-mapping-r2rml-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.spec.mapping.impl.SQLMappingExtractor.extractPPMapping(SQLMappingExtractor.java:128) ~[ontop-mapping-sql-core-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.spec.mapping.impl.SQLMappingExtractor.extract(SQLMappingExtractor.java:108) ~[ontop-mapping-sql-core-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.spec.impl.DefaultOBDASpecificationExtractor.extract(DefaultOBDASpecificationExtractor.java:51) ~[ontop-mapping-core-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.injection.impl.OntopMappingConfigurationImpl.loadSpecification(OntopMappingConfigurationImpl.java:140) ~[ontop-mapping-core-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.injection.impl.OntopMappingSQLConfigurationImpl.loadSpecification(OntopMappingSQLConfigurationImpl.java:85) ~[ontop-mapping-sql-core-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.injection.impl.OntopMappingSQLAllConfigurationImpl.loadSpecification(OntopMappingSQLAllConfigurationImpl.java:47) ~[ontop-mapping-sql-all-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.injection.impl.OntopSQLOWLAPIConfigurationImpl.loadOBDASpecification(OntopSQLOWLAPIConfigurationImpl.java:35) ~[ontop-system-sql-owlapi-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.injection.impl.OntopOBDAConfigurationImpl.loadSpecification(OntopOBDAConfigurationImpl.java:44) ~[ontop-obda-core-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.injection.OntopSystemConfiguration.loadQueryEngine(OntopSystemConfiguration.java:20) ~[ontop-system-core-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.rdf4j.repository.impl.OntopVirtualRepository.initializeInternal(OntopVirtualRepository.java:72) ~[ontop-rdf4j-5.1.0.jar:5.1.0]
at org.eclipse.rdf4j.repository.base.AbstractRepository.init(AbstractRepository.java:36) ~[rdf4j-repository-api-4.2.2.jar:4.2.2]
at it.unibz.inf.ontop.rdf4j.repository.impl.OntopVirtualRepository.getConnection(OntopVirtualRepository.java:53) ~[ontop-rdf4j-5.1.0.jar:5.1.0]
at it.unibz.inf.ontop.rdf4j.repository.impl.OntopVirtualRepository.getConnection(OntopVirtualRepository.java:22) ~[ontop-rdf4j-5.1.0.jar:5.1.0]
Steps to Reproduce
Configure Ontop with an R2RML Direct Mapping configuration for a table with no primary key
Instantiate an OntopVirtualRepository with the R2RML Mapping
Description
May be similar to #395 (Ontop bootstrap generate mapping without primary keys).
I have a database that has Tables/Views without a primary key. MySQL CREATE TABLE
MySQL CREATE TABLE
I have a tool that generates a R2RML Direct Mapping for this table. Following the R2RML specs, this mapping should define
r2rml:termType r2rml:BlankNode
in ther2rml:subjectMap
,R2RML Direct Mapping
ODBA Mapping
(after modifying r2rml-api-core:0.9.0 to permit rr:BlankNode in rr:subjectMap)
>ontop-cli mapping to-odba
However, Ontop:5.1 (r2rml-api-core:0.9.0) is throwing an NullPointerException when I try to create an OntopVirtualRepository connection.
It looks like
eu.optique-project:r2rml-api-core:0.9.0
doesn't properly support Term Type Blank Nodes in the Subject Map.eu.optique.r2rml.api.model.impl.R2RMLMappingCollectionImpl github
If I update R2RMLMappingCollectionImpl to allow blank nodes, it fixes the NullPointerException. However, Ontop produces the wrong result.
R2RMLMappingCollectionImpl
Running a simple query:
SELECT * FROM NoPK
produces incorrect resultsExpected:
Actual:
NullPointerException
Steps to Reproduce
Versions
Ontop:5.1.0
Additional Information
SEE: Example rdb2rdf test w/o PK: #D012
SEE: #395
The text was updated successfully, but these errors were encountered: