How can I create a Metaclass?

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

How can I create a Metaclass?

Javingka
Hi everyone,

How can I create a Metaclass?

I found  this link
<https://protegewiki.stanford.edu/wiki/PrF_UG_meta_metaclass_create>   but
makes reference to a version of Protege called 'protege-frames' that I
couldn't find how to download or install. Indeed seems version 3.x was the
last offering that frame version.

Thanks so much in advance.

My actual version is 5.5.0



--
Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user
Reply | Threaded
Open this post in threaded view
|

Re: How can I create a Metaclass?

Matthew Horridge-2
Administrator
Hi,

OWL does not have meta-classes, thus Protege 5.5.0 does not have meta-classes.  OWL does have “punning” (where classes and instances can have the same IRIs), and this can be used for a weak form of meta-modeling – whether it is sufficient for your needs depends upon what you need to do.  Why do you want to do this?

Cheers,

Matthew


> On Apr 23, 2019, at 07:03, Javingka <[hidden email]> wrote:
>
> Hi everyone,
>
> How can I create a Metaclass?
>
> I found  this link
> <https://protegewiki.stanford.edu/wiki/PrF_UG_meta_metaclass_create>   but
> makes reference to a version of Protege called 'protege-frames' that I
> couldn't find how to download or install. Indeed seems version 3.x was the
> last offering that frame version.
>
> Thanks so much in advance.
>
> My actual version is 5.5.0
>
>
>
> --
> Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
> _______________________________________________
> protege-user mailing list
> [hidden email]
> https://mailman.stanford.edu/mailman/listinfo/protege-user

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

Re: How can I create a Metaclass?

Javingka
Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.
But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.

Thanks again Matthew



--
Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user
Reply | Threaded
Open this post in threaded view
|

Re: How can I create a Metaclass?

samsontu
On Apr 24, 2019, at 5:35 AM, Javingka <[hidden email]> wrote:

Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.

Why do you need to represent iPhone 10 as an individual? 

But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.


With best regards,
Samson



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

smime.p7s (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: How can I create a Metaclass?

Michael DeBellis-2
In reply to this post by Javingka
I agree with Matthew, I don't see in your use case the reason for making iPhone10 both an Individual and a Class, from what you said it seems as if it could be just a class, it's a type of phone not an instance of phone. But perhaps I'm not understanding enough of your domain. Where you use punning (the very limited meta-class capability now in OWL) is if you need to associate some property values with iPhone10. So for example, if you want to store the price for a new iPhone10 (i.e., not the price for any specific phone but something like the price that Apple typically sells all new iPhone10's for) then that would be an example where you would use punning and have iPhone10 be an Individual as well as a Class. 

Michael

On Wed, Apr 24, 2019 at 5:35 AM Javingka <[hidden email]> wrote:
Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.
But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.

Thanks again Matthew



--
Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user

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

Re: How can I create a Metaclass?

Matthew Horridge-2
Administrator
In reply to this post by samsontu
Hi Javier,

In addition to Samson’s comment (my questions is the same as his).  I would have a hierarchy like this

Product
    SmartPhone
        iPhone10

These represent classes of phones.   If you want to represent a model, as in a design, then I’d do this with individuals and use HasValue restrictions to link to this individuals.  For example (using “Design” rather than “Model” to avoid ambiguity),

iPhone10 SubClassOf (hasDesign value iPhone10Design)

then you can state additional facts about the actual design individual, for example,

iPhone10Design isDesignedBy iPhone10DesignTeam
iPhone10Design hasRelease iPhone10Release
iPhone10Design hasSuccessor iPhone10XRDesign

etc.

Cheers,

Matthew



On Apr 24, 2019, at 09:30, Samson Tu <[hidden email]> wrote:

On Apr 24, 2019, at 5:35 AM, Javingka <[hidden email]> wrote:

Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.

Why do you need to represent iPhone 10 as an individual? 

But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.


With best regards,
Samson


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


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

Re: How can I create a Metaclass?

samsontu
Hi,

One question I ask when I try to decide whether to model something as a class or as an individual is “do I need to have subclasses”  of this entity? “iPhone 10” clearly have subclasses iPhone XR, iPhone XS, and iPhone XS Max. If you model iPhone 10 as an individual, how are you going to deal with the these subtypes?

A better example of the need for punning is “Panda is an endangered species.” We probably want to model “Panda” as a class of individuals pandas, but being endangered is a statement about the species as a whole, not of individuals of the species.

With best regards,
Samson


On Apr 24, 2019, at 9:45 AM, Matthew Horridge <[hidden email]> wrote:

Hi Javier,

In addition to Samson’s comment (my questions is the same as his).  I would have a hierarchy like this

Product
    SmartPhone
        iPhone10

These represent classes of phones.   If you want to represent a model, as in a design, then I’d do this with individuals and use HasValue restrictions to link to this individuals.  For example (using “Design” rather than “Model” to avoid ambiguity),

iPhone10 SubClassOf (hasDesign value iPhone10Design)

then you can state additional facts about the actual design individual, for example,

iPhone10Design isDesignedBy iPhone10DesignTeam
iPhone10Design hasRelease iPhone10Release
iPhone10Design hasSuccessor iPhone10XRDesign

etc.

Cheers,

Matthew



On Apr 24, 2019, at 09:30, Samson Tu <[hidden email]> wrote:

On Apr 24, 2019, at 5:35 AM, Javingka <[hidden email]> wrote:

Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.

Why do you need to represent iPhone 10 as an individual? 

But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.


With best regards,
Samson


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

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


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

smime.p7s (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: How can I create a Metaclass?

Michael DeBellis-2
This is off topic and nit picking but I always thought the "Endangered Species" example that is the one most often used as an example of punning in OWL is a bad example. The reason I think it's a bad example (or am I missing something?) is that you don't need to use punning. You could just have another class called EndangeredSpecies and make Panda (and Eagle, the common example) subclasses of those classes as well as of Bird and whatever Pandas are. It seems to me that any example where you are just using a boolean is a bad example because that could just as easily (and IMO more intuitively) be a class. 

Michael

On Wed, Apr 24, 2019 at 10:02 AM Samson Tu <[hidden email]> wrote:
Hi,

One question I ask when I try to decide whether to model something as a class or as an individual is “do I need to have subclasses”  of this entity? “iPhone 10” clearly have subclasses iPhone XR, iPhone XS, and iPhone XS Max. If you model iPhone 10 as an individual, how are you going to deal with the these subtypes?

A better example of the need for punning is “Panda is an endangered species.” We probably want to model “Panda” as a class of individuals pandas, but being endangered is a statement about the species as a whole, not of individuals of the species.

With best regards,
Samson


On Apr 24, 2019, at 9:45 AM, Matthew Horridge <[hidden email]> wrote:

Hi Javier,

In addition to Samson’s comment (my questions is the same as his).  I would have a hierarchy like this

Product
    SmartPhone
        iPhone10

These represent classes of phones.   If you want to represent a model, as in a design, then I’d do this with individuals and use HasValue restrictions to link to this individuals.  For example (using “Design” rather than “Model” to avoid ambiguity),

iPhone10 SubClassOf (hasDesign value iPhone10Design)

then you can state additional facts about the actual design individual, for example,

iPhone10Design isDesignedBy iPhone10DesignTeam
iPhone10Design hasRelease iPhone10Release
iPhone10Design hasSuccessor iPhone10XRDesign

etc.

Cheers,

Matthew



On Apr 24, 2019, at 09:30, Samson Tu <[hidden email]> wrote:

On Apr 24, 2019, at 5:35 AM, Javingka <[hidden email]> wrote:

Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.

Why do you need to represent iPhone 10 as an individual? 

But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.


With best regards,
Samson


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

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

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

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

Re: How can I create a Metaclass?

Balhoff, James Patrick
I disagree—and it’s probably not off-topic since it is a good exploration of how to use classes vs instances. An individual panda is not an EndangeredSpecies. Or, even if you change the term to ‘Endangered’, I wouldn’t say it’s the case that any individual organism is endangered; it may have a quite secure life. What is endangered here is the unique historical evolutionary lineage, of which any individual panda is a part/member.

I don’t think punning is strictly required; that would only be if you insisted on using the same IRI for the collection of all members of a lineage, and the lineage itself. You could have <Panda> as the identifier for the lineage and <PandaOrganism> as the class. Then you would have a definition:

<PandaOrganism> EquivalentTo (member_of value <Panda>)

Just my two cents :-),
Jim

On Apr 24, 2019, at 1:18 PM, Michael DeBellis <[hidden email]> wrote:

This is off topic and nit picking but I always thought the "Endangered Species" example that is the one most often used as an example of punning in OWL is a bad example. The reason I think it's a bad example (or am I missing something?) is that you don't need to use punning. You could just have another class called EndangeredSpecies and make Panda (and Eagle, the common example) subclasses of those classes as well as of Bird and whatever Pandas are. It seems to me that any example where you are just using a boolean is a bad example because that could just as easily (and IMO more intuitively) be a class. 

Michael

On Wed, Apr 24, 2019 at 10:02 AM Samson Tu <[hidden email]> wrote:
Hi,

One question I ask when I try to decide whether to model something as a class or as an individual is “do I need to have subclasses”  of this entity? “iPhone 10” clearly have subclasses iPhone XR, iPhone XS, and iPhone XS Max. If you model iPhone 10 as an individual, how are you going to deal with the these subtypes?

A better example of the need for punning is “Panda is an endangered species.” We probably want to model “Panda” as a class of individuals pandas, but being endangered is a statement about the species as a whole, not of individuals of the species.

With best regards,
Samson


On Apr 24, 2019, at 9:45 AM, Matthew Horridge <[hidden email]> wrote:

Hi Javier,

In addition to Samson’s comment (my questions is the same as his).  I would have a hierarchy like this

Product
    SmartPhone
        iPhone10

These represent classes of phones.   If you want to represent a model, as in a design, then I’d do this with individuals and use HasValue restrictions to link to this individuals.  For example (using “Design” rather than “Model” to avoid ambiguity),

iPhone10 SubClassOf (hasDesign value iPhone10Design)

then you can state additional facts about the actual design individual, for example,

iPhone10Design isDesignedBy iPhone10DesignTeam
iPhone10Design hasRelease iPhone10Release
iPhone10Design hasSuccessor iPhone10XRDesign

etc.

Cheers,

Matthew



On Apr 24, 2019, at 09:30, Samson Tu <[hidden email]> wrote:

On Apr 24, 2019, at 5:35 AM, Javingka <[hidden email]> wrote:

Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.

Why do you need to represent iPhone 10 as an individual? 

But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.


With best regards,
Samson


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

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

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


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

Re: How can I create a Metaclass?

UscholdM
In reply to this post by samsontu
I'm also unclear from the use case whether metaclasses are really needed.
Attached is the section from my book on metaclasses which explains the
nature of the OWL limitation on metaclasses using the iphone example. I also
consider under what circumstances you are likely to really need metaclasses
and a workaround for how to get the intended effect in OWL.  

I also discuss punning, which I think of as a NON-workaround.  In almost all
cases, it is a bad idea likely to confuse yourself or others.

Uschold-Metaclasses.docx
<http://protege-project.136.n4.nabble.com/file/t34629/Uschold-Metaclasses.docx>  



--
Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user
Reply | Threaded
Open this post in threaded view
|

Re: How can I create a Metaclass?

Javingka
In reply to this post by Balhoff, James Patrick
wow guys, thanks a lot! you have gave me a lot to think about. I'm rather
newbie into OWL and Protege, but this is actually super interesting and fun
.

So I gonna digest all your comments, study a little bit more and came back
with either with an explanation why I do actually need punning or I can
solve my issues merely with Classes.



--
Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user
Reply | Threaded
Open this post in threaded view
|

Re: How can I create a Metaclass?

Matthew Horridge-2
Administrator
> I also discuss punning, which I think of as a NON-workaround.  In almost all cases, it is a bad idea likely to confuse yourself or others.

+ 1

> On Apr 24, 2019, at 11:01, Javingka <[hidden email]> wrote:
>
> wow guys, thanks a lot! you have gave me a lot to think about. I'm rather
> newbie into OWL and Protege, but this is actually super interesting and fun
> .
>
> So I gonna digest all your comments, study a little bit more and came back
> with either with an explanation why I do actually need punning or I can
> solve my issues merely with Classes.
>
>
>
> --
> Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
> _______________________________________________
> protege-user mailing list
> [hidden email]
> https://mailman.stanford.edu/mailman/listinfo/protege-user


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

Re: How can I create a Metaclass?

Javingka
Hi everyone.

I already think about this, and this is the issue:

I have a Generic Ontology that describe a generic Loyalty Program Company Ontology. Within its Taxonomy I have two main branches, the Entities and the Events. So essentially I have:

Entity
Client
Product
Company
Event
LoyaltyProgramExange

I want to instantiate this Ontology over N number of actual Loyalty Program Companies. SO for example I do for CompanyA and CompanyB

Entity
Client
_ClientCompanyA
_ClientCompanyB

Product
_ProductCompanyA
_ProductCompanyB
Company
_CompanyA
_CompanyB
Event
LoyaltyProgramExchange
_productExchangeCompanyA
_productExchangeCompanyB

Until this point no problem. I can actually attach to each Client, Product, Company and Exchange Individuals its own Data and Object Properties, I map what Attributes each of this Entities and Events have on each company, and of course what relations exists between those entities and events (Clients for example I see what Attributes they have, age, gender, city, salary, etc etc... and what relations hasExhange, hasProductsExchange, hasServiceExchange, etc..)

The problem arise when I want to go further and get a specific Client or Product as Individual. In order to set for it/him/her an IRI. Doing so I gonna set specifics Data Properties basically (actual age, specific gender, salary amount, etc etc) but also specifics relations with other individuals for example CleaningProducts of a specific brand, kind of Food it consumes etc., and what is probably more interesting be able to recognize the same individual (a person) that is client in both Loyalty ProgramCompanies. At this point my _ProductCompanyA individual should be a Class in order to be able to instantiate the actual clients of this CompanyA.

So the final Ontology would look like this (I set the double underline __ as the identifier of the final individuals):

Entity
Client
_ClientCompanyA
__Javier
__Michael
_ClientCompanyB
__Matthew
__Samson
Product
_ProductCompanyA
__CleaningProductBrandA
__FrenchBread
_ProductCompanyB
__CleaningProductBrandB
__RiceBrandX
Company
_CompanyA
_CompanyB
Event
LoyaltyProgramExchange
_productExchangeCompanyA
_productExchangeCompanyB



On Wed, Apr 24, 2019 at 3:03 PM Matthew Horridge <[hidden email]> wrote:
> I also discuss punning, which I think of as a NON-workaround.  In almost all cases, it is a bad idea likely to confuse yourself or others.

+ 1

> On Apr 24, 2019, at 11:01, Javingka <[hidden email]> wrote:
>
> wow guys, thanks a lot! you have gave me a lot to think about. I'm rather
> newbie into OWL and Protege, but this is actually super interesting and fun
> .
>
> So I gonna digest all your comments, study a little bit more and came back
> with either with an explanation why I do actually need punning or I can
> solve my issues merely with Classes.
>
>
>
> --
> Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
> _______________________________________________
> protege-user mailing list
> [hidden email]
> https://mailman.stanford.edu/mailman/listinfo/protege-user


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

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

Re: How can I create a Metaclass?

Jim McCusker
In reply to this post by Michael DeBellis-2
Except that White Rhino isn't a subclass of Endangered Species, it's an instance of Endangered Species. An individual rhino isn't itself an endangered species, so you shouldn't try to shoehorn in the metaclass in as a superclass. Class subsumption has very strict rules, and I see this kind of error all the time - adding superclasses where it's flat out wrong to say that members of the subclass are always members of the superclass.

Punning lets us be honest with our semantics, and I'll ding any ontology paper that tries to shoehorn in bad subclassof relations.

Jim

On Wed, Apr 24, 2019 at 1:18 PM Michael DeBellis <[hidden email]> wrote:
This is off topic and nit picking but I always thought the "Endangered Species" example that is the one most often used as an example of punning in OWL is a bad example. The reason I think it's a bad example (or am I missing something?) is that you don't need to use punning. You could just have another class called EndangeredSpecies and make Panda (and Eagle, the common example) subclasses of those classes as well as of Bird and whatever Pandas are. It seems to me that any example where you are just using a boolean is a bad example because that could just as easily (and IMO more intuitively) be a class. 

Michael

On Wed, Apr 24, 2019 at 10:02 AM Samson Tu <[hidden email]> wrote:
Hi,

One question I ask when I try to decide whether to model something as a class or as an individual is “do I need to have subclasses”  of this entity? “iPhone 10” clearly have subclasses iPhone XR, iPhone XS, and iPhone XS Max. If you model iPhone 10 as an individual, how are you going to deal with the these subtypes?

A better example of the need for punning is “Panda is an endangered species.” We probably want to model “Panda” as a class of individuals pandas, but being endangered is a statement about the species as a whole, not of individuals of the species.

With best regards,
Samson


On Apr 24, 2019, at 9:45 AM, Matthew Horridge <[hidden email]> wrote:

Hi Javier,

In addition to Samson’s comment (my questions is the same as his).  I would have a hierarchy like this

Product
    SmartPhone
        iPhone10

These represent classes of phones.   If you want to represent a model, as in a design, then I’d do this with individuals and use HasValue restrictions to link to this individuals.  For example (using “Design” rather than “Model” to avoid ambiguity),

iPhone10 SubClassOf (hasDesign value iPhone10Design)

then you can state additional facts about the actual design individual, for example,

iPhone10Design isDesignedBy iPhone10DesignTeam
iPhone10Design hasRelease iPhone10Release
iPhone10Design hasSuccessor iPhone10XRDesign

etc.

Cheers,

Matthew



On Apr 24, 2019, at 09:30, Samson Tu <[hidden email]> wrote:

On Apr 24, 2019, at 5:35 AM, Javingka <[hidden email]> wrote:

Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.

Why do you need to represent iPhone 10 as an individual? 

But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.


With best regards,
Samson


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

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

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


--
Jim McCusker

Director, Data Operations
Tetherless World Constellation
Rensselaer Polytechnic Institute
[hidden email]
http://tw.rpi.edu

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

Re: How can I create a Metaclass?

Vaclav
How can I go about incorporating a class that I need to make a subclass of disjoint classes? It's not an individual, there are many instances of it. E.g., the legal contract is a document (a class, there are many subclasses and instances of this class), juristic fact (a class, something the law attaches consequences to, many subclasses and instances), and also a source of law (a class, there are some subclasses and lots of instances). Thank you!

Sent from the Protege User mailing list archive at Nabble.com.

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

Re: How can I create a Metaclass?

Michael DeBellis-2
> How can I go about incorporating a class that I need to make a subclass of disjoint classes?

You can't, or rather if you do you will have a class that can't have any members. And I think that if you find yourself in that situation you have modeled something incorrectly, either the two classes aren't really disjoint or the new class doesn't need to be a subclass of both (perhaps it's a containment or some other relation with one of the classes). 

I don't understand the legal domain so I don't think I followed your example, but to the extent that I did understand it, it seems to me perhaps you are conflating two concepts that are homonyms in English. A contract can refer to a specific actual paper document but it can also refer to the abstract requirements that the document is meant to enforce. Similar to the way I can talk about the "Bill of Rights" and mean (the usual meaning) the principles that are defined as rights for all Americans or I can use the same phrase to talk about the actual paper document that is stored on display somewhere. I might be completely misunderstanding your example, but I'm confident if you explained it in more detail there would be a rational way to model it without making some class a subclass of two disjoint classes. 

Michael

On Thu, Apr 25, 2019 at 12:40 PM Vaclav <[hidden email]> wrote:
How can I go about incorporating a class that I need to make a subclass of disjoint classes? It's not an individual, there are many instances of it. E.g., the legal contract is a document (a class, there are many subclasses and instances of this class), juristic fact (a class, something the law attaches consequences to, many subclasses and instances), and also a source of law (a class, there are some subclasses and lots of instances). Thank you!

Sent from the Protege User mailing list archive at Nabble.com.
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user

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

Re: How can I create a Metaclass?

Michael DeBellis-2
In reply to this post by Jim McCusker
>Except that White Rhino isn't a subclass of Endangered Species, it's an instance of Endangered Species. 

By that argument then WhiteRhino shouldn't be a class at all, since it's just as valid to say "White Rhino is an instance of a  Species" as it is to say "White Rhino is an instance of an Endangered  Species". I think you are conflating English and Logic. English like all human languages is inherently ambiguous and there are almost always multiple possible logical models for any English sentence. So you can't just look at English usage and assume that if we say "X is an instance of Y" that it necessarily means that the only or best possible logical model is to make X an Individual rather than a Class. It depends on what your application is and what specific things you care about modeling. 

Michael

On Thu, Apr 25, 2019 at 5:39 AM Jim McCusker <[hidden email]> wrote:
Except that White Rhino isn't a subclass of Endangered Species, it's an instance of Endangered Species. An individual rhino isn't itself an endangered species, so you shouldn't try to shoehorn in the metaclass in as a superclass. Class subsumption has very strict rules, and I see this kind of error all the time - adding superclasses where it's flat out wrong to say that members of the subclass are always members of the superclass.

Punning lets us be honest with our semantics, and I'll ding any ontology paper that tries to shoehorn in bad subclassof relations.

Jim

On Wed, Apr 24, 2019 at 1:18 PM Michael DeBellis <[hidden email]> wrote:
This is off topic and nit picking but I always thought the "Endangered Species" example that is the one most often used as an example of punning in OWL is a bad example. The reason I think it's a bad example (or am I missing something?) is that you don't need to use punning. You could just have another class called EndangeredSpecies and make Panda (and Eagle, the common example) subclasses of those classes as well as of Bird and whatever Pandas are. It seems to me that any example where you are just using a boolean is a bad example because that could just as easily (and IMO more intuitively) be a class. 

Michael

On Wed, Apr 24, 2019 at 10:02 AM Samson Tu <[hidden email]> wrote:
Hi,

One question I ask when I try to decide whether to model something as a class or as an individual is “do I need to have subclasses”  of this entity? “iPhone 10” clearly have subclasses iPhone XR, iPhone XS, and iPhone XS Max. If you model iPhone 10 as an individual, how are you going to deal with the these subtypes?

A better example of the need for punning is “Panda is an endangered species.” We probably want to model “Panda” as a class of individuals pandas, but being endangered is a statement about the species as a whole, not of individuals of the species.

With best regards,
Samson


On Apr 24, 2019, at 9:45 AM, Matthew Horridge <[hidden email]> wrote:

Hi Javier,

In addition to Samson’s comment (my questions is the same as his).  I would have a hierarchy like this

Product
    SmartPhone
        iPhone10

These represent classes of phones.   If you want to represent a model, as in a design, then I’d do this with individuals and use HasValue restrictions to link to this individuals.  For example (using “Design” rather than “Model” to avoid ambiguity),

iPhone10 SubClassOf (hasDesign value iPhone10Design)

then you can state additional facts about the actual design individual, for example,

iPhone10Design isDesignedBy iPhone10DesignTeam
iPhone10Design hasRelease iPhone10Release
iPhone10Design hasSuccessor iPhone10XRDesign

etc.

Cheers,

Matthew



On Apr 24, 2019, at 09:30, Samson Tu <[hidden email]> wrote:

On Apr 24, 2019, at 5:35 AM, Javingka <[hidden email]> wrote:

Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.

Why do you need to represent iPhone 10 as an individual? 

But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.


With best regards,
Samson


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

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

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


--
Jim McCusker

Director, Data Operations
Tetherless World Constellation
Rensselaer Polytechnic Institute
[hidden email]
http://tw.rpi.edu
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user

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

Re: How can I create a Metaclass?

Vaclav
In reply to this post by Michael DeBellis-2
Michael DeBellis-2 wrote
> You can't, or rather if you do you will have a class that can't have any
> members. And I think that if you find yourself in that situation you have
> modeled something incorrectly, either the two classes aren't really
> disjoint or the new class doesn't need to be a subclass of both (perhaps
> it's a containment or some other relation with one of the classes).



Michael DeBellis-2 wrote

> I don't understand the legal domain so I don't think I followed your
> example, but to the extent that I did understand it, it seems to me
> perhaps
> you are conflating two concepts that are homonyms in English. A contract
> can refer to a specific actual paper document but it can also refer to the
> abstract requirements that the document is meant to enforce. Similar to
> the
> way I can talk about the "Bill of Rights" and mean (the usual meaning) the
> principles that are defined as rights for all Americans or I can use the
> same phrase to talk about the actual paper document that is stored on
> display somewhere. I might be completely misunderstanding your example,
> but
> I'm confident if you explained it in more detail there would be a rational
> way to model it without making some class a subclass of two disjoint
> classes.
> Michael

Thank you for answering, Michael!

There are many a different set of abstract requirements (class), some of
which are contracts (subclass) (others would be statutes, case law, etc.)

Also, there are many kinds of actions the law attaches consequences to (so
called juristic facts, class), some of which are contracts (subclass)
(others would be torts, wills, etc.)

Then, there's a document, which is a surrogate for juristic facts, their
physical representation, or evidence (the deed).

All those three are treated as distinct entities in the legal science. E.g.,
only the first one can be terminated, i.e. the requirements stop being
legally binding, whereas the deed can't be terminated as such. Hope it makes
sense.








--
Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user
Reply | Threaded
Open this post in threaded view
|

Re: How can I create a Metaclass?

Jim McCusker
In reply to this post by Michael DeBellis-2
'White Rhino' a Species.
'White Rhino' a 'Endangered Species'.
'Endangered Species' rdfs:subClassOf Species.
George a 'White Rhino'.

George, in that KB, is not an endangered species, but is a member of an endangered species. You were suggesting this kind of modeling:

'Endangered Species' rdfs:subClassOf Species.
'White Rhino' rdfs:subClassOf 'Endangered Species'.
George a 'White Rhino'.

Here, George is an endangered species, which is not true in a set theoretic sense or in English.

'White Rhino' is, in addition to a set of things (that George belongs to), *also* a species, which is a special(ized) kind of set. Additionally, a further specialization of that set is an Endangered Species. They are meta-classes because they are classes of classes.

Punning is a way to talk about classes in ways other than OWL semantics and annotations. I would posit that punning potentially eliminates the need for annotation properties, since it solves the problem in a more generalized way.

So I don't see the objections to using punning if you're clear that it's basically a technique (or caveat) that keeps reasoners from blowing up.

Jim
 

On Thu, Apr 25, 2019 at 4:46 PM Michael DeBellis <[hidden email]> wrote:
>Except that White Rhino isn't a subclass of Endangered Species, it's an instance of Endangered Species. 

By that argument then WhiteRhino shouldn't be a class at all, since it's just as valid to say "White Rhino is an instance of a  Species" as it is to say "White Rhino is an instance of an Endangered  Species". I think you are conflating English and Logic. English like all human languages is inherently ambiguous and there are almost always multiple possible logical models for any English sentence. So you can't just look at English usage and assume that if we say "X is an instance of Y" that it necessarily means that the only or best possible logical model is to make X an Individual rather than a Class. It depends on what your application is and what specific things you care about modeling. 

Michael

On Thu, Apr 25, 2019 at 5:39 AM Jim McCusker <[hidden email]> wrote:
Except that White Rhino isn't a subclass of Endangered Species, it's an instance of Endangered Species. An individual rhino isn't itself an endangered species, so you shouldn't try to shoehorn in the metaclass in as a superclass. Class subsumption has very strict rules, and I see this kind of error all the time - adding superclasses where it's flat out wrong to say that members of the subclass are always members of the superclass.

Punning lets us be honest with our semantics, and I'll ding any ontology paper that tries to shoehorn in bad subclassof relations.

Jim

On Wed, Apr 24, 2019 at 1:18 PM Michael DeBellis <[hidden email]> wrote:
This is off topic and nit picking but I always thought the "Endangered Species" example that is the one most often used as an example of punning in OWL is a bad example. The reason I think it's a bad example (or am I missing something?) is that you don't need to use punning. You could just have another class called EndangeredSpecies and make Panda (and Eagle, the common example) subclasses of those classes as well as of Bird and whatever Pandas are. It seems to me that any example where you are just using a boolean is a bad example because that could just as easily (and IMO more intuitively) be a class. 

Michael

On Wed, Apr 24, 2019 at 10:02 AM Samson Tu <[hidden email]> wrote:
Hi,

One question I ask when I try to decide whether to model something as a class or as an individual is “do I need to have subclasses”  of this entity? “iPhone 10” clearly have subclasses iPhone XR, iPhone XS, and iPhone XS Max. If you model iPhone 10 as an individual, how are you going to deal with the these subtypes?

A better example of the need for punning is “Panda is an endangered species.” We probably want to model “Panda” as a class of individuals pandas, but being endangered is a statement about the species as a whole, not of individuals of the species.

With best regards,
Samson


On Apr 24, 2019, at 9:45 AM, Matthew Horridge <[hidden email]> wrote:

Hi Javier,

In addition to Samson’s comment (my questions is the same as his).  I would have a hierarchy like this

Product
    SmartPhone
        iPhone10

These represent classes of phones.   If you want to represent a model, as in a design, then I’d do this with individuals and use HasValue restrictions to link to this individuals.  For example (using “Design” rather than “Model” to avoid ambiguity),

iPhone10 SubClassOf (hasDesign value iPhone10Design)

then you can state additional facts about the actual design individual, for example,

iPhone10Design isDesignedBy iPhone10DesignTeam
iPhone10Design hasRelease iPhone10Release
iPhone10Design hasSuccessor iPhone10XRDesign

etc.

Cheers,

Matthew



On Apr 24, 2019, at 09:30, Samson Tu <[hidden email]> wrote:

On Apr 24, 2019, at 5:35 AM, Javingka <[hidden email]> wrote:

Hi Matthew, and thanks for your answer.

I gonna use an example from "Demystifying OWL for the Enterprise" by Michael
Uschold. To explain why I do need this behavior.

I have a class called /ProductModel/ that has a subClass /SmartPhoneModel/
with *_iPhone10* as a member individual.

Why do you need to represent iPhone 10 as an individual? 

But I need to consider the members of the /SmartPhoneModel/ class as more
than just individuals. In the world, a particular smartphone model
corresponds to the set of all individual phones that are instances of those
particular models.
so /iPhone10/ should also be a class where each instance is an specific
individual phone (e.g. *_javiersiPhone10*)

I'm modeling a GeneralOntology made by MetaClasses (this is the idea), I
need this in order to instantiate those MetaClases to generate what I'm
calling SpecificOntologies with its own instantiated Classes, where I gonna
finally instantiate Individuals and use it forward to query against.


With best regards,
Samson


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

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

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


--
Jim McCusker

Director, Data Operations
Tetherless World Constellation
Rensselaer Polytechnic Institute
[hidden email]
http://tw.rpi.edu
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user


--
Jim McCusker

Director, Data Operations
Tetherless World Constellation
Rensselaer Polytechnic Institute
[hidden email]
http://tw.rpi.edu

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

Re: How can I create a Metaclass?

Michael DeBellis-2
In reply to this post by Vaclav
Vaclav,  Sorry, I'm still not quite getting it. Can you be more specific about exactly which are the three classes involved? I.e., which are the two classes you think need to be disjoint (and why) and which is the class that you think needs to be a subclass of both of them? I apologize if you've already said that but I couldn't figure it out for sure based on your previous messages. Also, if you have an ontology already developed and it's not too large or proprietary you could include it in your message. I find that often makes it a lot easier to figure these things out. 

One last thing: it's not uncommon in my experience to start with classes that are defined as disjoint only to realize as you go that they shouldn't be. I still don't understand your problem enough to tell if that is the case here but that is something you might want to consider. 

Michael

On Thu, Apr 25, 2019 at 1:57 PM Vaclav <[hidden email]> wrote:
Michael DeBellis-2 wrote
> You can't, or rather if you do you will have a class that can't have any
> members. And I think that if you find yourself in that situation you have
> modeled something incorrectly, either the two classes aren't really
> disjoint or the new class doesn't need to be a subclass of both (perhaps
> it's a containment or some other relation with one of the classes).



Michael DeBellis-2 wrote
> I don't understand the legal domain so I don't think I followed your
> example, but to the extent that I did understand it, it seems to me
> perhaps
> you are conflating two concepts that are homonyms in English. A contract
> can refer to a specific actual paper document but it can also refer to the
> abstract requirements that the document is meant to enforce. Similar to
> the
> way I can talk about the "Bill of Rights" and mean (the usual meaning) the
> principles that are defined as rights for all Americans or I can use the
> same phrase to talk about the actual paper document that is stored on
> display somewhere. I might be completely misunderstanding your example,
> but
> I'm confident if you explained it in more detail there would be a rational
> way to model it without making some class a subclass of two disjoint
> classes.
> Michael

Thank you for answering, Michael!

There are many a different set of abstract requirements (class), some of
which are contracts (subclass) (others would be statutes, case law, etc.)

Also, there are many kinds of actions the law attaches consequences to (so
called juristic facts, class), some of which are contracts (subclass)
(others would be torts, wills, etc.)

Then, there's a document, which is a surrogate for juristic facts, their
physical representation, or evidence (the deed).

All those three are treated as distinct entities in the legal science. E.g.,
only the first one can be terminated, i.e. the requirements stop being
legally binding, whereas the deed can't be terminated as such. Hope it makes
sense.








--
Sent from: http://protege-project.136.n4.nabble.com/Protege-User-f4659818.html
_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user

_______________________________________________
protege-user mailing list
[hidden email]
https://mailman.stanford.edu/mailman/listinfo/protege-user
12