Re: Designing my vocabulary

Hello Adam,

Yes, I understand that there must be code which enforces the constraint,
but it would not seem necessary to encode the property and constraints in
the code alone.

It would be nice to be able to specify the constraints in the json object
which the code would then interpret and use.

For example, there may be another situation where the min chance of success
is 10%. It would seem unnecessary to have a massive if statement in code
for every possible combination of min and max value based on the name of
the property. I would like the json object itself to contain the min and
max value.

Perhaps I am not making myself clear...?

Regards,
James




On Wed, Mar 11, 2020 at 1:18 PM Adam Kimball <adam@akimball.org> wrote:

> 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/"
>   },
>   "@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> 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/"
>>   } ,
>> "@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>
>> wrote:
>>
>> Hello,
>>
>> I am working on designing a vocabulary and generally liked the approach
>> taken by 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 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",
>>       "@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",
>>       "@type": "rdf:Property",
>>       "http://schema.org/domainIncludes": {
>>         "@id": "http://my-company.org/MyCompanyClass"
>>       },
>>       "http://schema.org/rangeIncludes": {
>>           "@id": "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, I might try to do the
>> following:
>>
>> (C)
>> {
>> "@context":"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",
>> "@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>
>> wrote:
>>
>> Hello,
>>
>> I am working on designing a vocabulary and generally liked the approach
>> taken by 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 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",
>>       "@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",
>>       "@type": "rdf:Property",
>>       "http://schema.org/domainIncludes": {
>>         "@id": "http://my-company.org/MyCompanyClass"
>>       },
>>       "http://schema.org/rangeIncludes": {
>>           "@id": "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, I might try to do the
>> following:
>>
>> *(C)*
>> {
>> "@context":"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",
>> "@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:51:05 UTC