--
-- $Id: DET_RDFData.sql,v 1.22 2009/03/03 17:48:57 mitko Exp $
--
-- This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
-- project.
--
-- Copyright (C) 1998-2006 OpenLink Software
--
-- This project is free software; you can redistribute it and/or modify it
-- under the terms of the GNU General Public License as published by the
-- Free Software Foundation; only version 2 of the License, dated June 1991.
--
-- This program is distributed in the hope that it will be useful, but
-- WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- General Public License for more details.
--
-- You should have received a copy of the GNU General Public License along
-- with this program; if not, write to the Free Software Foundation, Inc.,
-- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
--
use DB
;
create procedure DB.DBA.RDFData_log_message (in x varchar)
{
if (0)
log_message (cast (x as varchar));
}
;
create function DB.DBA."RDFData_DAV_AUTHENTICATE" (in id any, in what char(1), in req varchar, in auth_uname varchar, in auth_pwd varchar, in auth_uid integer)
{
RDFData_log_message (current_proc_name ());
--log_message (sprintf ('RDFData_DAV_AUTHENTICATE req=%s uname=%s uid=%d', req, auth_uname, auth_uid));
-- dbg_obj_princ ('RDFData_DAV_AUTHENTICATE (', id, what, req, auth_uname, auth_pwd, auth_uid, ')');
if (not ('110' like req))
{
return -13;
}
if ('100' like req and auth_uid >= 0)
return auth_uid;
if ((auth_uid <> id[3]) and (auth_uid <> http_dav_uid()))
{
-- dbg_obj_princ ('a_uid is ', auth_uid, ', id[3] is ', id[3], ' mismatch');
return -13;
}
if (auth_uid >= 0)
return auth_uid;
return -12;
}
;
create function DB.DBA."RDFData_DAV_AUTHENTICATE_HTTP" (in id any, in what char(1), in req varchar, in can_write_http integer, inout a_lines any, inout a_uname varchar, inout a_pwd varchar, inout a_uid integer, inout a_gid integer, inout _perms varchar) returns integer
{
RDFData_log_message (current_proc_name ());
-- dbg_obj_print (current_proc_name (), id, what, _perms);
declare rc integer;
declare puid, pgid integer;
declare u_password, pperms varchar;
declare allow_anon integer;
if (length (req) <> 3)
return -15;
whenever not found goto nf_col_or_res;
puid := http_dav_uid();
pgid := coalesce (
( select G_ID from WS.WS.SYS_DAV_GROUP
where G_NAME = 'RDFData_' || coalesce ((select COL_NAME from WS.WS.SYS_DAV_COL where COL_ID=id[1] and COL_DET='RDFData'), '')
), puid+1);
pperms := '110100100NN';
if ((what <> 'R') and (what <> 'C'))
return -14;
allow_anon := WS.WS.PERM_COMP (substring (cast (pperms as varchar), 7, 3), req);
if (a_uid is null)
{
if ((not allow_anon) or ('' <> WS.WS.FINDPARAM (a_lines, 'Authorization:')))
rc := WS.WS.GET_DAV_AUTH (a_lines, allow_anon, can_write_http, a_uname, u_password, a_uid, a_gid, _perms);
if (rc < 0)
return rc;
}
if (isinteger (a_uid))
{
if (a_uid < 0)
return a_uid;
if (a_uid = 1) -- Anonymous FTP
{
a_uid := http_nobody_uid ();
a_gid := http_nogroup_gid ();
}
}
if (DAV_CHECK_PERM (pperms, req, a_uid, a_gid, pgid, puid))
return a_uid;
return -13;
nf_col_or_res:
return -1;
}
;
create function DB.DBA."RDFData_DAV_GET_PARENT" (in id any, in st char(1), in path varchar) returns any
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_COL_CREATE" (in detcol_id any, in path_parts any, in permissions varchar, in uid integer, in gid integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_COL_MOUNT" (in detcol_id any, in path_parts any, in full_mount_path varchar, in mount_det varchar, in permissions varchar, in uid integer, in gid integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_COL_MOUNT_HERE" (in parent_id any, in full_mount_path varchar, in permissions varchar, in uid integer, in gid integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_DELETE" (in detcol_id any, in path_parts any, in what char(1), in silent integer, in auth_uid integer) returns integer
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_RES_UPLOAD" (in detcol_id any, in path_parts any, inout content any, in type varchar, in permissions varchar, in uid integer, in gid integer, in auth_uid integer) returns any
{
-- dbg_obj_princ ('RDFData_DAV_RES_UPLOAD (', detcol_id, path_parts, ', [content], ', type, permissions, uid, gid, auth_uid, ')');
return -20;
}
;
create function DB.DBA."RDFData_DAV_PROP_REMOVE" (in id any, in what char(0), in propname varchar, in silent integer, in auth_uid integer) returns integer
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_PROP_SET" (in id any, in what char(0), in propname varchar, in propvalue any, in overwrite integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
if (propname[0] = 58)
{
return -16;
}
return -20;
}
;
create function DB.DBA."RDFData_DAV_PROP_GET" (in id any, in what char(0), in propname varchar, in auth_uid integer)
{
RDFData_log_message (current_proc_name ());
return -11;
}
;
create function DB.DBA."RDFData_DAV_PROP_LIST" (in id any, in what char(0), in propmask varchar, in auth_uid integer)
{
RDFData_log_message (current_proc_name ());
return vector ();
}
;
create function DB.DBA."RDFData_ACCESS_PARAMS" (in detcol_id any, out access varchar, out gid integer, out uid integer)
{
declare access_tmp varchar;
whenever not found goto ret;
access := '000100100N';
gid := http_nogroup_gid ();
uid := http_nobody_uid ();
if (isinteger (detcol_id))
{
select COL_PERMS, COL_GROUP, COL_OWNER into access_tmp, gid, uid from WS.WS.SYS_DAV_COL where COL_ID = detcol_id;
}
access[0] := access_tmp[0];
access[1] := access_tmp[1];
ret:
;
}
;
create procedure DB.DBA.RDFData_cast_dt_silent (in d any)
{
if (__tag (d) = 211)
return d;
else
{
declare exit handler for sqlstate '*'
{
return now ();
};
return cast (d as datetime);
}
}
;
create function DB.DBA."RDFData_DAV_DIR_SINGLE" (in id any, in what char(0), in path any, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
-- dbg_obj_princ ('RDFData_DAV_DIR_SINGLE (', id, what, path, auth_uid, ')');
declare path_parts any;
declare access, ownergid, owner_uid, mime any;
declare len int;
DB.DBA."RDFData_ACCESS_PARAMS" (id[1], access, ownergid, owner_uid);
if (isstring (path))
path_parts := split_and_decode (path, 0, '\0\0/');
else
path_parts := path;
len := length (path_parts);
if (what = 'C')
return vector (DAV_CONCAT_PATH (path, ''), 'C', 0, now (), id, access, ownergid, owner_uid, now (), 'dav/unix-directory', path_parts [len - 2]);
mime := 'application/rdf+xml';
if (is_http_ctx ())
{
declare lpath varchar;
lpath := http_path ();
if (lpath like '%.ttl' or lpath like '%.n3')
mime := 'text/rdf+n3';
}
return vector (DAV_CONCAT_PATH (path, ''), 'R', 0, now (), id, access, ownergid, owner_uid, now (), mime, path_parts [len - 1]);
}
;
create function DB.DBA."RDFData_DAV_DIR_LIST" (in detcol_id any, in path_parts any, in detcol_path varchar, in name_mask varchar, in recursive integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
declare top_davpath varchar;
declare res any;
declare top_id, descnames any;
declare what char (1);
declare access, filt_lg varchar;
declare ownergid, owner_uid, dn_ctr, dn_count integer;
declare gr, u_name any;
vectorbld_init (res);
DB.DBA."RDFData_ACCESS_PARAMS" (detcol_id, access, ownergid, owner_uid);
-- dbg_obj_princ ('RDFData_DAV_DIR_LIST (', detcol_id, path_parts, detcol_path, name_mask, recursive, auth_uid, ')');
if ((0 = length (path_parts)) or ('' = path_parts[length (path_parts) - 1]))
what := 'C';
else
what := 'R';
if ('C' = what and 1 = length(path_parts))
top_id := vector (UNAME'RDFData', detcol_id, null, owner_uid, null, null); -- may be a fake id because top_id[4] may be NULL
else
top_id := DB.DBA."RDFData_DAV_SEARCH_ID" (detcol_id, path_parts, what);
if (DAV_HIDE_ERROR (top_id) is null)
{
return vector();
}
top_davpath := DAV_CONCAT_PATH (detcol_path, path_parts);
if ('R' = what)
{
return vector (DB.DBA."RDFData_DAV_DIR_SINGLE" (top_id, what, top_davpath, auth_uid));
}
gr := DAV_PROP_GET_INT (detcol_id, 'C', 'virt:rdfdata_graph', 0);
filt_lg := DAV_PROP_GET_INT (detcol_id, 'C', 'virt:rdfdata_lang', 0);
if (not isstring (gr) or length (gr) = 0)
{
u_name := (select p.COL_NAME from WS.WS.SYS_DAV_COL p, WS.WS.SYS_DAV_COL c
where c.COL_ID = detcol_id and p.COL_ID = c.COL_PARENT);
gr := sioc..user_doc_iri (u_name);
}
if (not isstring (filt_lg))
filt_lg := '';
if (is_http_ctx () and filt_lg = '*http*')
{
filt_lg := http_request_header (http_request_header (), 'Accept-Language', null, '');
}
-- dbg_obj_print (detcol_id, gr);
if (top_id[2] is null)
{
-- vectorbld_acc (res,
-- vector (
-- DAV_CONCAT_PATH (top_davpath, 'All') || '/',
-- 'C',
-- 0,
-- now (),
-- vector (UNAME'RDFData', detcol_id, -1),
-- access,
-- ownergid,
-- owner_uid,
-- now (),
-- 'dav/unix-directory',
-- 'All')
-- );
FOR SELECT CLS FROM (
sparql
select distinct ?CLS
where {
graph `iri(?:gr)`
{
?x a ?CLS .
} } ) sub do
{
declare tmp, tit, pref any;
declare p1, p2, p3, pos int;
p1 := coalesce (strrchr (cls, '#'), -1);
p2 := coalesce (strrchr (cls, '/'), -1);
p3 := coalesce (strrchr (cls, ':'), -1);
pos := __max (p1, p2, p3);
if (pos > 0)
{
tit := subseq (CLS, pos + 1);
tmp := subseq (CLS, 0, pos + 1);
pref := RDFData_std_pref (tmp);
if (pref is not null)
tit := pref || ':' || tit;
else
tit := CLS;
}
else
tit := CLS;
tit := replace (tit, '/', '^2f');
tit := replace (tit, '#', '^23');
--tit := sprintf ('%U', tit);
vectorbld_acc (res,
vector (
DAV_CONCAT_PATH (top_davpath, tit) || '/',
'C',
0,
now (),
vector (UNAME'RDFData', detcol_id, iri_to_id (CLS)),
access,
ownergid,
owner_uid,
now (),
'dav/unix-directory',
tit)
);
}
}
else if (top_id[2] is not null and length (top_id) = 4)
{
declare cs any;
declare qr, rset, mdta, h, dict, is_all any;
declare inc, limit int;
limit := 1000;
inc := 0;
is_all := 0;
cs := top_id[2];
cs := id_to_iri (cs);
if (cs = 'All')
{
is_all := 1;
cs := '?cls';
return vector ();
}
else
cs := sprintf ('<%S>', cs);
--dbg_obj_print (top_id[2]);
qr := sprintf ('sparql
define output:valmode "LONG"
prefix dc:
prefix dct:
prefix rdfs:
prefix skos:
SELECT ?X ?L ?T ?PL ?CR ?MOD
where
{
graph <%S>
{
?X a %s
optional { ?X rdfs:label ?L } .
optional { ?X dc:title ?T } .
optional { ?X skos:prefLabel ?PL } .
optional { ?X dct:created ?CR } .
optional { ?X dct:modified ?MOD } .
}
}', gr, cs);
dict := dict_new ();
exec (qr, null, null, vector (), 0, null, null, h);
while (0 = exec_next (h, null, null, rset))
{
declare tit, lg any;
declare X,L,T,PL,CR,MOD any;
--dbg_obj_print (rset);
X := rset[0];
L := rset[1];
T := rset[2];
PL := rset[3];
CR := rset[4];
MOD := rset[5];
cr := coalesce (cr, now ());
mod := coalesce (mod, now ());
cr := RDFData_cast_dt_silent (cr);
mod := RDFData_cast_dt_silent (mod);
--dbg_obj_print (cr, mod);
tit := coalesce (L, T, PL);
lg := '';
if (is_all)
tit := 'iid';
else if (tit is null)
tit := '~unnamed~';
else
{
lg := DB.DBA.RDF_LANGUAGE_OF_LONG (tit, '');
tit := DB.DBA.RDF_SQLVAL_OF_LONG (tit);
}
--dbg_obj_print (filt_lg, lg, strstr (filt_lg, lg));
if (filt_lg <> '' and lg <> '' and strstr (filt_lg, lg) is null)
goto next_row;
if (dict_get (dict, X) = 1)
goto next_row;
tit := sprintf ('%s (%i).rdf', tit, iri_id_num (iri_to_id (X)));
--tit := replace (sprintf ('%U', x), '/', '%252F');
--dbg_obj_print (tit, lg);
vectorbld_acc (res,
vector (
DAV_CONCAT_PATH (top_davpath, tit),
'R',
0,
mod,
vector (UNAME'RDFData', detcol_id, cs, iri_to_id (X)),
access,
ownergid,
owner_uid,
cr,
'application/rdf+xml',
tit)
);
dict_put (dict, X, 1);
inc := inc + 1;
if (inc > limit)
goto end_loop;
next_row:;
}
end_loop:;
exec_close (h);
}
finalize_res:
vectorbld_final (res);
return res;
}
;
create function RDFData_std_pref (in iri varchar, in rev int := 0)
{
declare v any;
v := vector (
'http://xmlns.com/foaf/0.1/', 'foaf',
'http://rdfs.org/sioc/ns#', 'sioc',
'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdf',
'http://www.w3.org/2000/01/rdf-schema#', 'rdfs',
'http://www.w3.org/2003/01/geo/wgs84_pos#', 'geo',
'http://atomowl.org/ontologies/atomrdf#', 'aowl',
'http://purl.org/dc/elements/1.1/', 'dc',
'http://purl.org/dc/terms/', 'dct',
'http://www.w3.org/2004/02/skos/core#', 'skos',
'http://rdfs.org/sioc/types#', 'sioct',
'http://sw.deri.org/2005/04/wikipedia/wikiont.owl#', 'wiki',
'http://www.w3.org/2002/01/bookmark#', 'bm',
'http://www.w3.org/2003/12/exif/ns/', 'exif',
'http://www.w3.org/2000/10/annotation-ns#', 'ann',
'http://purl.org/vocab/bio/0.1/', 'bio',
'http://www.w3.org/2001/vcard-rdf/3.0#', 'vcard',
'http://www.w3.org/2002/12/cal#', 'vcal',
'http://www.w3.org/2002/07/owl#', 'owl',
'http://web.resource.org/cc/', 'cc',
'http://dbpedia.org/class/yago/', 'dbp'
);
if (rev)
{
declare nv, l any;
nv := make_array (length (v), 'any');
for (declare i, j int, j := 0, i := length (v) - 1; i >= 0; i := i - 2, j := j + 2)
{
nv[j] := v[i];
nv[j+1] := v[i-1];
}
return get_keyword (iri, nv, null);
}
else
return get_keyword (iri, v, null);
}
;
create function DB.DBA."RDFData_DAV_DIR_FILTER" (in detcol_id any, in path_parts any, in detcol_path varchar, inout compilation any, in recursive integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
-- dbg_obj_princ ('RDFData_DAV_DIR_FILTER (', detcol_id, path_parts, detcol_path, compilation, recursive, auth_uid, ')');
return vector();
}
;
create function DB.DBA."RDFData_DAV_SEARCH_ID" (in detcol_id any, in path_parts any, in what char(1)) returns any
{
RDFData_log_message (current_proc_name ());
-- dbg_obj_princ ('RDFData_DAV_SEARCH_ID (', detcol_id, path_parts, what, ')');
declare orig_id, ctr, len integer;
declare r_id, cl_id, cl any;
declare access, ownergid, owner_uid any;
DB.DBA."RDFData_ACCESS_PARAMS" (detcol_id, access, ownergid, owner_uid);
if (path_parts[0] = '' or path_parts[0] is null)
return -1;
if (path_parts[0] <> '')
{
declare x, pos, pref, url any;
cl := path_parts[0];
pos := strchr (cl, ':');
pref := subseq (cl, 0, pos);
url := RDFData_std_pref (pref, 1);
if (url is null)
{
cl := replace (cl, '^2f', '/');
cl := replace (cl, '^23', '#');
cl_id := iri_to_id (cl);
--dbg_obj_print ('cl:',cl);
}
else
{
cl := subseq (cl, pos + 1);
cl := url || cl;
cl_id := iri_to_id (cl);
}
}
if (length (path_parts) = 2 and what = 'C')
{
return vector (UNAME'RDFData', detcol_id, cl_id, owner_uid);
}
else if (length (path_parts) = 2 and path_parts[1] <> '' and what = 'R')
{
declare t, arr any;
t := path_parts[1];
arr := sprintf_inverse (t, '%s (%d).%s', 1);
if (3 > length (arr))
return -1;
r_id := iri_id_from_num (arr [1]);
-- dbg_obj_print (arr, r_id);
return vector (UNAME'RDFData', detcol_id, cl_id, owner_uid, r_id);
}
return -20;
}
;
create function DB.DBA."RDFData_DAV_SEARCH_PATH" (in id any, in what char(1)) returns any
{
declare col_path varchar;
declare ret any;
RDFData_log_message (current_proc_name ());
-- dbg_obj_princ ('RDFData_DAV_SEARCH_PATH (', id, what, ')');
col_path := WS.WS.COL_PATH (id[1]);
ret := sprintf ('%s%s/iid (%d).rdf', col_path, id_to_iri (id[2]), iri_id_num (id[4]));
-- dbg_obj_print (ret);
return ret;
}
;
create function DB.DBA."RDFData_DAV_RES_UPLOAD_COPY" (in detcol_id any, in path_parts any, in source_id any, in what char(1), in overwrite_flags integer, in permissions varchar, in uid integer, in gid integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_RES_UPLOAD_MOVE" (in detcol_id any, in path_parts any, in source_id any, in what char(1), in overwrite_flags integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_RES_CONTENT" (in id any, inout content any, out type varchar, in content_mode integer) returns integer
{
RDFData_log_message (current_proc_name ());
declare iri, url, qr, _from any;
declare path, params, lines, ses, gr any;
-- dbg_obj_princ ('RDFData_DAV_RES_CONTENT (', id, ', [content], [type], ', content_mode, ')');
if (id [4] is null)
return -20;
type := 'application/rdf+xml';
if (is_http_ctx ())
{
declare lpath varchar;
lpath := http_path ();
if (lpath like '%.rdf')
type := 'application/rdf+xml';
else
type := 'text/rdf+n3';
}
iri := id_to_iri (id [4]);
-- dbg_obj_print (iri);
_from := '';
gr := DAV_PROP_GET_INT (id[1], 'C', 'virt:rdfdata_graph', 0);
if (__proc_exists ('sioc.DBA.get_graph') is not null and gr = sioc.DBA.get_graph ())
{
declare pg any;
declare tmp, uname any;
declare pos int;
pg := http_param ('page');
if (not isstring (pg))
pg := '0';
pg := atoi (pg);
-- take data from ODS graph
if (regexp_match ('https?://([^/]*)/dataspace/(person|organization)/(.*)', iri) is not null and iri not like '%/online_account/%')
{
tmp := sprintf_inverse (iri, 'http%s://%s/dataspace/%s/%s', 0);
tmp := tmp[3];
pos := coalesce (strchr (tmp, '#'), strchr (tmp, '/'));
if (pos is not null)
uname := subseq (tmp, 0, pos);
else
uname := tmp;
ses := sioc..compose_foaf (uname, type, pg);
goto ret_place2;
}
else if (regexp_match ('https?://([^/]*)/dataspace/([^/]*)(#this|/sioc.rdf|/sioc.n3)?\x24', iri) is not null
and __proc_exists ('sioc.DBA.ods_sioc_obj_describe') is not null)
{
tmp := sprintf_inverse (iri, 'http%s://%s/dataspace/%s', 0);
tmp := tmp[2];
pos := coalesce (strchr (tmp, '#'), strchr (tmp, '/'));
if (pos is not null)
uname := subseq (tmp, 0, pos);
else
uname := tmp;
ses := sioc..ods_sioc_obj_describe (uname, type, pg);
goto ret_place2;
}
if (__proc_exists ('sioc.DBA.ods_sioc_container_obj_describe') is not null)
{
ses := sioc..ods_sioc_container_obj_describe (iri, type, pg);
goto ret_place2;
}
else
{
DB.DBA.OdsIriDescribe (iri, type);
goto ret_place;
}
}
if (isstring (gr) and length (gr))
_from := sprintf (' FROM <%s>', gr);
qr := sprintf ('describe <%s> %s', iri, _from);
path := vector ();
--dbg_obj_print (qr);
params := vector ('query', qr, 'format', 'application/rdf+xml');
lines := vector ();
WS.WS."/!sparql/" (path, params, lines);
ret_place:
ses := http_get_string_output (1);
ret_place2:
--dbg_obj_print (string_output_string (ses));
http_rewrite ();
if (content_mode = 1)
http (ses, content);
else
content := string_output_string (ses);
return 0;
}
;
create function DB.DBA."RDFData_DAV_SYMLINK" (in detcol_id any, in path_parts any, in source_id any, in what char(1), in overwrite integer, in uid integer, in gid integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_DEREFERENCE_LIST" (in detcol_id any, inout report_array any) returns any
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_RESOLVE_PATH" (in detcol_id any, inout reference_item any, inout old_base varchar, inout new_base varchar) returns any
{
return -20;
}
;
create function DB.DBA."RDFData_DAV_LOCK" (in path any, in id any, in type char(1), inout locktype varchar, inout scope varchar, in token varchar, inout owner_name varchar, inout owned_tokens varchar, in depth varchar, in timeout_sec integer, in auth_uid integer) returns any
{
RDFData_log_message (current_proc_name ());
return -20;
}
;
create function DB.DBA."RDFData_DAV_UNLOCK" (in id any, in type char(1), in token varchar, in auth_uid integer)
{
RDFData_log_message (current_proc_name ());
return -27;
}
;
create function DB.DBA."RDFData_DAV_IS_LOCKED" (inout id any, inout type char(1), in owned_tokens varchar) returns integer
{
RDFData_log_message (current_proc_name ());
return 0;
}
;
create function DB.DBA."RDFData_DAV_LIST_LOCKS" (in id any, in type char(1), in recursive integer) returns any
{
RDFData_log_message (current_proc_name ());
return vector ();
}
;
create procedure DB.DBA."RDFData_MAKE_DET_COL" (in path varchar, in gr varchar := null, in lg varchar := null)
{
declare colid int;
colid := DAV_MAKE_DIR (path, http_dav_uid (), null, '110100100N');
if (colid < 0)
signal ('42000', 'Unable to create RDFData DET collection');
update WS.WS.SYS_DAV_COL set COL_DET='RDFData' where COL_ID = colid;
if (gr is not null)
DAV_PROP_SET_INT (path, 'virt:rdfdata_graph', gr, null, null, 0, 0, 1, http_dav_uid ());
if (lg is not null)
DAV_PROP_SET_INT (path, 'virt:rdfdata_lang', lg, null, null, 0, 0, 1, http_dav_uid ());
}
;