Newbie question about adding NamedIndividuals to an inventory of things

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Newbie question about adding NamedIndividuals to an inventory of things

Tim.Williams

Hello everyone,

This is a general question about Protege and OWL. If there is a better venue for this question I am happy to take it there.

I am writing a small ontology to help me learn Protege, OWL , RDF  etc.  I have run through the Pizza example and am now trying to write a little ontology to describe a small inventory of car parts that I use in a personal hobby. 

I have defined three classes and a few properties:

Car  

   hasModel

   hasYear

 

Part

   hasInventoryNumber

   hasDescription

   hasQuantity

 

StorageContainer  

   hasStorageContainerLocation

   hasStorageContainerLabel

 

I now want to create new OWLNamedIndividuals so I can start to play with data.  For examples like people or pizzas I understand the concept (“Bob”, “ExampleFourCheesePizza”) . But what should I use  in my parts inventory for named individuals? Part names are not unique (fan belt for Chevy, fan belt for Ford)  and due to clerical errors some part number labels were re-used for non-identical parts.  Do I need to generate a unique key value and use that value as the name for the NamedIndividual?  Or am I completely off track, stuck in a relational database mindset?  I have a mental block on this one so any suggestions are greatly appreciated, as would links to example ontologies for inventories of things.  After I get more comfortable with the concepts I want to develop an ontology for an inventory of data in a field unrelated to autos.

Cheers!

Tim

 


UCB BIOSCIENCES, Inc.
Mail P.O. Box 110167 - Research Triangle Park - NC 27709 - USA
Via Courier 8010 Arco Corporate Drive - Suite 100 - Raleigh - NC 27617 - USA
Phone +1 919 767 2555 - Fax +1 919 767 2570

(Ref: #*UBI0111) [Ref-UBI0111]

Legal Notice: This electronic mail and its attachments are intended solely for the person(s) to whom they are addressed and contain information which is confidential or otherwise protected from disclosure, except for the purpose for which they are intended. Dissemination, distribution, or reproduction by anyone other than the intended recipients is prohibited and may be illegal. If you are not an intended recipient, please immediately inform the sender and return the electronic mail and its attachments and destroy any copies which may be in your possession. UCB screens electronic mails for viruses but does not warrant that this electronic mail is free of any viruses. UCB accepts no liability for any damage caused by any virus transmitted by this electronic mail. (Ref: #*UG1107) [Ref-UG1107]


_______________________________________________
p4-feedback mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/p4-feedback
Reply | Threaded
Open this post in threaded view
|

Re: Newbie question about adding NamedIndividuals to an inventory of things

Dave McComb

There are at least two issues raised here, both of which are interesting.

1)      URI name minting

2)      Types as instances

Let’s take the second one first.  Its very obvious for serialized parts.  If you had a class of Engine that was a sub class of Part, you might well expect that each instance was a single engine and that therefore it would be sensible to have serial numbers.  Each individual would be an instance of the class.

But as you step up to fan belt, something weird occurs: not each instance is an individual fan belt.  (In other words if you had three fan belts you wouldn’t have three instances) so really your Part here isn’t the superclass of Engine (which in gist terminology would be an “IndividuallyIdentifiableItem” ) but is really a category used to described like items that are freely interchangeable.  Part is a subclass of Specification.  Your Part, is really a spec for a part, your quantity on hand would be the number of items you have that are interchangeable.  (I did an inventory system for a mine once and one of the big debates was whether Timken and SKF bearings with the same specification were interchangeable.  Since parts of the mine thought they weren’t we ended up making two “parts” and set up some substitution rules for those who thought they were interchangeable.)

Now that we know what it is, it gives us some clues as to how to name it.  You’re trying to give each instance a name that will be immutable.  Lots of other people have already done this, but most unfortunately haven’t minted URIs for them.  For instance, JC Whitney has the Dayco OE Replacement Serpentine Drive Belt generically as 69670G but that seems to be more of a category than a set of interchangeable parts, but if you get it for the 2012 Ford Expedition EL XL it is SKU JCW-DY5061024.

If JCWhitney had minted URIs  they might look like http://www.jcwhitney.com/parts# JCW-DY5061024 

And it might be a good idea to use theirs if you were really referring to the same concept.  But given that they haven’t, and you’re really just doing an experiment, I’d suggest making up your own numbers: http://ontologies.timwilliams.com/parts#_0001 for instance.   You could then put your own inventory number, JC Whitneys, Napas etc. 

The main things for URI minting are:

1)       Try not to make up new names / URIs for things if existing ones exist, are stable and commonly used

2)       If you do need to mint your own URIs, do so in a name space that you control

3)       The namespace really shouldn’t have anything to do with the name of your ontology (I know that sounds weird but trust me on this one)

4)       Once you’ve made this material public, you want the URI to be permanent.  Don’t later reuse the same URI to identify an employee for instance.

Hope that helps

 

Dave McComb, President

Semantic Arts, Inc.   www.semanticarts.com

"Taking complexity and cost out of large scale information systems"

 

From: [hidden email] [mailto:[hidden email]] On Behalf Of [hidden email]
Sent: Thursday, January 02, 2014 2:08 PM
To: [hidden email]
Cc: [hidden email]
Subject: [p4-feedback] Newbie question about adding NamedIndividuals to an inventory of things

 

Hello everyone,

This is a general question about Protege and OWL. If there is a better venue for this question I am happy to take it there.

I am writing a small ontology to help me learn Protege, OWL , RDF  etc.  I have run through the Pizza example and am now trying to write a little ontology to describe a small inventory of car parts that I use in a personal hobby. 

I have defined three classes and a few properties:

Car  

   hasModel

   hasYear

 

Part

   hasInventoryNumber

   hasDescription

   hasQuantity

 

StorageContainer  

   hasStorageContainerLocation

   hasStorageContainerLabel

 

I now want to create new OWLNamedIndividuals so I can start to play with data.  For examples like people or pizzas I understand the concept (“Bob”, “ExampleFourCheesePizza”) . But what should I use  in my parts inventory for named individuals? Part names are not unique (fan belt for Chevy, fan belt for Ford)  and due to clerical errors some part number labels were re-used for non-identical parts.  Do I need to generate a unique key value and use that value as the name for the NamedIndividual?  Or am I completely off track, stuck in a relational database mindset?  I have a mental block on this one so any suggestions are greatly appreciated, as would links to example ontologies for inventories of things.  After I get more comfortable with the concepts I want to develop an ontology for an inventory of data in a field unrelated to autos.

Cheers!

Tim

 


UCB BIOSCIENCES, Inc.
Mail P.O. Box 110167 - Research Triangle Park - NC 27709 - USA
Via Courier 8010 Arco Corporate Drive - Suite 100 - Raleigh - NC 27617 - USA
Phone +1 919 767 2555 - Fax +1 919 767 2570

(Ref: #*UBI0111) [Ref-UBI0111]


Legal Notice: This electronic mail and its attachments are intended solely for the person(s) to whom they are addressed and contain information which is confidential or otherwise protected from disclosure, except for the purpose for which they are intended. Dissemination, distribution, or reproduction by anyone other than the intended recipients is prohibited and may be illegal. If you are not an intended recipient, please immediately inform the sender and return the electronic mail and its attachments and destroy any copies which may be in your possession. UCB screens electronic mails for viruses but does not warrant that this electronic mail is free of any viruses. UCB accepts no liability for any damage caused by any virus transmitted by this electronic mail. (Ref: #*UG1107) [Ref-UG1107]



_______________________________________________
p4-feedback mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/p4-feedback
Reply | Threaded
Open this post in threaded view
|

Re: Newbie question about adding NamedIndividuals to an inventory of things

Tim Williams
In reply to this post by Tim.Williams

Thank you Dave for the detailed explanation.  I have a follow up question about my inventory ontology.

 

An eventual goal will be to query the data source to, for example, "list all Ford Engine parts present in the inventory". The query will roll up parts from CylinderHead, Intake, EngineInternal, and EngineExternal component systems.

 

I’m attempting to follow the guidelines of "Simple part-whole relations in OWL Ontologies"  (http://www.w3.org/2001/sw/BestPractices/OEP/SimplePartWhole/) , which make me think that each major car “component system” is a class unto itself, resulting in the following class structure:

 

Thing

   Car

   Engine

   CylinderHead

   Intake

   EngineInternals

   EngineExternals

       <......and so on for all major systems.....>

   Part

 

A CylinderHead is a subcomponent system of the Engine, which in turn is a subcomponent of a Car.

 

I define properties "partOf" , then partOf_directly"  as a subproperty of partOf.   Representing an individual part, in this case a Cylinder Header Gasket for a Ford, would look similar to:

 

@prefix parts : < http://ontologies.timwilliams.com/parts/ > .

 

car123

   a Car ;

   parts:hasMarqueName “Ford” .

 

engine123

  a Engine  ;

  parts:partOf_directly  car123 .

 

head123

    a CylinderHead ;

    parts:partOf_directly engine123 .

 

_0001

   a Part ;

   parts:partOf_directly head123 ;

   parts:partDescription “Head gasket” ;

   parts:hasInventoryLabel “N0579” ;

   parts:hasVendorPartNumber “282-090” ;

   parts:hasStorageContainerName “Box1”  .

 

Is this a correct approach to the inventory? 

 

All comments welcome and appreciated!

 

Tim 







_______________________________________________
p4-feedback mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/p4-feedback
Reply | Threaded
Open this post in threaded view
|

Re: Newbie question about adding NamedIndividuals to an inventory of things

Dave McComb

Yes.  I assume you made partOf transitive, and not directPartOf

 

To find the ford parts you can either rely on Sparql, or the owl way to do it would be to create the two classes (you could do this all in one but its easier to see what you’re doing in two)

 

FordCar as equivalent to Car and some parts:hasMarqueName “Ford” (this will give you a collection of all the Ford cars, eventually you may want to replace the string “ford” with an instance to represent models, which would allow you to have relations, like Mustangs are Fords.  Should infer car123 to be a FordCar

 

FordPart as equivalent to Parts and some parts:partOf FordCar which through transitivity should give you engine123 head123 and _0001

 

 

From: [hidden email] [mailto:[hidden email]] On Behalf Of Tim Williams
Sent: Friday, January 03, 2014 11:37 AM
To: [hidden email]
Subject: Re: [p4-feedback] Newbie question about adding NamedIndividuals to an inventory of things

 

Thank you Dave for the detailed explanation.  I have a follow up question about my inventory ontology.

 

An eventual goal will be to query the data source to, for example, "list all Ford Engine parts present in the inventory". The query will roll up parts from CylinderHead, Intake, EngineInternal, and EngineExternal component systems.

 

I’m attempting to follow the guidelines of "Simple part-whole relations in OWL Ontologies"  (http://www.w3.org/2001/sw/BestPractices/OEP/SimplePartWhole/) , which make me think that each major car “component system” is a class unto itself, resulting in the following class structure:

 

Thing

   Car

   Engine

   CylinderHead

   Intake

   EngineInternals

   EngineExternals

       <......and so on for all major systems.....>

   Part

 

A CylinderHead is a subcomponent system of the Engine, which in turn is a subcomponent of a Car.

 

I define properties "partOf" , then partOf_directly"  as a subproperty of partOf.   Representing an individual part, in this case a Cylinder Header Gasket for a Ford, would look similar to:

 

@prefix parts : < http://ontologies.timwilliams.com/parts/ > .

 

car123

   a Car ;

   parts:hasMarqueName “Ford” .

 

engine123

  a Engine  ;

  parts:partOf_directly  car123 .

 

head123

    a CylinderHead ;

    parts:partOf_directly engine123 .

 

_0001

   a Part ;

   parts:partOf_directly head123 ;

   parts:partDescription “Head gasket” ;

   parts:hasInventoryLabel “N0579” ;

   parts:hasVendorPartNumber “282-090” ;

   parts:hasStorageContainerName “Box1”  .

 

Is this a correct approach to the inventory? 

 

All comments welcome and appreciated!

 

Tim 

 

 

 

 

 


_______________________________________________
p4-feedback mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/p4-feedback