SemanticApplicationDesignLanguage / sadl

Semantic Application Design Language (SADL) Open Source Code
http://semanticapplicationdesignlanguage.github.io/sadl/
Eclipse Public License 1.0
30 stars 12 forks source link

Cardinality constraint results in OWL with no range #1134

Open cuddihyge opened 11 months ago

cuddihyge commented 11 months ago

In the SADL below, the resulting OWL is generated such that the property owner has no range specified. The property owner2 does have the correct range.

uri "http://semtk.ge.com/cardinality2" alias c2.

Item is a class,
    described by owner with at most 1 value of type Item. 

Item2 is a class,
    described by owner2 with values of type Item2.
owner2 of Item2 has at most 1 value. 
crapo commented 11 months ago

@cuddihyge , I'm inclined to think that this is how it should behave. To specify a max qualified cardinality constraint, i.e., "owner of Item has at most 1 value of type Item" does not require that the range of owner be Item. The range might be a superclass of Item or it might not be specified at all--having a range is not, to my knowledge, required for a qualified cardinality constraint to be specified. Do you disagree? If so, why?

cuddihyge commented 11 months ago

@crapo Re-reading that SADL literally (which is undoubtedly the correct way to read SADL), I can see how my interpretation may not be correct.

But there seems to be good precedent for my assumption that that the statements about owner and owner2 would be equivalent: the SADL below for a single value results in owl which gives a range of Item to the property owner.

I was more familiar with using a single value, presumed it was correct, and presumed at most 1 value would behave similarly and specify a range.

SADL:

Item is a class,
    described by owner with a single value of type Item.

Item2 is a class,
    described by owner2 with values of type Item.
owner2 of Item2 has exactly 1 value.

owl

   .
   .
   .
  <owl:ObjectProperty rdf:about="#owner">
    <rdfs:domain rdf:resource="#Item"/>
    <rdfs:range rdf:resource="#Item"/>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="#owner2">
    <rdfs:domain rdf:resource="#Item2"/>
    <rdfs:range rdf:resource="#Item"/>
  </owl:ObjectProperty>
</rdf:RDF>