- From: Michael DeBellis <mdebellissf@gmail.com>
- Date: Mon, 29 Jan 2024 07:15:08 -0800
- To: Renato Iannella <r@iannel.la>
- Cc: public-esw-thes@w3.org
- Message-ID: <CALGFikcb1VM5uFe-pE3W62GOAZSxNGJ_Cx60biBTgjK8fU30GA@mail.gmail.com>
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