W3C home > Mailing lists > Public > www-rdf-interest@w3.org > July 2003

Re: Intellidimension RDF Gateway Package for URI Query Agent (URIQA) Specification

From: Patrick Stickler <patrick.stickler@nokia.com>
Date: Wed, 2 Jul 2003 14:26:53 +0300
Message-ID: <004301c3408c$da3d10a0$e00ea20a@NOE.Nokia.com>
To: "ext Derrish Repchick" <drepchick@intellidimension.com>, <www-rdf-interest@w3.org>


----- Original Message -----
From: "ext Derrish Repchick" <drepchick@intellidimension.com>
To: <www-rdf-interest@w3.org>
Sent: 01 July, 2003 20:33
Subject: Re: Intellidimension RDF Gateway Package for URI Query Agent
(URIQA) Specification


>
>
> > I've got a few preliminary comments/questions (more sure to be coming):
> >
> > 1. One thing I noted when going through the online documentation for
your
> > URIQA package, in the definition
> >
> > function Package_OnPutDescription()
> > {
> >     if (Request.serverVariables["HTTP_URI_RESOLUTION_MODE"] !=
> > "Description")
> >     {
> >         Response.statusCode = 501;
> >         return; // Not a URIQA request
> >     }
> >
> >     // Get the URI of the resource from the request
> >     var id = new Resource(Request.serverVariables["REQUEST_URL"]);
> >
> >     // Read the resource description from the request and parse the
> contents
> >     // as RDF/XML using the Inet data service.
> >     var data = Request.binaryRead();
> >
> >     var ds = new DataSource("inet?parsetype=rdf&src=" +
> > Server.urlEncode(data));
> >
> >     // Add only the statements about the resource to the description
> table.
> >     var rs = (INSERT {?p ?s ?o} INTO uriqa USING #ds RULEBASE uriqa
> >         WHERE (?s=#id OR getAnon(#id, ?s)) AND {?p ?s ?o});
> >
> >     Response.addHeader("URI-Resolution-Mode", "Description");
> > }
> >
> > your implementation would fail to commit any reifications or
> > statements about any anonymous node values.
> > Ideally, there would exist as part of the URIQA package, a generic
> > method akin to getDescription() in my Java implementation, which
> > given a URI and a knowledge base, would extract a concise bounded
> > description of the resource from the knowledge base. The input RDF/XML
> > could then be parsed and loaded into a temporary knowledge base, the
> > description extracted, and then committed to the persistent knowledge
> > base. Of course, that same function would find use throughout all of
> > the URIQA defined behavior of the package, for the other methods as
well.
> >
>
> The implementation above makes use of two tables. The first table "ds" is
a
> local in-memory table that is loaded by parsing the posted RDF/XML. The
> second table "uriqa" is a global disk-based table that acts as the
> application's knowledge repository. The INSERT command shown above copies
> all of the statements about the request URI ("id") from the request into
the
> repository. This command makes use of an inference rule "getAnon" (see
> below) that recursively returns the uri's of all embedded anonymous nodes.
> This ensures that all statements about the anonymous node are also
inserted
> into the knowlege repository.
>
> INFER getAnon(?s, ?anon) FROM ({?p ?s ?anon} AND (substr(?anon, 0,
> 5)="guid:") OR getAnon(?s, ?anon));

Right. Missed that.

OK then for anonymous nodes. How about reifications? ;-)

>
> > 2. Does/Will the RDF Gateway provide for the equivalent of servlets,
> > where I can map a particular URI prefix to a function? I see that RSPs
> > act that way, but I wouldn't want to tie that behavior to a particular
> > syntax. I.e., can one have http://sw.nokia.com/foo be bound to a script
> > so that http://sw.nokia.com/foo?bar=blargh would be executed as a call
> > to foo(bar=blargh)?
> >
> > If http://sw.nokia.com/foo is an RDFQL script, will the server execute
> > that script when the request URI is http://sw.nokia.com/foo?bar=blargh?
>
> Both of the above URI's will cause the same RSP to be executed for a
> presentation request. However URIQA description requests are handled
> differently. A description request causes the appropriate event handler
> function (Package_OnXxxDescription) to be called for the Package. You can
> think of a Package as a virtual directory, so if you created a Package
named
> "foo" all of the following description requests would cause the same event
> handler function to be called.
>
> http://sw.nokia.com/foo
> http://sw.nokia.com/foo?bar=blargh
> http://sw.nokia.com/foo/dir
> http://sw.nokia.com/foo/dir/subdir
>
> Your event handler function can get the request URI by calling
> Request.serverVariables["REQUEST_URL"]. RDFQL (like-ECMA Script) supports
> both maps and function pointers so I would imagine it would not be too
> difficult to implement something like this.
>
> // build a function map
> var funcs = new Array();
> funcs["http://sw.nokia.com/foo"] = func1;
> funcs["http://sw.nokia.com/foo/dir"] = func2;
>
> // call the appropriate handler and pass it the query string
> funcs[Request.serverVariables["REQUEST_URL"]]
> (Request.serverVariables["QUERY_STRING"]] );

Cool. Just what I want to be able do.

> >
> > 3. Does RDF Gateway already provide, or would it be difficult to provide
> > a means to filter query results based on security considerations? E.g.
> > rather than flag an error and return nothing if a given user does not
> > have the right to view a few statements in the results, simply filter
> > out all statements that are disallowed by their access rights when
> returning
> > the results. One thing we do in the Nokia ontologies is qualify
particular
> > resources by confidentiality or even explicit access rights, and ideally
> > the query processes would work the same for all users for all knowledge,
> > differing only in what is allowed to be exposed to the user. Given the
> > complexity of our ontologies, it would be prohibitively burdensome to
> > try to manage accessibility per source, knowledgebase, server, etc.
>
> RDF Gateway has context-based security. The context is the fourth member
of
> all statements and is ideal for implementing statement level security.
> Simply store your statements using different context URIs and then assign
> role or user permissions to the context. If a user does not have access to
a
> context then statements are "quietly" filtered from queries. This includes
> INSERTs, DELETEs and SELECTs based on read, write, and delete permissions.

Beautiful!

From what I've read from your online specs, this context mechanism would
also
work for implementing scoping, such as language-specific labels, etc.


> > PS: Is Intellidimension a member of the W3C? If so, would you folks be
> > interested in partnering with Nokia in publishing a W3C Note promoting
> > URIQA?
> >
>
> Intellidimension is not currently a W3C member but we feel we can bring
> substantial value to the table in developing such a specification.

We'll be in touch.

Cheers,

Patrick
Received on Wednesday, 2 July 2003 07:27:07 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:51:59 GMT