- From: Vladimir Alexiev <vladimir.alexiev@ontotext.com>
- Date: Thu, 19 Sep 2013 16:28:05 +0300
- To: <public-rdb2rdf-comments@w3.org>, <tobyink@cpan.org>
- Cc: "'Gregg Garcia'" <GGarcia@getty.edu>
Richard, thanks for the clarifications!!
>> If a column value (or any of the columns in a rr:template) is null, an r2rml processor should skip the involved triple.
>> If the rr:subjectMap column is null, it should skip all triples in that rr:TriplesMap.
>> This behaviour is stated quite definitely at:
>> http://www.w3.org/2001/sw/rdb2rdf/wiki/RDBNullValues#R2RML
> http://www.w3.org/TR/r2rml/#generated-triples
> Here it says: If Subject, Predicate or Object is empty, then abort these steps. (As a result, no triple is generated.)
> http://www.w3.org/TR/r2rml/#generated-rdf-term
> Here it says: The result of that function can be: Empty – if any of the referenced columns of the term map has a NULL value
> There are several tests that require NULL values to be ignored, e.g., this one:
> http://www.w3.org/2001/sw/rdb2rdf/test-cases/#R2RMLTC0013a
> It does not appear that an implementation could pass the test suite if it doesn't handle at least *some* of the cases for NULLs correctly.
The test result is here: https://bitbucket.org/tobyink/p5-rdf-rdb2rdf/src/6df083243e556e5e8c3044536ab2a4099a3076dc/meta/earl/with-sqlite.ttl?at=RDF-RDB2RDF#cl-626
But I repeated the test, and it fails (returns a row for Alice, which it shouldn’t).
So I fixed this problem.
You can get it (together with the rrx:languageColumn extension) from:
https://bitbucket.org/valexiev/p5-rdf-rdb2rdf
I also made a pull request to the main author (Toby):
https://bitbucket.org/tobyink/p5-rdf-rdb2rdf/pull-request/1/handle-nulls-rrx-languagecolumn/diff
I added 3 tests in directory examples/
(sorry I didn’t do it properly in t/ since I don't know Perl unit testing):
1. D013-test: repeats the conformance test above. The old version (0.07) returns Alice and Bob, the fixed version only Alice
2. nullTest
Given a table CODES (ObjectProperty, subPropertyOf , Concept, label) with 4 cols and 3 rows that are sparsely populated,
produces this output:
<http://example.com/ontology/broaderGeneric> a owl:ObjectProperty ;
rdfs:label "Broader Generic" ;
rdfs:subPropertyOf <http://www.w3.org/2004/02/skos/core#skos:broader> .
<http://example.com/ontology/historicFlag> a owl:ObjectProperty ;
rdfs:label "Historic flag" .
<http://example.com/thes/historic/Current> a skos:Concept ;
skos:prefLabel "Current" .
3. R2RML-language.pl
Outputs 3 books with dc:title in different languages:
- book/1: fr from rrx:languageColumn title_lang
- book/2: it from rrx:languageColumn title_lang
- book/3: en from rr:language (*default* constant lang)
perldoc lib/RDF/RDB2RDF/R2RML.pm :
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix rrx: <http://purl.org/r2rml-ext/>.
rrx:languageColumn a owl:DatatypeProperty;
rdfs:domain rr:TermMap;
rdfs:range rdf:Literal;
rdfs:comment "Specifies the language of a literal, to be retrieved from a column. rr:language can be used as constant default".
This can be used in R2RML scripts like so:
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix rrx: <http://purl.org/r2rml-ext/>.
@prefix bibo: <http://purl.org/ontology/bibo/>.
@prefix dc: <http://purl.org/dc/elements/1.1/>.
[] rr:logicalTable [rr:tableName "books"];
rr:subjectMap [rr:class bibo:Book; rr:template "book/{book_id}"];
rr:predicateObjectMap [
rr:predicate dc:title;
rr:objectMap [
rr:column "title";
rrx:languageColumn "title_lang";
rr:language "en" # default
]].
Received on Thursday, 19 September 2013 13:28:32 UTC