Re: Musings on resource grouping

I'm still working on DRs/rules mapping. However, a very preliminary
solution may be mapping DRs into rules by using a rule [sic!].

Such rule will be a nested one, and it may have the following
(simplified) form:

 {?rsc a foaf:Document . ?dr a :WDR . ?dr :hasScope ?scope . } =>
   { {?rsc :satisfies ?scope . } => {?dr :appliesTo ?rsc} . } .

Now, if you have a resource <rsc_1> and a DR <dr_1> containing a scope,
a reasoner infers the following rule:

 { <rsc_1> :satisfies <_g0> . } => {<dr_1> :appliesTo <rsc_1> } .

where <_g0> is a reference to the blank node corresponding to the scope
of <dr_1>.

Note that this is just a tentative idea, which needs to be checked
thoroughly.

Andrea


Andrea Perego wrote:
> As I said, it should be possible to map a DR into a rule without any
> modification of its structure (so, without adding a :hasAttribution
> property). I'll endeavour to check this quickly.
> 
> Andrea
> 
> 
> Phil Archer wrote:
>> Sounds like we're a long way to agreement here which is very refreshing.
>>
>> I have played with an attribution property before now as it seems
>> logical from the definition we came up with the XG of a content label
>> [1]. i.e. "A resource that contains a description, a definition of the
>> scope of the description and assertions about both the circumstances of
>> its own creation and the entity that created it". Since we have a block
>> of data for the description and one for the scope it seems logical and
>> consistent to have a block of data for the attribution. However, we need
>> to watch the semantics.
>>
>> We want
>>
>> wd:dr_1  a  :WDR;
>>          foaf:maker foa:me
>>
>> That is, the DR was made by the entity foa:me (strictly speaking the
>> entity that is the principle subject of foa:me). Now put in the
>> attribution block:
>>
>> wd:dr_1  a  :WDR;
>>          wdr:hasAttribution [
>>              foaf:maker foa:me
>>              ...]
>>
>> Now it is the blank node that is the subject of the triple with the
>> foa:me object. We might give that blank node a URI but even so, the same
>> thing applies. We can get around this with reification but I worry we
>> may be introducing a bit of complexity for the sake of what looks neat??
>>
>> Phil
>>
>>
>> [1] http://www.w3.org/2005/Incubator/wcl/XGR-wcl/Overview.html#gtCLabel
>>
>> Andrea Perego wrote:
>>> I see your point, Phil (by the way, thanks for this explanation, which
>>> makes clearer to me the choices made when defining the WDR vocabulary).
>>>
>>> I completely agree that, if we have to use a rule language, we should
>>> use a standard one. Also, we cannot oblige people to use specific tools.
>>> Actually, I didn't mean that N3 (and Cwm) was the right choice: I used
>>> it as an example, since it is a working RDF rule language and reasoners
>>> exist for it.
>>>
>>> However, leaving aside the `explicit' use of rules (which, as you say,
>>> may be applied when specifying users' preferences), I think that it
>>> might be relevant to POWDER the fact itself that DRs and their scope are
>>> semantically equivalent to rules. This means that there exists a
>>> semantic interoperability between (a subset of) the WDR vocabulary and
>>> any (RDF) rule language, an interoperability which can be enforced by
>>> including in the definition of the wdr:WDR class and its properties
>>> statements saying that they are equivalent to the components of a rule.
>>>
>>> For instance, if a DR is structured as follows:
>>>
>>> <wdr:WDR ...>
>>>   <wdr:attribution>
>>>     ...
>>>   </wdr:attribution>
>>>   <wdr:hasScope>
>>>     ...
>>>   </wdr:hasScope>
>>> </wdr:WDR>
>>>
>>> we can state in the WDR vocabulary (or also elsewhere) that the
>>> wdr:hasScope stuff corresponds to the antecedent of a rule, the
>>> wdr:attribution stuff corresponds to the consequent of a rule, whereas
>>> the wdr:WDR corresponds to the implication operator. Note that I
>>> slightly modified the structure of a DR, which does not have a
>>> wdr:attribution property, only to make clearer the example. I think that
>>> it should be possible to map a DR into a rule without any modification
>>> of its structure (actually, I have to check this).
>>>
>>> Note that this mapping is completely transparent to end users: DRs are
>>> expressed according to the "data-based approach" (no Semantic Web
>>> stuff), but they can still be processed by an RDF reasoner (no matter
>>> which reasoner). Besides establishing a strong link with RIF, this will
>>> make people free to use the tools they prefer (SPARQL or reasoners).
>>>
>>> Andrea
>>>
>>>
>>> Phil Archer wrote:
>>>> Thanks very much for setting this out, Andrea.
>>>>
>>>> During yesterday's call I was trying to be as neutral as I could (it's
>>>> the chair thing!) but on the list I'm going to be more partisan.
>>>>
>>>> Things I like about this:
>>>>  - it makes use of an existing rule language and works on existing,
>>>> freely available software.
>>>>  - This suggests that when the Rule Interchange Format Group [1]
>>>> completes its work we'll be able fairly easily to switch over to using
>>>> that (assuming they don't obviate the need for this by producing a
>>>> Recommendation that says "use N3 Rules"!)
>>>>  - It's more semantic web friendly than, what I call, the "data based
>>>> approach" (i.e. my original posting in this thread).
>>>>  - You've looked at the problem afresh and come up with a cracking good
>>>> alternative to the preconceived ideas. That's how breakthroughs are
>>>> made.
>>>>
>>>> Things I don't like about this:
>>>>  - it uses a non-standardised rules language (despite its pedigree -
>>>> TimBL and DanC - N3 has not been through a standardisation process -
>>>> that's what the RIF is for).
>>>>  - that means we would effectively be recommending Cwm or Euler as these
>>>> are the inference engines that use N3. Yes, anyone can build an RDF
>>>> reasoner that uses N3, but this is quite rare. Neither of the big 2 RDF
>>>> toolkits, Redland [2] and Jena [3], seems to support N3 Rules. Better, I
>>>> think, to specify the structure and semantics of the data and leave the
>>>> implementation open.
>>>>
>>>> Also I think there is a fundamental conflict of design ethos here. RDF
>>>> is about triples (I know you know but this is a public discussion).
>>>> Because the triples are anchored in URIs, they can be anywhere, agents
>>>> can pick up the triples and process them and make sense of them readily.
>>>> In other words, it's an open architecture. POWDER differs firstly in
>>>> that we wish to make statements about lots of resources at once - that's
>>>> the biggest conflict - and we want to take steps to lock things down at
>>>> least a little so that provenance/attribution is explicit and can be
>>>> authenticated.
>>>>
>>>> In the work we've done up to now in Quatro and elsewhere, we have met
>>>> resistance from people who are unconvinced about the semantic web -
>>>> "it's a solution looking for a problem" and all that. I'm up there on
>>>> the platform to say they're wrong and should recognise what it can do,
>>>> but I think if we propose a system based on a specific rule language,
>>>> itself based on RDF, implemented in a handful of pieces of software
>>>> written largely by the same people (no matter how esteemed and respected
>>>> those people are) then I think we'll "up the anti" significantly. That
>>>> is, we'll increase resistance to take up substantially.
>>>>
>>>> What I would prefer is an approach that sets out the data and its
>>>> semantics *and* shows how existing rule languages and query languages
>>>> can be used to interpret it.
>>>>
>>>> As you know, Andrea, Dan Connolly did some work on matching data and
>>>> users [4]. He used Cwm to process the data and match the user with the
>>>> resource but the actual label (description) was expressed in a similar
>>>> fashion to the data based approach. That is, he did use an off-shelf RDF
>>>> reasoner to process the data. The Quatro proxy [5] uses SPARQL to
>>>> extract data from RDF-Content Labels so just in those two instances we
>>>> have different methods of using essentially the same data.
>>>>
>>>> Where I think rules will *really* come into their own is when we come to
>>>>  encode user preferences. One of the goals of POWDER is to create a
>>>> standard (or more than one) that can replace PICS - PICSRules is part of
>>>> that and, well, the name says it all!
>>>>
>>>> My feeling is that a good standard will prescribe *just enough* so that
>>>> the system works, without unnecessarily proscribing methods some people
>>>> may feel comfortable with.
>>>>
>>>> This is a pretty fundamental debate that I hope will trigger wider
>>>> debate.
>>>>
>>>> Phil.
>>>>
>>>> [1] http://www.w3.org/2005/rules/wg
>>>> [2] http://librdf.org/
>>>> [3] http://jena.sourceforge.net/
>>>> [4] http://dig.csail.mit.edu/breadcrumbs/node/180
>>>> [5] http://www.quatro-project.org/TheQuatroProxy.htm
>>>>
>>>> Andrea Perego wrote:
>>>>> I would bring to your attention an alternative solution to resource
>>>>> grouping wrt the one based on the DRs' scope/packages. Very simply, the
>>>>> idea is to express the constraints determining the scope of the DR
>>>>> itself by using RDF rules.
>>>>>
>>>>> Thanks to this we can keep separate a DR and the scope of such DR. So,
>>>>> if we wish to apply to a group of resources the same DR, we just
>>>>> have to
>>>>>  specify a set of rules. Of course, the current WDR approach is a
>>>>> shortcut to this, but I think we'll have more flexibility using
>>>>> standard
>>>>> rule syntax and, in addition, we can use already existing RDF reasoners
>>>>> (such as Cwm [1] or Euler [2]) to verify whether a DR apply to a
>>>>> resource, without the need of developing further and ad hoc software
>>>>> tools. Finally, in a rule we can use any RDF/OWL vocabulary for
>>>>> expressing the conditions to be satisfied, without the need of defining
>>>>> ad hoc properties/classes.
>>>>>
>>>>> I think I can better explain myself with an example.
>>>>>
>>>>> Consider the strawman example at [3], reported herebelow (I use N3
>>>>> [4,5]
>>>>> instead of `plain' RDF for brevity's sake):
>>>>>
>>>>>     @prefix : <http://www.w3.org/2007/02/powder-ns#> .
>>>>>     @prefix ex: <http://example.org/vocabulary#> .
>>>>>     @prefix foa: <http://labellingauthority.example.org/foaf.rdf#> .
>>>>>     @prefix wd: <#> .
>>>>>
>>>>>     wd:description_1     ex:property1 "value 1";
>>>>>          ex:property2 "value 2" .
>>>>>
>>>>>     wd:description_2     ex:property3 "value 3";
>>>>>          ex:property4 "value 4" .
>>>>>
>>>>>     wd:description_3     ex:property1 "value 1";
>>>>>          ex:property4 "value 4" .
>>>>>
>>>>>     wd:dr_1     a :WDR;
>>>>>          <http://purl.org/dc/terms/issued> "2006-09-01";
>>>>>          :hasDescription wd:description_1;
>>>>>          :hasScope  [
>>>>>              a :Scope;
>>>>>              :UAstring "NOKIA";
>>>>>              :hasHost "example.org";
>>>>>              :hasURI "\\.jpg$" ];
>>>>>          :validUntil "2007-09-01";
>>>>>          <http://xmlns.com/foaf/0.1/maker> foa:me .
>>>>>
>>>>>     wd:dr_2     a :WDR;
>>>>>          <http://purl.org/dc/terms/issued> "2006-09-01";
>>>>>          :hasDescription wd:description_2;
>>>>>          :hasScope  [
>>>>>              a :Scope;
>>>>>              :hasHost "example.org";
>>>>>              :hasPath "foo" ];
>>>>>          :validUntil "2007-09-01";
>>>>>          <http://xmlns.com/foaf/0.1/maker> foa:me .
>>>>>
>>>>>     wd:dr_3     a :WDR;
>>>>>          <http://purl.org/dc/terms/issued> "2006-09-01";
>>>>>          :hasDescription wd:description_3;
>>>>>          :hasScope wd:primaryScope;
>>>>>          :validUntil "2007-09-01";
>>>>>          <http://xmlns.com/foaf/0.1/maker> foa:me .
>>>>>
>>>>>     wd:package     a :Package;
>>>>>          :hasDRs  (
>>>>>         wd:dr_1
>>>>>         wd:dr_2
>>>>>         wd:dr_3 );
>>>>>          :hasPackageScope wd:primaryScope .
>>>>>
>>>>>     wd:primaryScope     a :Scope;
>>>>>          :hasHost "example.org" .
>>>>>
>>>>>
>>>>> Now, by using rules to express the constraints determining the scope of
>>>>> each DR, we can reword the code above as follows:
>>>>>
>>>>>     @prefix : <http://www.w3.org/2007/02/powder-ns#> .
>>>>>     @prefix ex: <http://example.org/vocabulary#> .
>>>>>     @prefix foa: <http://labellingauthority.example.org/foaf.rdf#> .
>>>>>     @prefix wd: <#> .
>>>>>     @prefix foaf:  <http://xmlns.com/foaf/0.1/> .
>>>>>
>>>>>     wd:description_1     ex:property1 "value 1";
>>>>>          ex:property2 "value 2" .
>>>>>
>>>>>     wd:description_2     ex:property3 "value 3";
>>>>>          ex:property4 "value 4" .
>>>>>
>>>>>     wd:description_3     ex:property1 "value 1";
>>>>>          ex:property4 "value 4" .
>>>>>
>>>>>     wd:dr_1     a :WDR;
>>>>>          <http://purl.org/dc/terms/issued> "2006-09-01";
>>>>>          :hasDescription wd:description_1;
>>>>>          :validUntil "2007-09-01";
>>>>>          <http://xmlns.com/foaf/0.1/maker> foa:me .
>>>>>
>>>>>     wd:dr_2     a :WDR;
>>>>>          <http://purl.org/dc/terms/issued> "2006-09-01";
>>>>>          :hasDescription wd:description_2;
>>>>>          :validUntil "2007-09-01";
>>>>>          <http://xmlns.com/foaf/0.1/maker> foa:me .
>>>>>
>>>>>     wd:dr_3     a :WDR;
>>>>>          <http://purl.org/dc/terms/issued> "2006-09-01";
>>>>>          :hasDescription wd:description_3;
>>>>>          :validUntil "2007-09-01";
>>>>>          <http://xmlns.com/foaf/0.1/maker> foa:me .
>>>>>
>>>>>     {?rsc :UAstring "NOKIA";
>>>>>           :hasHost "example.org";
>>>>>           :hasURI "\\.jpg$" . }       => { wd:dr_1 :appliesTo ?rsc } .
>>>>>
>>>>>     {?rsc :hasHost "example.org";
>>>>>           :hasPath "foo" . }          => { wd:dr_2 :appliesTo ?rsc } .
>>>>>
>>>>>     {?rsc :hasHost "example.org" . }  => { wd:dr_3 :appliesTo ?rsc } .
>>>>>
>>>>>
>>>>> As you can see, DRs do not contain any more their scope, which is
>>>>> expressed by three rules (last lines), and both the package and the
>>>>> primary scope are gone.
>>>>>
>>>>> Syntactically, a rule consists of three components: an antecedent
>>>>> (containing a set of conditions), an implication operator (=>), and a
>>>>> consequent (containing one or more statements). Both the antecedent and
>>>>> the consequent are delimited by curly brackets (
>>>>> {conditions}=>{statement(s)} ). The meaning of a rule is that, if all
>>>>> the conditions in the antecedent are satisfied, the the statement(s) in
>>>>> the consequent are true. For instance, the rule
>>>>>
>>>>>     {?rsc :hasHost "example.org" . }  => { wd:dr_3 :appliesTo ?rsc } .
>>>>>
>>>>> states that, if a resource (denoted by variable ?rsc) has a URL where
>>>>> the host component is "example.org", then the DR identified by wd:dr_2
>>>>> applies to it.
>>>>>
>>>>> Now, if I access a resource with URL "http://www.example.org/foo.html"
>>>>> and we ask the reasoner to analyse the RDF file containing DRs and
>>>>> rules, it will return:
>>>>>
>>>>>     wd:dr_2     a :WDR;
>>>>>          <http://purl.org/dc/terms/issued> "2006-09-01";
>>>>>          :hasDescription wd:description_2;
>>>>>          :validUntil "2007-09-01";
>>>>>          <http://xmlns.com/foaf/0.1/maker> foa:me .
>>>>>          :appliesTo <http://www.example.org/foo.html> .
>>>>>
>>>>> thus providing the `view' of the RDF file concerning the DR(s) applying
>>>>> to the requested resource. (Of course, the whole content of the RDF
>>>>> file
>>>>> can still be read by retrieving the file itself without running the
>>>>> reasoner).
>>>>>
>>>>> The objection here may be that, if the scope is kept separate from the
>>>>> corresponding DR, anyone can publish a rule anywhere stating that,
>>>>> e.g.,
>>>>> wd:dr_2 applies to mysite.com. But if we suppose that DRs can be
>>>>> considered trustworthy only when valid/authenticated, we can apply the
>>>>> same approach to rules: a DR applies to a resource only if a
>>>>> valid/authentic rule states that. (By the way, Cwm has some built-in
>>>>> cryptographic functions which, maybe, can be used for this purpose
>>>>> [6]).
>>>>>
>>>>> Note however that by using rules we don't have necessary to separate a
>>>>> DR from its scope. For instance, the original DR wd:dr_2
>>>>>
>>>>>     wd:dr_2     a :WDR;
>>>>>          <http://purl.org/dc/terms/issued> "2006-09-01";
>>>>>          :hasDescription wd:description_2;
>>>>>          :hasScope  [
>>>>>              a :Scope;
>>>>>              :hasHost "example.org";
>>>>>              :hasPath "foo" ];
>>>>>          :validUntil "2007-09-01";
>>>>>          <http://xmlns.com/foaf/0.1/maker> foa:me .
>>>>>
>>>>> can be reworded as follows
>>>>>
>>>>>     {?rsc :hasHost "example.org"; :hasPath "foo" . }
>>>>>     => { wd:dr_2     a :WDR;
>>>>>          <http://purl.org/dc/terms/issued> "2006-09-01";
>>>>>          :hasDescription wd:description_2;
>>>>>          <http://xmlns.com/foaf/0.1/maker> foa:me .
>>>>>          :appliesTo ?rsc} .
>>>>>
>>>>> which is quite similar to the original one, but with the advantage that
>>>>> it can be processed by a RDF reasoner.
>>>>>
>>>>>
>>>>> Andrea
>>>>>
>>>>>
>>>>>
>>>>> [1] http://www.w3.org/2000/10/swap/doc/cwm.html
>>>>> [2] http://www.agfa.com/w3c/euler/
>>>>> [3] http://www.w3.org/2007/powder/History
>>>>> [4] http://www.w3.org/DesignIssues/Notation3.html
>>>>> [5] http://www.w3.org/DesignIssues/N3Logic
>>>>> [6] http://www.w3.org/2000/10/swap/doc/Trust

Received on Monday, 2 April 2007 13:44:27 UTC