Re: Possible New Model (was Re: status report - formal layer)

Thanks for having worked this out, Phil.

I would like to add just a note concerning an old issue, namely, whether
DR Descriptors should be included into the resource set definition or not.

Following Jeremy's mail [1], what we called the resource set definition 
(corresponding to wdr:ResourceSet, and renamed into wdr:URISet) now 
denotes a set of URIs, and not a set of resources.

I think this solves the issue above. In fact, if DR Descriptors are 
nested into wdr:URISet, they would denote the content/characteristics of 
a set of URIs, and not of the set of resources having a URI satisfying 
the resource set definition.

So, referring to one of your examples, the following DR-S:

<wdr:DR rdf:ID="DR_1">
   <wdr:hasScope rdf:parseType="Resource">
     <wdr:includeHosts>example.org</wdr:includeHosts>
     <wdr:hasDescriptors rdf:parseType="Resource">
       <ex:colour>red</ex:colour>
       <ex:shape>square</ex:shape>
     </wdr:hasDescriptors>
   </wdr:hasScope>
</wdr:DR>

should be rewritten:

<wdr:DR rdf:ID="DR_1">
   <wdr:hasScope rdf:parseType="Resource">
     <wdr:includeHosts>example.org</wdr:includeHosts>
   </wdr:hasScope>
   <wdr:hasDescriptors rdf:parseType="Resource">
     <ex:colour>red</ex:colour>
     <ex:shape>square</ex:shape>
   </wdr:hasDescriptors>
</wdr:DR>

Similarly, the following DR-O:

<DR xmlns="http://www.w3.org/2007/05/powder#"
     xmlns:ex="http://example.org/vocab#">
   <maker>http://authority.example.org/foaf.rdf#me</maker>
   <issued>2007-12-14</issued>
   <validFrom>2008-01-01</validFrom>
   <validUntil>2008-12-31</validUntil>
   <URISet>
     <includeHosts>example.org</includeHosts>
     <Descriptors ex:colour="red" ex:shape="square" />
   </URISet>
</DR>

should be:

<DR xmlns="http://www.w3.org/2007/05/powder#"
     xmlns:ex="http://example.org/vocab#">
   <maker>http://authority.example.org/foaf.rdf#me</maker>
   <issued>2007-12-14</issued>
   <validFrom>2008-01-01</validFrom>
   <validUntil>2008-12-31</validUntil>
   <URISet>
     <includeHosts>example.org</includeHosts>
   </URISet>
   <Descriptors ex:colour="red" ex:shape="square" />
</DR>



Andrea

--------
[1]http://lists.w3.org/Archives/Public/public-powderwg/2007Dec/0045


Phil Archer wrote:
> 
> As a follow up, I've tried expressing the same 4 examples in just XML - 
> see what you think.
> 
> Example 1
> =========
> RDF/XML: http://www.fosi.org/projects/powder/dr-o1.rdf
> XML only: http://www.fosi.org/projects/powder/dr-o1.xml
> 
> Which is short and sweet
> 
> <DR xmlns="http://www.w3.org/2007/05/powder#"
>     xmlns:ex="http://example.org/vocab#">
> 
>   <maker>http://authority.example.org/foaf.rdf#me</maker>
>   <issued>2007-12-14</issued>
>   <validFrom>2008-01-01</validFrom>
>   <validUntil>2008-12-31</validUntil>
> 
>   <URISet>
>     <includeHosts>example.org</includeHosts>
>     <Descriptors ex:colour="red" ex:shape="square" />
>   </URISet>
> </DR>
> 
> The first 4 lines of data would need to be transformed into other 
> namespaces - maker becomes <> foaf:maker 
> http://authority.example.org/foaf.rdf#me for example.
> 
> Then we get to the URI Set which encloses the description which, in this 
> case, comprises two simple properties/literal values - we can express 
> those as XML attributes.
> 
> How about the site that is generally be blue but the /foo area is red? I 
> reckon there are 2 ways to do this in XML
> 
> Example 2
> =========
> RDF/XML: http://www.fosi.org/projects/powder/dr-o2.rdf
> XML Only: http://www.fosi.org/projects/powder/dr-o2.xml
> OR: http://www.fosi.org/projects/powder/dr-o2a.xml
> 
> The first of these has two separate URI sets:
> 
> <URISet>
>   <includeHosts>example.org</includeHosts>
>   <includePathStartsWith>/foo</includePathStartsWith>
>   <Descriptors ex:colour="red" />
> </URISet>
> 
> <URISet>
>   <includeHosts>example.org</includeHosts>
>   <Descriptors ex:colour="blue" />
> </URISet>
> 
> Whilst the second makes it more explicit that the /foo section is a sub 
> set of the overall example.org set thus:
> 
> <URISet>
>   <includeHosts>example.org</includeHosts>
>   <Descriptors ex:colour="blue">
> 
>     <URISet>
>       <includePathStartsWith>/foo</includePathStartsWith>
>       <Descriptors ex:colour="red" />
>     </URISet>
> 
>   </Descriptors
> </URISet>
> 
> This is akin to previous work done in this area by Jo Rabin and Mark 
> Nottingham [2, 3]. As before, GRDDL has a lot to do here (it still needs 
> to work out that the URI set for the blue resources is those on 
> example.org where the path does *not* start with /foo).
> 
> Adding identifiers to the URISets is easy enough, as example 3 shows:
> 
> Example 3
> =========
> RDF/XML: http://www.fosi.org/projects/powder/dr-o3.rdf
> XML: http://www.fosi.org/projects/powder/dr-o3.xml
> 
> But the problem posed by example 4 doesn't go away. In this example, we 
> have two identical URI sets with different descriptions. Which one is 
> applied is conditional on which one the described resource links to.
> 
> Example 4
> =========
> 
> RDF/XML: http://www.fosi.org/projects/powder/dr-o4.rdf
> XML: http://www.fosi.org/projects/powder/dr-o4.xml
> 
> So each of the examples in my previous mail can be written in simpler 
> XML. Operationally, one would expect content providers and labelling 
> authorities alike to use the simpler XML version and the GRDDL transform 
> to a full RDF/OWL DR-S to be useful in situations where reasoning was 
> required or where an application already made use of semantics. But what 
> are the pros and cons?
> 
> In favour of XML only for DR-O:
>  - it does not convey potentially misleading data. It's just flat XML 
> that you can GRDDL (transform) if you wish to.
>  - it is more compact
>  - DO-O and DR-S would have different MIME types
>  - GRDDL can't work with RDF/XML
>  - We'd keep the "Semantic Web is a waste of time" merchants happy.
> 
> In favour of RDF/XML:
>  - The argument that seemed to carry this when we discussed it (I can't 
> find it in the minutes) was that having two different file and MIME 
> types would lead to confusion (everyone would get it wrong - goodness 
> knows MIME types are often wrongly declared).
> - There is more flexibility in what can be expressed in RDF/XML, 
> particularly in terms of the descriptions.
> - A DR-O is closer to a DR-S so you get into the Sem Web mindset from 
> the start, rather than it being seen 9by some surely) as an add-on.
> - We'd risk upsetting the Semantic Web merchants and, potentially, seen 
> to be undermining the SW activity as a whole.
> - I can think of at least one person (the Bard of Chiswick) who would 
> crow for years.
> 
> I'm not convinced about the first of these arguments against. Day to 
> day, it's going to be XML that gets used so seeing the RDF MIME type 
> would probably be unusual. I've just tried to create an example to show 
> the second one without success so I'm not convinced of that one either! 
> The rest, to be honest, are space fillers.
> 
> If - *if* - we can create a nice XSLT that goes from a DR written in XML 
> to one written in OWL, then personally I'm sold.
> 
> Phil.
> 
> 
> [1] http://lists.w3.org/Archives/Public/public-powderwg/2008Jan/0018.html
> [2] http://www.w3.org/2005/Incubator/wcl/matching.html
> [3] http://www.w3.org/TR/urispace
> 
> 
> Phil Archer wrote:
>>
>> As promised on Friday afternoon, here are some musings on a possible 
>> new structure for Operational POWDER (POWDER-O), taking into account 
>> the recent discussion.
>>
>>
>> Example 1
>> =========
>> RDF/XML: http://www.fosi.org/projects/powder/dr-o1.rdf
>> Graph: http://www.fosi.org/projects/powder/servlet_63142.png
>>
>> Let's begin with a simple case, that all resources dereferenced from a 
>> URI with a host component ending with example.org are red and square 
>> (I got these line numbers from the RDF validator but I've knocked off 
>> the namespace declarations).
>>
>> 11:   <rdf:Description rdf:about="">
>> 12:     <foaf:maker 
>> rdf:resource="http://authority.example.org/foaf.rdf#me" />
>> 13:     <dcterms:issued>2007-12-14</dcterms:issued>
>> 14:     <wdr:validFrom>2008-01-01</wdr:validFrom>
>> 15:     <wdr:validUntil>2008-12-31</wdr:validUntil>
>> 16:   </rdf:Description>
>> 17:
>> 18:   <wdr:DR rdf:ID="DR_1">
>> 19:     <wdr:hasScope rdf:parseType="Resource">
>> 20:       <wdr:includeHosts>example.org</wdr:includeHosts>
>> 21:       <wdr:hasDescriptors rdf:parseType="Resource">
>> 22:         <ex:colour>red</ex:colour>
>> 23:         <ex:shape>red</ex:shape>
>> 24:       </wdr:hasDescriptors>
>> 25:     </wdr:hasScope>
>> 26:   </wdr:DR>
>>
>> The document was made by "...#me" on 14th December 2007 and as valid 
>> for 2008. If you trust "...#me" and today's date is in 2008, then the 
>> DR in the document can be transformed into its semantic encoding 
>> (DR-S) and the RDF merged into your triple store for processing.
>>
>> The single DR in the document has:
>> 1. a URI set defined solely in terms of its host (example.org) and 
>> there are two descriptors from the ex namespace.
>>
>> Now let's make it a little more complicated and have one DR but two 
>> URI sets.
>>
>> Example 2
>> =========
>> RDF/XML: http://www.fosi.org/projects/powder/dr-o2.rdf
>> Graph: http://www.fosi.org/projects/powder/servlet_63180.png
>>
>> 11:   <rdf:Description rdf:about="">
>> 12:     <foaf:maker 
>> rdf:resource="http://authority.example.org/foaf.rdf#me" />
>> 13:     <dcterms:issued>2007-12-14</dcterms:issued>
>> 14:     <wdr:validFrom>2008-01-01</wdr:validFrom>
>> 15:     <wdr:validUntil>2008-12-31</wdr:validUntil>
>> 16:   </rdf:Description>
>> 17:
>> 18:   <wdr:DR rdf:ID="DR_1">
>> 19:
>> 20:     <wdr:hasScope rdf:parseType="Collection">
>> 21:
>> 22:       <wdr:URIset rdf:ID="URIset_1">
>> 23:         <wdr:includeHosts>example.org</wdr:includeHosts>
>> 24:         <wdr:includePathStartsWith>/foo</wdr:includePathStartsWith>
>> 25:         <wdr:hasDescriptors rdf:parseType="Resource">
>> 26:           <ex:colour>red</ex:colour>
>> 27:         </wdr:hasDescriptors>
>> 28:         </wdr:URIset>
>> 29:
>> 30:        <wdr:URIset rdf:about="#URIset_2" />
>> 31:
>> 32:      </wdr:hasScope>
>> 33:
>> 34:   </wdr:DR>
>> 35:
>> 36:   <wdr:URIset rdf:ID="URIset_2">
>> 37:     <wdr:includeHosts>example.org</wdr:includeHosts>
>> 38:     <wdr:hasDescriptors rdf:parseType="Resource">
>> 39:       <ex:colour>blue</ex:colour>
>> 40:     </wdr:hasDescriptors>
>> 41:   </wdr:URIset>
>>
>> The attribution and validity information (lines 11 - 16) remain 
>> unchanged. Now though our DR contains two URIsets and two attendant 
>> descriptions. All resources identified by URIs with that have host 
>> components ending with example.org are blue except those where the 
>> path starts with /foo which are red.
>>
>> If the trust and validity information is to your satisfaction, then 
>> you can transform this operational data into two DR-S instances and 
>> merge the RDF. N.B. The transformation must contain data from both URI 
>> sets thus:
>>
>> <wdr:URISet rdf:ID="URISet_1">
>>   <owl:intersectionOf rdf:parseType="Collection">
>>     <owl:Restriction>
>>       <owl:onProperty rdf:resource="&wdr;includeHosts" />
>>       <owl:hasValue>example.org</owl:hasValue>
>>     </owl:Restriction>
>>     <owl:Restriction>
>>       *<owl:onProperty rdf:resource="&wdr;includePathStartsWith" />*
>>       <owl:hasValue>/foo</owl:hasValue>
>>     </owl:Restriction>
>>   </owl:intersectionOf>
>> </wdr:URISet>
>>
>> And
>>
>> <wdr:URISet rdf:ID="URISet_2">
>>   <owl:intersectionOf rdf:parseType="Collection">
>>     <owl:Restriction>
>>       <owl:onProperty rdf:resource="&wdr;includeHosts" />
>>       <owl:hasValue>example.org</owl:hasValue>
>>     </owl:Restriction>
>>     <owl:Restriction>
>>       *<owl:onProperty rdf:resource="&wdr;excludePathStartsWith" />*
>>       <owl:hasValue>/foo</owl:hasValue>
>>     </owl:Restriction>
>>   </owl:intersectionOf>
>> </wdr:URISet>
>>
>> The exclude path starts with property in URISet 2 is generated by:
>>
>> 1. Noting the defining features of URISet 1 (example.org and /foo)
>> 2. Noting the defining features of URISet 2 (example.org)
>> 3. Taking the inverse of those present in 1 but absent in 2. 
>> (example.org and NOT /foo)
>>
>> This is going to get complicated when there are n URISets in the 
>> sequence but hey, let's be optimistic...
>>
>> We can add further DRs into the document iff the validity information 
>> is the same. I won't copy it out here but such an example is available:
>>
>> Example 3
>> =========
>> RDF/XML: http://www.fosi.org/projects/powder/dr-o3.rdf
>> Graph: http://www.fosi.org/projects/powder/servlet_63202.png
>>
>> This says that everything on example.org is blue except things with a 
>> URI path starting with /foo which are red. Separately, everything on 
>> example.org is circular except things with a URI path starting with 
>> /bar which is square. All assertions are subject to the same 
>> validity/trust conditions. And you process the Collections within each 
>> of the DRs to get these results or, if you want to merge the RDF into 
>> your triple store, you perform the transformation to get the full 
>> OWL-based version.
>>
>> Two people providing different descriptions with different validity 
>> dates will need to publish separate RDF/XML instances.
>>
>> N.B.
>>
>> I have written these examples with the exceptional case written within 
>> the DR and the 'default' description (there's no other word for it) as 
>> a separate block. There is no difference in structure but it does 
>> reflect what I expect to be the workflow reality - we're describing 
>> everything in a given URI set as being like _this_ *except* things 
>> that have _these_ things in their URIs which are like _this_ instead. 
>> Less abstract: there is no sex, drugs or rock and roll on fosi.org 
>> _except_ where the URI path component begins with /associates where 
>> there might be. Operationally, you write the general case first and 
>> then worry about the exceptions in a separate thought process.
>>
>> All of the RDF/XML instances given so far have a single URI so that a 
>> Web site can include an identical link element pointing to such a file 
>> irrespective of whether the resource is red, blue, square or circular 
>> - the POWDER client will sort it out.
>>
>> But, where the Web site has no (discernible or usable) URI structure, 
>> this isn't good enough. We need to include a new conditional 
>> statement, linkFrom, that says that if you trust "...#me" and today's 
>> date is within range *and* the resource includes a link to a specific 
>> DR, _then_ it is valid.
>>
>> The next example shows this.
>>
>> Example 4
>> =========
>> RDF/XML: http://www.fosi.org/projects/powder/dr-o4.rdf
>> Graph: http://www.fosi.org/projects/powder/servlet_63230.png
>>
>> 11:   <rdf:Description rdf:about="">
>> 12:     <foaf:maker 
>> rdf:resource="http://authority.example.org/foaf.rdf#me" />
>> 13:     <dcterms:issued>2007-12-14</dcterms:issued>
>> 14:     <wdr:validFrom>2008-01-01</wdr:validFrom>
>> 15:     <wdr:validUntil>2008-12-31</wdr:validUntil>
>> 16:     <wdr:linkFrom>true</wdr:linkFrom>
>> 17:   </rdf:Description>
>> 18:
>> 19:   <wdr:DR rdf:ID="DR_1">
>> 20:     <wdr:hasScope rdf:parseType="Resource">
>> 21:       <wdr:includeHosts>example.org</wdr:includeHosts>
>> 22:       <wdr:hasDescriptors rdf:parseType="Resource">
>> 23:         <ex:texture>smooth</ex:texture>
>> 24:       </wdr:hasDescriptors>
>> 25:     </wdr:hasScope>
>> 26:   </wdr:DR>
>> 27:
>> 28:
>> 29:   <wdr:DR rdf:ID="DR_2">
>> 30:     <wdr:hasScope rdf:parseType="Resource">
>> 31:       <wdr:includeHosts>example.org</wdr:includeHosts>
>> 32:       <wdr:includePathStartsWith>/sawn</wdr:includePathStartsWith>
>> 33:       <wdr:hasDescriptors rdf:parseType="Resource">
>> 34:         <ex:texture>rough</ex:texture>
>> 35:       </wdr:hasDescriptors>
>> 36:     </wdr:hasScope>
>> 37:   </wdr:DR>
>>
>> Notice line 16 which introduces the linkFrom element.
>>
>> Then the URI sets for each DR are identical - everything on 
>> example.org - you need to refer to the linkFrom element to decide 
>> which is applicable (actually, you'd probably define the URI set once 
>> in a separate block and refer to it from both DRs). I know this is a 
>> pain - deliberately publishing two sets of triples that say different 
>> things about the same subjects - but, as they say in Vladivostok, 
>> c'ést la Guerre.
>>
>> What about storing lots of DRs in a single RDF/XML instance? Well, 
>> it's clear that we can't. If you're a content provider and you need to 
>> have several DRs covering different domains of interest then you 
>> simply create multiple RDF/XML files and link as you need to. If 
>> you're a labelling authority you store your DRs in a database with a 
>> front end like, oh I dunno, http://repository.icra.org/label?id=1 :-) 
>> which calls, I mean, would call a script that would return a single 
>> RDF/XML instance.
>>
>> This might mean we re-visit the issue of whether we want to put a hint 
>> in the link element as to what vocabularies are used in a given DR.
>>
>> If this is along the right lines then it seems to me we need to 
>> revisit the question of whether a DR-O is written in RDF/XML, just XML 
>> or something in between. All the examples above are valid RDF/XML but 
>> we have not got rid of the problem of generic RDF tools sucking in the 
>> triples and trying to make sense of them out of context. Personally 
>> I'm tending towards DR-Os being written in XML with only DR-Ss in RDF. 
>> It seems that GRDDL cannot transform RDF/XML and, I think I'm right in 
>> saying, that XSLT will have difficulty too.
>>
>> I'll do some more playing around with that now...
>>
>> Phil.
>>
>>
>>
>> Phil Archer wrote:
>>>
>>> Good, this feels as if we're making progress (or rather, you're 
>>> making progress in a promising direction :-)).
>>>
>>> I'll do some more playing around on Monday morning and see if I come 
>>> up against anything we're missing.
>>>
>>> Have a good weekend and thank you.
>>>
>>> Phil.
>>>
>>> Jeremy Carroll wrote:
>>>>
>>>> Phil Archer wrote:
>>>>>
>>>>>
>>>>> Jeremy Carroll wrote:
>>>>> [snip]
>>>>>>
>>>>>> If we choose to make the GRDDL transform make the DR-S include the 
>>>>>> subClassOf relationship as above, then we have the issue that in a 
>>>>>> package (or any collection of DRs) some of the DRs may be valid 
>>>>>> and some may be invalid, and all the subClassOf relationships are 
>>>>>> in the same file, and it is unclear how to distinguish the ones we 
>>>>>> want to claim (the valid ones), from the ones we don't (the 
>>>>>> invalid ones).
>>>>>
>>>>> I take this point. It may be that we can do something about it 
>>>>> though. We have so far taken the view that a DR should be 
>>>>> self-contained and that a package is therefore a group of 
>>>>> self-contained units. Doing this means that the validity 
>>>>> information (and attribution) is NOT inherited by DRs in the 
>>>>> package. However... we then had to introduce the idea of using 
>>>>> dcterms:isPartOf to force the processing of these "discrete DRs" in 
>>>>> a particular order [1]. In such a scenario, yes, each DR would have 
>>>>> its own validity and attribution.
>>>>>
>>>>> But it doesn't have to be this way...
>>>>>
>>>>> It would be possible I think to work with the package carrying the 
>>>>> validity information that was then inherited by the DRs within that 
>>>>> package - which I think from what you say would make life easier?
>>>>>
>>>>>
>>>>
>>>>
>>>> Yes - I was thinking along these lines.
>>>>
>>>> I was discussing this with Stuart - a possible view is then:
>>>>
>>>> The unit of a POWDER description is a document, which may contain a 
>>>> single wdr:DR or a single wdr:Package.
>>>>
>>>> Either way the document has information pertinent to the relevance 
>>>> of the document:
>>>> e.g. validity and who vouches for it.
>>>>
>>>> Operationally the process of trust is as follows:
>>>>
>>>> for each possible document that you might be considering, you read 
>>>> that document, then understanding what that document says about 
>>>> itself, if you are satisfied that you want to act on that document 
>>>> (e.g. it is valid, and is vouched for by an appropriate authority), 
>>>> then you load it into your knowledge base (formally corresponding to 
>>>> an RDF merge using the POWDER-S GRDDL result)
>>>>
>>>> The resulting RDF graph consists of only valid POWDER DRs, which 
>>>> have been vouched for by appropriate authorities.
>>>>
>>>>  From the formal side the motivations for doing this way are:
>>>> - it is known that temporal logics (i.e. dealing with time in a 
>>>> logical way) is a hard problem
>>>> - it is known that dealing with trust in logic is a hard problem
>>>> - it is clear that POWDER deals with both time and trust, but in 
>>>> simple ways
>>>> - hence it feels inappropriate to do the time and trust parts in the 
>>>> formal logical layer, but to deal with them in a pragmatic layer 
>>>> prior to, but informed by, the logical treatment
>>>>
>>>> It is a limitation of the current RDF technology that it is hard to 
>>>> talk about part of an RDF graph, and its validity, or who vouches 
>>>> for that part - hence the desire to talk about documents containing 
>>>> RDF/XML that expresses those parts of the graph.
>>>> I think it is possible to design documents of the 'right' size so that:
>>>>
>>>> - validity and vouching are pertinent on a document by document 
>>>> level (and not on a finer grain)
>>>> - documents are large enough that the small scale powder user need 
>>>> only write one document for their site, or maybe two.
>>>>
>>>> - that the expectations on large publishers who may need to make 
>>>> declarations that fit into complex workflows are intelligible and 
>>>> not too burdensome.
>>>>
>>>> Jeremy

Received on Wednesday, 30 January 2008 08:54:30 UTC