RE: When to use object property vs datatype property

Thanks Rinke,

I'm using Drupal with RDF and SPARQL modules. The RDF module does use ARC2
so I should have everything I need to accomplish this from a technical
perspective.  If anybody on this list has done anything similar with Drupal,
I'd be interested in learning more. Meanwhile, I'll experiment with this to
the best of my ability.  Thanks again!

Regards
Kevin


-----Original Message-----
From: Rinke Hoekstra [mailto:hoekstra@uva.nl] 
Sent: Monday, July 20, 2009 2:22 AM
To: kj@iteegosearch.com
Cc: semantic-web@w3.org
Subject: Re: When to use object property vs datatype property

Hi Kevin,

The following code uses the ARC2 php classes (see [1]) retrieve the results
of a SPARQL query from a SPARQL endpoint, and creates a select block. The
variables in the SPARQL query are '?concept' and '?label'.

(this is a literal copy from some of my code, so there's quite a bit of
clutter. The gist should be clear though).

	function getSelectBlock($sparql_query,$onChange,$name='conceptlist',
$value_fn='concept',$label_fn='label') {
		// print "<pre>".htmlentities($sparql_query)."</pre>";
		
		$rows = $this->store->query($sparql_query, 'rows');
		
		
		
		if (!$this->store->getErrors()) {
			print "<select multiple size='10'
class='conceptList' name='". 
$name."' onchange='".$onChange."'>\n";
			foreach($rows as $row) {
				$label = $row[$label_fn];
				$value = $row[$value_fn];
				print "<option
value='".urlencode($value)."'>".$label."</option>\n";
			}		
			print "</select>";
		} else {
			foreach($this->store->getErrors() as $error) {
				print $error."<br/>";
			}
			throw new Exception("Errors!
".$this->store->getErrors());
		}
		
	}

The form that contains the select block will send only the value of the
selected option, which is the URI of the resource.

Adding statements to the repository is repository-specific... (some support
SPARQL UPDATE)

Good luck,

Rinke

[1] http://arc.semsol.org/


On 20 jul 2009, at 11:09, Kevin Jenkins wrote:

> Hi Rinke,
>
> Thanks for the very informative reply. It makes a lot of sense.  
> Between your
> and Toby's replies I think I'm making sense of it now. I agree that 
> object properties should be used as often as possible to keep all of 
> the objects connected and thereby resulting in a much more powerful 
> knowledge based. You are correct that all of my individuals are 
> created through web forms. I would be very keen on seeing an example 
> of how you create the drop- down list you refer to. Do you have an 
> example of php code I could analyze to see if that would be a workable 
> solution for me? I really appreciate your help.
> Thanks. kevin
>
> -----Original Message-----
> From: semantic-web-request@w3.org [mailto:semantic-web- 
> request@w3.org] On Behalf Of Rinke Hoekstra
> Sent: Monday, July 20, 2009 12:48 AM
> To: Toby A Inkster
> Cc: kj@iteegosearch.com; semantic-web@w3.org
> Subject: Re: When to use object property vs datatype property
>
> Hi Kevin,
>
> I think you are being too strict. Indeed, if individuals are only 
> created through some web-form, there must be some way of adding 
> relations between them, or between individuals and data.
>
> Why is it so hard to assert an object-property relation between e.g.
> an employee and company in a web-form?
>
> I could easily create a drop-down list of all companies that exist in 
> my triple-store. This list will show the names of companies, but when 
> one of them is selected, and the form is submitted, is is actually the 
> URI of the company resource that is sent back to the form handler.
>
> My rule of thumb is that I always use object properties, unless I 
> don't want to say anything more about the value of that property. For 
> instance, if I want to specify a 'name' that relates some person or 
> company to a name, I can just use a datatype property since I don't 
> really need to say anything else about the name.
>
> But relating a company to a product is different, because it may be 
> useful for my application to say additional things about the product 
> (e.g.
> price,
> cost, weight, name, category etc.). I need something to group all 
> these additional things together, and therefore represent each product 
> as an OWL individual as well. The relation between company and product 
> should then be an object property.
>
> (NB: a datatype property for 'has_product' on a company individual 
> with the value of the 'name' property of some product individual does 
> not relate the company to the product according to the RDF/OWL
> semantics)
>
> Good luck,
>
> 	Rinke
>
>
>
> On 19 jul 2009, at 10:15, Toby A Inkster wrote:
>
>> On 19 Jul 2009, at 07:40, Kevin Jenkins wrote:
>>
>>> It's my understanding that object properties link individuals via a 
>>> property and that datatype properties link individuals to data (such 
>>> as form input). [...] I have many properties in my ontology such as 
>>> has-company-name, has-software-product, is-employee-of etc . my 
>>> guess is these must be datatype properties because somewhere (I 
>>> guess a web
>>> form) somebody has to name the company, choose the software product 
>>> category from a list, indicate who the employer is etc.
>>
>>
>> That's not correct.
>>
>> An object property is a property that takes a resource (an object) as 
>> its value. A datatype property is a property that takes a literal 
>> (string, number, date/time, boolean, etc) as its value.
>>
>> e.g.
>>
>> <#kj> rdf:type foaf:Person ;
>>     foaf:name "Kevin Jenkins" ;
>>     foaf:mbox <mailto:kj@iteegosearch.com> ;
>>     foaf:mbox_sha1sum "d610935545bb79ad673d5a5e7bd45a11f9b12128" ;
>>     foaf:knows <#alice> .
>>
>> In the above, foaf:mbox and foaf:knows are object properties, while 
>> foaf:name and foaf:mbox_sha1sum are datatype properties. (rdf:type is 
>> also logically an object property, though I think OWL treats it as a 
>> special case.)
>>
>> --
>> Toby A Inkster
>> <mailto:mail@tobyinkster.co.uk>
>> <http://tobyinkster.co.uk>
>>
>>
>>
>
>
>
> ---
> Drs Rinke Hoekstra
>
> Leibniz Center for Law      |  AI Department
> Faculty of Law              |  Faculty of Sciences
> Universiteit van Amsterdam  |  Vrije Universiteit
> Kloveniersburgwal 48        |  De Boelelaan 1081a
> 1012 CX  Amsterdam          |  1081 HV Amsterdam
> +31-(0)20-5253499           |  +31-(0)20-5987752
> hoekstra@uva.nl             |  hoekstra@few.vu.nl
>
> Homepage: http://www.leibnizcenter.org/users/rinke
>
>
>
>
>
>



---
Drs Rinke Hoekstra

Leibniz Center for Law      |  AI Department
Faculty of Law              |  Faculty of Sciences
Universiteit van Amsterdam  |  Vrije Universiteit
Kloveniersburgwal 48        |  De Boelelaan 1081a
1012 CX  Amsterdam          |  1081 HV Amsterdam
+31-(0)20-5253499           |  +31-(0)20-5987752
hoekstra@uva.nl             |  hoekstra@few.vu.nl

Homepage: http://www.leibnizcenter.org/users/rinke

Received on Monday, 20 July 2009 09:52:16 UTC