Re: Designing my vocabulary

James,

You’d need to handle constraint checking in your own code.  If you adopt the greater W3C semantic web stack, you could formalize your constraints with SHACL and use a SHACL processor to enforce them.  There are other ways, too - but all involve adding some more technology into the mix.

Adam




> On Mar 11, 2020, at 8:37 AM, James Hudson <jameshudson3010@gmail.com> wrote:
> 
> Hello Adam,
> 
> Thank you for your quick reply. It does help.
> 
> You provided:
> 
> {
>   "@context": {
>     "@vocab": "http://my-company.org/ <http://my-company.org/>"
>   },
>   "@id": "AirlineIntl",
>   "@type":"MyCompanyClass",
>   "name":"James's Airlines Intl.",
>   "chanceOfSuccess": {
>     "@type":"QuantitativeValue",
>     "value": "50"
>   }
> }
> 
> Where or how do I define that the chanceOfSuccess must be a value between 0 and 100?
> 
> The way I would define chanceOfSuccess when used on the AirlineIntl instance, it would not make sense it to be a negative value or greater than 100. I am thinking there is a need for this acceptable range of values to be part of the vocabulary. To resolve this, I am thinking there is a need for a subclass of MyCompanyClass which defines and limits the value to a min and max value.
> 
> Perhaps you already covered this in your reply, but it is the key part that still confuses me.
> 
> Regards,
> James
> 
> 
> On Wed, Mar 11, 2020 at 9:58 AM Adam Kimball <adam@akimball.org <mailto:adam@akimball.org>> wrote:
> James,
> 
> I think your intuition is correct, you are mixing up your universals and your instances.  In A you have a class definition which would allow you to make instances.  Even here the comment suggests a little blurry thinking because a class cannot change the world, maybe the instances of the class can change the world?  Important difference but otherwise this class definition looks fine.
> 
> At a glance, your property looks good.  Maybe a little stringently defined though - is chanceOfSuccess only applicable to your MyCompanyClass or to anything that might have a chance of a success like the odds that tonight I will win the lottery?  Or that my cat will live another year?  So, you can see, I think the domain is overly specified - why not loosen it up?  Give it a non-camelCase name if you are going to use rdfs:label, no need to be so terse!
> 
> Okay, in C you are getting bogged down.  It isn’t the the CLASS MyCompanyClass has a success rate as it is only a class, a possible set of values.  You already have the class and the property, now you just need to use them.  We build instances by making nodes that connect to our classes by isA relationships and then we hook them up with properties. 
> 
> I’m also going to fix your context to provide a default namespace.  Contexts are not hard but can be fiddly, to I recommend making sure you know how they work.  Ok with that in mind here is an instance
> 
> {
> 
>   "@context": {
>     "@vocab": "http://my-company.org/ <http://my-company.org/>"
>   } ,
> "@id": "AirlineIntl",
> "@type":"MyCompanyClass",
> "name":"James's Airlines Intl.",
> "chanceOfSuccess": {
>     "@type":"QuantitativeValue",
>     "value": "50"
>   }
> }
> 
> 
> Put that into the JSON LD playground and see the visualized graph.  As a note, we haven’t really defined what “name” is (you use rdfs:label in another example, but you’ll need to map that into your @context to resolve it.)
> 
> Note: this is fast and loose.  It parses to RDF but I think you’ll need to tweak things.
> 
> Hope that helps,
> Adam
>  
> 
> 
>> On Mar 11, 2020, at 7:26 AM, James Hudson <jameshudson3010@gmail.com <mailto:jameshudson3010@gmail.com>> wrote:
>> 
>> Hello,
>> 
>> I am working on designing a vocabulary and generally liked the approach taken by schema.org <http://schema.org/>.
>> 
>> The syntax I will be adopting is json-ld.
>> 
>> There is a concept I would like to have in my vocabulary and I am not precisely sure what the proper design would be. It involves having a property with a well defined min & max value -- like a percentage which would take on values of 0 to 100. The idea is that I would like to define a property which specifies what the acceptable min and max values are for the value of the property.
>> 
>> I see that schema.org <http://schema.org/> defines QuantitativeValue which has minValue and maxValue properties. I believe one would start with a subclass of QuantitativeValue, but I am not certain where to go from there. 
>> 
>> To try to answer this question myself, let's define a class which will have a property which has a min and max value.
>> 
>> (A)
>>     {
>>       "@id": "http://my-company.org/MyCompanyClass <http://my-company.org/MyCompanyClass>",
>>       "@type": "rdfs:Class",
>>       "rdfs:comment": "A class that will change the world",
>>       "rdfs:label": "MyCompanyClass",      
>>     },
>> 
>> The property of the class would be defined as:
>>   
>> (B)
>>     {
>>       "@id": "http://my-company.org/chanceOfSuccess <http://my-company.org/chanceOfSuccess>",
>>       "@type": "rdf:Property",
>>       "http://schema.org/domainIncludes <http://schema.org/domainIncludes>": {
>>         "@id": "http://my-company.org/MyCompanyClass <http://my-company.org/MyCompanyClass>"
>>       },
>>       "http://schema.org/rangeIncludes <http://schema.org/rangeIncludes>": {
>>           "@id": "http://schema.org/QuantitativeValue <http://schema.org/QuantitativeValue>"
>>       },
>>       "rdfs:comment": "The chance of success as expressed as a percentage between 0 and 100.",
>>       "rdfs:label": "chanceOfSuccess"
>>     }    
>> 
>> It is at this point that I get a bit confused about how to proceed.
>> 
>> Taking a look at https://schema.org/LoanOrCredit <https://schema.org/LoanOrCredit>, I might try to do the following:
>> 
>> (C)
>> {
>> "@context":"http://my-company.org <http://my-company.org/>",
>> "@type":"MyCompanyClass",
>> "name":"An attempt I will make",
>> "chanceOfSuccess": {
>>     "@type":"QuantitativeValue",
>>     "name": "the chances",
>>     "minValue":"0",
>>     "maxValue":"100"
>>   }
>> }   
>> 
>> And again, I am stuck and unsure of how to proceed. It seems as if the minValue & maxValue fields belong in the property defintion.
>> 
>> Why do I think I am stuck?
>> 
>> Because, at this point, I would like to use (C) as a Class or Type and then write something like:
>> 
>> (D)
>> {
>> "@context":"http://my-company.org <http://my-company.org/>",
>> "@type":"(C)",
>> "name":"about my attempt",
>> "chanceOfSuccess": {
>>     "@type":"QuantitativeValue",
>>     "value": "50"
>>   }
>> } 
>> 
>> 
>> Something doesn't feel right about all of this. I am clearly missing some key concept, but I am not sure what that is at the moment.
>> 
>> Any thoughts, comments, or ideas would be appreciated.
>> 
>> Regards,
>> James
> 
> 
> 
>> On Mar 11, 2020, at 7:26 AM, James Hudson <jameshudson3010@gmail.com <mailto:jameshudson3010@gmail.com>> wrote:
>> 
>> Hello,
>> 
>> I am working on designing a vocabulary and generally liked the approach taken by schema.org <http://schema.org/>.
>> 
>> The syntax I will be adopting is json-ld.
>> 
>> There is a concept I would like to have in my vocabulary and I am not precisely sure what the proper design would be. It involves having a property with a well defined min & max value -- like a percentage which would take on values of 0 to 100. The idea is that I would like to define a property which specifies what the acceptable min and max values are for the value of the property.
>> 
>> I see that schema.org <http://schema.org/> defines QuantitativeValue <https://schema.org/QuantitativeValue> which has minValue and maxValue properties. I believe one would start with a subclass of QuantitativeValue, but I am not certain where to go from there. 
>> 
>> To try to answer this question myself, let's define a class which will have a property which has a min and max value.
>> 
>> (A)
>>     {
>>       "@id": "http://my-company.org/MyCompanyClass <http://my-company.org/MyCompanyClass>",
>>       "@type": "rdfs:Class",
>>       "rdfs:comment": "A class that will change the world",
>>       "rdfs:label": "MyCompanyClass",      
>>     },
>> 
>> The property of the class would be defined as:
>>   
>> (B)
>>     {
>>       "@id": "http://my-company.org/chanceOfSuccess <http://my-company.org/chanceOfSuccess>",
>>       "@type": "rdf:Property",
>>       "http://schema.org/domainIncludes <http://schema.org/domainIncludes>": {
>>         "@id": "http://my-company.org/MyCompanyClass <http://my-company.org/MyCompanyClass>"
>>       },
>>       "http://schema.org/rangeIncludes <http://schema.org/rangeIncludes>": {
>>           "@id": "http://schema.org/QuantitativeValue <http://schema.org/QuantitativeValue>"
>>       },
>>       "rdfs:comment": "The chance of success as expressed as a percentage between 0 and 100.",
>>       "rdfs:label": "chanceOfSuccess"
>>     }    
>> 
>> It is at this point that I get a bit confused about how to proceed.
>> 
>> Taking a look at https://schema.org/LoanOrCredit <https://schema.org/LoanOrCredit>, I might try to do the following:
>> 
>> (C)
>> {
>> "@context":"http://my-company.org <http://my-company.org/>",
>> "@type":"MyCompanyClass",
>> "name":"An attempt I will make",
>> "chanceOfSuccess": {
>>     "@type":"QuantitativeValue",
>>     "name": "the chances",
>>     "minValue":"0",
>>     "maxValue":"100"
>>   }
>> }   
>> 
>> And again, I am stuck and unsure of how to proceed. It seems as if the minValue & maxValue fields belong in the property defintion.
>> 
>> Why do I think I am stuck?
>> 
>> Because, at this point, I would like to use (C) as a Class or Type and then write something like:
>> 
>> (D)
>> {
>> "@context":"http://my-company.org <http://my-company.org/>",
>> "@type":"(C)",
>> "name":"about my attempt",
>> "chanceOfSuccess": {
>>     "@type":"QuantitativeValue",
>>     "value": "50"
>>   }
>> } 
>> 
>> 
>> Something doesn't feel right about all of this. I am clearly missing some key concept, but I am not sure what that is at the moment.
>> 
>> Any thoughts, comments, or ideas would be appreciated.
>> 
>> Regards,
>> James
> 

Received on Wednesday, 11 March 2020 17:19:05 UTC