RMLio / rmlmapper-java

The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources

Home Page:http://rml.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Conditions at Subjects

pabloalarconm opened this issue · comments

Hi!

I'm trying to create a YARRRML template that contains a condition in which: if the data source column named value_id in the CSV contains "null" as value in the data cell, create a URL based on other columns like: this:$(pid)_$(uniqid)_Output. If it does not contain "null", use this value (it will be a URL) from this value_id column.

The solution I found was to use functions equal and idlab-fn:notEqual. This solution seems to work perfectly at predicateobjects every time I want to perform this function at objects. But, this function seems not to work with subjects. Based on the documentation, subjects accepts both functions, value and parameters (ref and ref2), so it seems it should work in my case, but it doesnt.

I will send you two YARRRML template and one CSV that fits with both templates. Each template contains the functions in different places: yarrrml_1.yaml has the functions at the predicateobjects and works, the second template, yarrrml_2.yaml contains the same functions in the subjects and doesn't work.

Could you tell what changes do I need in yarrrml_2 to obtain same functionality but in subjects and I achieved in yarrrml_1 for `predicateobjects?
Thank you so much, truly appreciated.

yarrrml_1

mapping:
  test:
    po:
        - p: sio:SIO_000229
          o:
            - value: this:$(pid)_$(uniqid)_Output
              type: iri
              condition:
                function: equal
                parameters:
                  - [str1, $(value_id)]
                  - [str2, "null"]
            - value: $(value_id)
              type: iri
              condition:
                function: idlab-fn:notEqual
                parameters:
                  - [grel:valueParameter, $(value_id)]
                  - [grel:valueParameter2, "null"]
    graph: this:$(pid)_Context
    sources:
    - source_cde_test
    subjects: this:$(pid)_$(uniqid)_Process
prefixes:
  obo: http://purl.obolibrary.org/obo/
  rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  rdfs: http://www.w3.org/2000/01/rdf-schema#
  sio: https://sio.semanticscience.org/resource/
  this: http://my_example.com/
  xsd: http://www.w3.org/2001/XMLSchema#
  grel: http://users.ugent.be/~bjdmeest/function/grel.ttl#
  idlab-fn: http://example.com/idlab/function/

sources:
  source_cde_test:
    access: data.csv
    iterator: $
    referenceFormulation: csv

yarrrml_2

mapping:
  test:
    graph: this:$(uniqid)_Context
    predicateobject:

    - objects:
        type: xsd:integer
        value: $(uniqid)
      predicate: sio:SIO_000300

    sources:
    - source_cde_test

    subjects:
      - value: this:$(pid)_$(uniqid)_Output
        condition:
          function: equal
          parameters:
            - [str1, $(value_id)]
            - [str2, "null"]
      - value: $(value_id)
        condition:
          function: idlab-fn:notEqual
          parameters:
            - [grel:valueParameter, $(value_id)]
            - [grel:valueParameter2, "null"]
  


prefixes:
  obo: http://purl.obolibrary.org/obo/
  rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  rdfs: http://www.w3.org/2000/01/rdf-schema#
  sio: https://sio.semanticscience.org/resource/
  this: http://my_example.com/
  xsd: http://www.w3.org/2001/XMLSchema#
  grel: http://users.ugent.be/~bjdmeest/function/grel.ttl#
  idlab-fn: http://example.com/idlab/function/

sources:
  source_cde_test:
    access: data.csv
    iterator: $
    referenceFormulation: csv

data.csv

pid,uniqid,value_id
3246543214,33654,http://www.orpha.net/ORDO/Orphanet_93552
3246543214,33655,null
3246543214,33656,null
3246543214,33657,null
3246543214,33658,http://www.orpha.net/ORDO/Orphanet_93552
3246543214,33659,null
3246543214,33660,null

Results obtained from yarrrml_1 and data.csv

<http://my_example.com/3246543214_33654_Process> <https://sio.semanticscience.org/resource/SIO_000229> <http://www.orpha.net/ORDO/Orphanet_93552> <http://my_example.com/3246543214_Context>.
<http://my_example.com/3246543214_33655_Process> <https://sio.semanticscience.org/resource/SIO_000229> <http://my_example.com/3246543214_33655_Output> <http://my_example.com/3246543214_Context>.
<http://my_example.com/3246543214_33656_Process> <https://sio.semanticscience.org/resource/SIO_000229> <http://my_example.com/3246543214_33656_Output> <http://my_example.com/3246543214_Context>.
<http://my_example.com/3246543214_33657_Process> <https://sio.semanticscience.org/resource/SIO_000229> <http://my_example.com/3246543214_33657_Output> <http://my_example.com/3246543214_Context>.
<http://my_example.com/3246543214_33658_Process> <https://sio.semanticscience.org/resource/SIO_000229> <http://www.orpha.net/ORDO/Orphanet_93552> <http://my_example.com/3246543214_Context>.
<http://my_example.com/3246543214_33659_Process> <https://sio.semanticscience.org/resource/SIO_000229> <http://my_example.com/3246543214_33659_Output> <http://my_example.com/3246543214_Context>.
<http://my_example.com/3246543214_33660_Process> <https://sio.semanticscience.org/resource/SIO_000229> <http://my_example.com/3246543214_33660_Output> <http://my_example.com/3246543214_Context>.


Hi!

I think you need to put on a mapping level for subjects, see https://rml.io/yarrrml/spec/#conditions

Closing as assumed resolved since no response for several months. Please re-open if you still have issues with this. Thanks!