\pset null '(null)' CREATE SERVER fuseki FOREIGN DATA WRAPPER rdf_fdw OPTIONS ( endpoint 'http://fuseki:3030/dt/sparql', update_url 'http://fuseki:3030/dt/update'); CREATE FOREIGN TABLE ft ( subject rdfnode OPTIONS (variable '?s'), predicate rdfnode OPTIONS (variable '?p'), object rdfnode OPTIONS (variable '?o') ) SERVER fuseki OPTIONS ( log_sparql 'true', sparql 'SELECT * WHERE {?s ?p ?o}', sparql_update_pattern '?s ?p ?o .' ); CREATE USER MAPPING FOR postgres SERVER fuseki OPTIONS (user 'admin', password 'secret'); INSERT INTO ft (subject, predicate, object) VALUES ('', '', '"Westfälische Wilhelms-Universität Münster"@de'), ('', '', '"University of Münster"@en'), ('', '', '"Univerrrsity of Münsterrr"@en-US'), ('', '', '"Univêrsity of Münsta"@en-GB'), ('', '', '"18:18:42"^^'), ('', '', '"1780-04-16"^^'), ('', '', '"2025-12-24T18:30:42"^^'), ('', '', '"2025-12-24T13:00:42Z"^^'), ('', '', '"51.9636"^^'), ('', '', '"7.6136"^^'), ('', '', '"Johannes Wessels"'), ('', '', ''), ('', '', ''), ('', '', '"Münster"@de'), ('', '', '"Nordrhein-Westfalen"@de'), ('', '', '"Hello 👋 PostgreSQL 🐘"@en'), ('', '', '"unknown literal type"^^'), ('', '', '"explicit string literal"^^'), ('', '', '""'), ('', '', '". <= pontos => ."@pt'), ('', '', '"\n <= salto de línea => \n"@es'), ('', '', '"\" <= double-quotes => \""@en'), ('', '', '"\t <= Tabulatorzeichen => \t"@de'), ('', '', '"1924"^^'), ('', '', '"49098"^^'), ('', '', '"4956"^^'), ('', '', '"803600000"^^'), ('', '', '"1500.00"^^'), ('', '', '"9999999999999999999"^^'), ('', '', '"0.000000000000001"^^'), ('', '', '"2024-02-29"^^'), ('', '', '"true"^^'); /* IRI description */ SELECT subject, predicate, object FROM sparql.describe('fuseki', 'DESCRIBE ') ORDER BY object::text COLLATE "C"; /* graph pattern description */ SELECT subject, predicate, object FROM sparql.describe('fuseki',' PREFIX dbp: DESCRIBE ?s WHERE { ?s dbp:name ?o . }') WHERE subject = '' ORDER BY object::text COLLATE "C"; /* IN clause to filter results */ SELECT subject, predicate, object FROM sparql.describe('fuseki', 'DESCRIBE ') WHERE predicate IN ('','') ORDER BY object::text COLLATE "C"; /* using named prefixes and base URI */ SELECT subject, predicate, object FROM sparql.describe( query =>'describe ', server => 'fuseki', base_uri => 'http://test.base.uri/') WHERE predicate = '' ORDER BY object::text COLLATE "C"; /* empty server */ SELECT * FROM sparql.describe('', 'DESCRIBE '); /* empty DESCRIBE pattern */ SELECT * FROM sparql.describe('fuseki', ''); /* empty SERVER and DESCRIBE pattern */ SELECT * FROM sparql.describe('', ''); /* NULL DESCRIBE pattern */ SELECT * FROM sparql.describe('fuseki', NULL); /* NULL SERVER */ SELECT * FROM sparql.describe(NULL, 'DESCRIBE '); /* NULL SERVER and DESCRIBE pattern */ SELECT * FROM sparql.describe(NULL, NULL); /* invalid SERVER */ SELECT * FROM sparql.describe('invalid', 'DESCRIBE '); SELECT * FROM sparql.describe(' ', 'DESCRIBE '); /* invalid DESCRIBE pattern */ SELECT * FROM sparql.describe('fuseki', 'invalid'); SELECT * FROM sparql.describe('fuseki', ' '); SELECT * FROM sparql.describe('fuseki', 'DESCRIBE https://www.uni-muenster.de'); -- missing < > /* DESCRIBE pattern with a blank node */ SELECT * FROM sparql.describe('fuseki', '_:bnode1'); SELECT * FROM sparql.describe('fuseki', 'DESCRIBE _:bnode1'); /* malformed entity IRI */ SELECT * FROM sparql.describe('fuseki', 'DESCRIBE '); /* SELECT query */ SELECT * FROM sparql.describe('fuseki', 'SELECT ?s ?p ?o WHERE {?s ?p ?o}'); /* cleanup */ DELETE FROM ft; DROP SERVER fuseki CASCADE;