Skip to content

Branch kgc-2025-conformance: RML-LV left join causes error #20

@elsdvlee

Description

@elsdvlee

When using the BURP version from branch kgc-2025-conformance with this mapping:

@prefix rml: <http://w3id.org/rml/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix :    <http://example.org/> .

:jsonSource a rml:LogicalSource ;
  rml:source [
    a rml:RelativePathSource , rml:Source ;
    rml:path  "data.json" ] ;
  rml:referenceFormulation rml:JSONPath ;
  rml:iterator "$.people[*]" .

:jsonView a rml:LogicalView ;
  rml:viewOn :jsonSource ;
  rml:field [
    a rml:ExpressionField ;
    rml:fieldName "name" ;
    rml:reference "$.name" ;
  ] ;
  rml:field [
    a rml:IterableField ;
    rml:fieldName "item" ;
    rml:iterator "$.items[*]" ;
    rml:field [
      a rml:ExpressionField ; 
      rml:fieldName "type" ;
      rml:reference "$.type" ;
    ] ;
    rml:field [
      a rml:ExpressionField ; 
      rml:fieldName "weight" ;
      rml:reference "$.weight" ;
    ] ;
  ] .

:csvSource a rml:LogicalSource ;
  rml:source [ a rml:RelativePathSource , rml:Source ;
    rml:path  "data.csv"  ] ; 
  rml:referenceFormulation rml:CSV .
 
:csvView a rml:LogicalView ;
  rml:viewOn :csvSource ;
  rml:field [
    a rml:ExpressionField ; 
    rml:fieldName "name" ;
    rml:reference "name" ;
  ] ;
    rml:field [
    a rml:ExpressionField ;
    rml:fieldName "id" ;
    rml:reference "id" ;
  ] ;
  rml:field [
    a rml:ExpressionField ;
    rml:fieldName "birthyear" ;
    rml:reference "birthyear" ;
  ] ;
  rml:innerJoin [
    rml:parentLogicalView :jsonView ;
    rml:joinCondition [
      rml:parent "name" ;
      rml:child "name" ;
    ] ; 
    rml:field [
      a rml:ExpressionField ; 
      rml:fieldName "item_type" ;
      rml:reference "item.type" ;
    ] ;
  ] .

:tm a rml:TriplesMap; 
  rml:logicalSource :csvView;
  rml:subjectMap [
    rml:template "http://example.org/person/{id}" ;
    rml:class :Person 
  ] ;
  rml:predicateObjectMap [
    rml:predicate :hasName ;
    rml:objectMap [
      rml:reference "name" ;
    ] 
  ] ;
  rml:predicateObjectMap [
    rml:predicate :hasBirthyear ;
    rml:objectMap [
      rml:reference "birthyear" ;
      rml:datatype xsd:gYear ;
    ] 
  ] ;
    rml:predicateObjectMap [
    rml:predicate :hasItem ;
    rml:objectMap [
      rml:reference "item_type" ;
    ] 
  ] .

And source file data.csv

id,name,birthyear
P1,alice,1995
P2,bob,1999
P3,tobias,2005

and data.json

{
    "people": [
        {
            "name": "alice",
            "items": [
                {
                    "type": "sword",
                    "weight": 1500
                },
                {
                    "type": "shield",
                    "weight": 2500
                }
            ]
        },
        {
            "name": "bob",
            "items": [
                {
                    "type": "flower",
                    "weight": 15
                }
            ]
        }
    ]
}

I get following error:

SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.
java.lang.NullPointerException: Cannot invoke "Object.getClass()" because "value" is null
        at org.apache.jena.datatypes.TypeMapper.getTypeByValue(TypeMapper.java:161)
        at org.apache.jena.graph.impl.LiteralLabelImpl.<init>(LiteralLabelImpl.java:136)
        at org.apache.jena.graph.impl.LiteralLabelFactory.createTypedLiteral(LiteralLabelFactory.java:93)
        at org.apache.jena.rdf.model.ResourceFactory$Impl.createTypedLiteral(ResourceFactory.java:344)
        at org.apache.jena.rdf.model.ResourceFactory.createTypedLiteral(ResourceFactory.java:161)
        at burp.model.ExpressionMap.createTypedLiteral(ExpressionMap.java:284)
        at burp.model.ExpressionMap.generateLiterals(ExpressionMap.java:234)
        at burp.model.ObjectMap.generateTerms(ObjectMap.java:27)
        at burp.Main.generate(Main.java:159)
        at burp.Main.doMain(Main.java:55)
        at burp.Main.main(Main.java:42)
Cannot invoke "Object.getClass()" because "value" is null
System exiting with code: 1

No error when changing rml:leftJoin to rml:InnerJoin

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions