I am fairly new to designing ontologies. I am trying to design simple ontology. However, I would like to know some view with the design pattern.
I have a class Trafficlight. Now is it a good idea to have subclasses for this class as Red,Green and Yellow or is it good a idea to create a data property which takes string inputs and restrict values to Red,Green and Yellow?
Similarly if I have say class road and street class. I connect these with road1 hasStreetType street1.
Again will it be good idea to have subclasses of street like residential,highway etc or have a data property which takes these string values as input.
Which of two pattern is better for reasoning?
Which of the two pattern will need more instance data?
What are advantages and disadvantages of it?
Others will probably have better answers but the first thing I would suggest is you remember that everything in OWL is based on set theory and first order logic. If you don't know what those are I recommend taking a few hours and getting in intro text book. The first chapter in Elements of the Theory of Computation by Lewis and Papadimitriou is an excellent intro. I say that because the way you are describing your ontology sounds very much like a programmer defining the objects for their system rather than as someone creating a logical model. I don't mean that as a criticism and perhaps I'm just being too sensitive to that issue because its a problem I still grapple with, my first intuition is to always think like an OO programmer and while there are many similarities with OOP there are also important differences.
If you haven't already done so you should do the Pizza Tutorial. That provides a lot of examples and I think would answer many of your questions. I also think the FHKB tutorial from Manchester is excellent and definitely worth doing. It shows some of the more powerful capabilities of using DL.
Also, (and IMO this is true for OO modeling as well) there is seldom just one "right" way to model something. It all depends on your application(s), i.e., how you want to use the model.
To get to some of your specific questions (and keeping in mind the caveat above) it seems unintuitive to me to have classes like RedTrafficLight, GreenTrafficLight, etc. Since the color of the light is constantly changing that means the type of any actual traffic lights you have will also be constantly changing. Now (unlike most OO systems) that is not prohibited in OWL but it just isn't the way my intuition would go for this problem.
Also, you can have a string that records the color of the light and still have classes based on that color as well. That's one of the powerful things about OWL DL you can describe new classes based on the value of properties. So if you had a class called TrafficLight you could (although for most applications I don't think I would do this) define a new class called RedTrafficLight and you would add an axiom something like: TrafficLight and hasColor value "red"
Hope that was helpful.
On Thu, May 11, 2017 at 7:53 AM, ysg11 <[hidden email]> wrote:
protege-user mailing list
These are good advices. I would add that you should think of classes as sets of individuals. If you say that TrafficLight is a class, then what are individuals of this class? Subclasses are subsets. If you have a subclass, what are individuals of this subclass and are they also individuals of the superclass?
With best regards,
Samson Tu email: [hidden email]
Senior Research Engineer web: www.stanford.edu/~swt/
Center for Biomedical Informatics Research phone: 1-650-725-3391
Stanford University fax: 1-650-725-7944
protege-user mailing list
|Free forum by Nabble||Edit this page|