"Locally-Significant" Statements

Folks,

I would appreciate some guidance as to the best approach to the problem of
what I will call (for lack of a better term) making locally significant
statements about a resource.  I have identified three approaches which I am
calling "Wrapper", "InstanceOf", and "Context".

Take the example below.  General Mills manufactures an ex:Cereal called
Cheerios which is distributed by Whole Foods, Publix and Fresh Direct.
General Mills has assigned the URI
"http://www.generalmills.com/cereal/Cheerios" to Cheerios which is then used
by Whole Foods, Publix and Fresh Direct as the subject of statements which
report price, inventory number and availability.

Note that the three retailers are making "conflicting" statements about the
URI for Cheerios but that each of those statements is accurate in a local
context.

<ex:Manufacturer rdf:about="http://www.generalmills.com">
   <ex:manufactures>
      <ex:Cereal rdf:about="http://www.generalmills.com/cereal/Cheerios"/>
   </ex:manufactures>
</ex:Manufacturer>

<ex:Retailer rdf:about="http://www.wholefoods.com">
   <ex:distributes>
      <ex:Cereal rdf:about="http://www.generalmills.com/cereal/Cheerios">
        <ex:price>$3.50</ex:price>
        <ex:inventoryNum>1377934</ex:inventoryNum>
        <ex:quantityAvail>50</ex:quantityAvail>
      </ex:Cereal>
   </ex:distributes>
</ex:Retailer>

<ex:Retailer rdf:about="http://www.publix.com">
   <ex:distributes>
      <ex:Cereal rdf:about="http://www.generalmills.com/cereal/Cheerios">
        <ex:price>$4.00</ex:price>
        <ex:inventoryNum>X21TE5003</ex:inventoryNum>
        <ex:quantityAvail>0</ex:quantityAvail>
      </ex:Cereal>
   </ex:distributes>
</ex:Retailer>

<ex:Retailer rdf:about="http://www.freshdirect.com">
   <ex:distributes>
      <ex:Cereal rdf:about="http://www.generalmills.com/cereal/Cheerios">
        <ex:price>$3.00</ex:price>
        <ex:inventoryNum>30042</ex:inventoryNum>
        <ex:quantityAvail>200</ex:quantityAvail>
      </ex:Cereal>
   </ex:distributes>
</ex:Retailer>

So anyone aggregating these statements (such as a search engine) would need
a way to disambiguate potentially thousands of conflicting assertions about,
among other things, the price, inventory number and availability of
Cheerios.  I see three approaches:

1. The "Wrapper" Approach: "THIS DISTRIBUTION of Cheerios costs $3.50"

We wrap the product in a generic "Distribution" Class with a
locally-assigned URI and make statements about the new URI:

<ex:Retailer rdf:about="http://www.wholefoods.com">
   <ex:distributes>
      <ex:Distribution
rdf:about="http://www.wholefoods.com/products/1377934">
        <ex:distributionOf
rdf:resource="http://www.generalmills.com/cereal/Cheerios"/>
        <ex:price>$3.50</ex:price>
        <ex:inventoryNum>1377934</ex:inventoryNum>
        <ex:quantityAvail>50</ex:quantityAvail>
      </ex:Cereal>
   </ex:distributes>
</ex:Retailer>

2. The "InstanceOf" Approach: "THESE Cheerios cost $3.50"

We create a new product with a locally-assigned URI and declare that product
to be an "instanceOf" some other product.  We then make statements about the
new URI:

<ex:Retailer rdf:about="http://www.wholefoods.com">
   <ex:distributes>
      <ex:Cereal rdf:about="http://www.wholefoods.com/products/1377934">
        <ex:instanceOf
rdf:resource="http://www.generalmills.com/cereal/Cheerios"/>
        <ex:price>$3.50</ex:price>
        <ex:inventoryNum>1377934</ex:inventoryNum>
        <ex:quantityAvail>50</ex:quantityAvail>
      </ex:Cereal>
   </ex:distributes>
</ex:Retailer>

3. The Context Approach:  "I say that Cheerios cost $3.50"

We just make statements about the original URI of the product and use
context to disambiguate -- source RDF files today; quadruples, quintiples,
name graphs or whatever tomorrow (if I've done my homework correctly):

<ex:Retailer rdf:about="http://www.wholefoods.com">
   <ex:distributes>
      <ex:Cereal rdf:about="http://www.generalmills.com/cereal/Cheerios">
        <ex:price>$3.50</ex:price>
        <ex:inventoryNum>1377934</ex:inventoryNum>
        <ex:quantityAvail>50</ex:quantityAvail>
      </ex:Cereal>
   </ex:distributes>
</ex:Retailer>

Or am I missing something?  Do we not expect people to use RDF in this
manner?  Is it expected that this type of information will be stored in
databases and populated "on the fly" (each Retailer creates a Cereal called
Cheerios and to a machine they look like different products).  That doesn't
seem right to me!

Appreciation in advance for any insight here.

--- Stephen



Note:  The information contained in this message may be privileged and
confidential and protected from disclosure.  If the reader of this message
is not the intended recipient, or an employee or agent responsible for
delivering this message to the intended recipient, you are hereby notified
that any dissemination, distribution or copying of this communication is
strictly prohibited.  If you have received this communication in error,
please notify us immediately by replying to the message and deleting it from
your computer. Thank you.  ThruPoint, Inc. 

Received on Tuesday, 17 February 2004 19:13:51 UTC