Re: SKOS Instance V Classes

Renato, I encountered this myself. IMO, the SKOS spec is just a bit out of
date (or perhaps I just read an older version). In any case in the version
I read the spec said something like: "in the future there will be a
meta-object protocol for OWL". Those aren't the exact words, I think I
cover this in more detail in the blog posts below. There is indeed a meta
-class and meta-property protocol for OWL now. This is what punning is for.
When you pun a class or a property you create an individual with the same
IRI as the class or property:
https://www.w3.org/TR/owl2-new-features/#F12:_Punning

When you do this you can treat the pun as an individual that represents the
class/property and you can apply all the SKOS object properties to it such
as narrower and broader. When you pun a class/property there is no standard
as to which class the pun itself should be an instance of. Technically you
shouldn't make it an instance of the class that it puns but technically
that also isn't really wrong because as far as the reasoner is concerned a
pun is just another individual. While various tools (e.g. Protege) know
that a pun represents a class or property as well as an individual the
reasoner doesn't because that would put you into second order logic and
make it too difficult for the reasoner. The reasoner knows from the context
when it sees a pun whether or not the pun in that context represents a
class or an individual and treats it correctly but the reasoner doesn't
know or care that the IRI for the class and instance happen to be the same
because the reasoner doesn't work at the level of a graph but at the
logical level, so logically the individual and class are two different
things, it is only at the graph level where they are the same.  What I
usually do is to make all my puns instances of skos:Concept. FYI, you can
write SPARQL to generate puns. I've done that a few times where I want to
pun a whole group of classes or properties. E.g., if you want to make
MyClass in the ontology with prefix dom and all its subclasses puns you can
just do:

INSERT {?c a skos:Concept.}
WHERE {?c rdfs:subClassOf dom:MyClass.
FILTER(?c != owl:Thing && ?c != owl:Nothing)}

I always filter out Thing and Nothing because of course you never want to
mess with those. Also, when you do this you could assert broader and
narrower properties on the puns that correspond to the skos broader and
narrower properties.

Besides the documentation link above you might find a couple of posts on my
blog to be helpful:
https://www.michaeldebellis.com/post/puns_in_owl_the_whys_and_hows
https://www.michaeldebellis.com/post/skosintro

Hope that helps.
Cheers,
Michael

On Sun, Jan 28, 2024 at 8:14 PM Renato Iannella <r@iannel.la> wrote:

> Hi all, I have a question (that I hope you have not covered before …if
> so…please send the archive links…)
>
> Having developed a number of SKOS vocabs over the years (across different
> domains) I am constantly faced with the challenge of developing a
> “vocabulary” that supports both the SKOS model (ie terms are instances of
> skos:Concept) and terms that are also owl:Classes - to enable standard
> inferencing.
>
> Here is a simple example:
>
> vocab:SmokingVariety a skos:ConceptScheme, owl:Class ;
>             rdfs:subClassOf vocab:Vocabulary ;
>             skos:prefLabel "Smoking Variety"@en-uk .
>
> vocab:cigarette a skos:Concept, owl:Class ;
>             skos:prefLabel "Cigarette"@en-uk ;
>             skos:definition "Processed tobacco, manufactured into cylinder
> made of paper."@en-uk ;
>             rdfs:subClassOf vocab:SmokingVariety ;
>             skos:topConceptOf vocab:SmokingVariety .
>
>
> Are there any best-practices in this context?
>
> Thanks…
>
> Renato
>
>
>
>

Received on Monday, 29 January 2024 15:15:26 UTC