- From: James Hudson <jameshudson3010@gmail.com>
- Date: Mon, 9 Mar 2020 13:10:33 -0400
- To: Robert Sanderson <azaroth42@gmail.com>
- Cc: Ivan Herman <ivan@w3.org>, Linked JSON <public-linked-json@w3.org>
- Message-ID: <CAEUVO9GCdaVC8K70HY6xJdF3euNmq1cW+qq=2RSym2NHN6h16A@mail.gmail.com>
Hello Rob,
Yes, that was very helpful. Thank you.
Regards,
James
On Mon, Mar 9, 2020 at 12:05 PM Robert Sanderson <azaroth42@gmail.com>
wrote:
>
> Prefixes (task, tt) are only recognized when the expansion algorithm knows
> that it's a resource. Otherwise, it's treated as a string.
>
> `{"@id": "tt:taskEnum"}` explicitly declares it to be a resource, and
> hence the URI is expanded.
>
> You could do that in the context, and thus allow "tt:taskEnum" in the
> data, like this:
>
> {
> "@context": {
> "tt": "http://company/tasking#",
> "task": "http://company/taskont#",
> "task:enumerated": {"@type": "@id"}
> },
> "task:enumerated": "tt:taskEnum"
> }
>
> Or, better, use `@vocab` and also put taskEnum into the context:
>
> {
> "@context": {
> "tt": "http://company/tasking#",
> "task": "http://company/taskont#",
> "enumerated": {"@type": "@vocab", "@id": "task:enumerated},
> "Enum": {"@id": "tt:taskEnum"}
> },
> "enumerated": "Enum"
> }
>
> (Assuming that there are a limited, enumerable set of values for
> task:enumerated)
>
> Hope that helps!
>
> Rob
>
>
> On Mon, Mar 9, 2020 at 8:56 AM James Hudson <jameshudson3010@gmail.com>
> wrote:
>
>> Hello Ivan,
>>
>> Thank you for your quick reply. It was useful.
>>
>> Your point regarding
>>
>> "task:taskDescription": {
>> "@value": "The description of the task"
>> },
>>
>> vs
>>
>> "task:taskDescription": "The description of the task",
>>
>> is well taken.
>>
>> It does bring up another question.
>>
>> Let's say that I had:
>>
>> {
>> "@context": {
>> "tt": "http://my-company-name/Tasking#",
>> "task": "http://my-company-name/data/TaskingOntology#"
>> },
>> "@graph": [
>> {
>> "@id": "tt:taskparta_TaskSubject",
>> "task:enumerated": {
>> "@id": "tt:taskEnum"
>> }
>> }
>> ]
>> }
>>
>> In this case, tt:taskEnum can be correctly expanded to
>> http://my-company-name/Tasking#
>>
>> However, if I did "task:enumerated": "tt:taskEnum", then it would not be
>> expanded.
>>
>> I am just trying to understand the expansion rules a bit better. Is there
>> anything you would be able to say to help me understand the expansion rules?
>>
>> But, this may be a case of needing to read the spec (RTFM). It may help
>> if there was a particular part of the spec that speaks directly to this
>> issue.
>>
>> Regards,
>> James
>>
>> On Sat, Mar 7, 2020 at 3:02 AM Ivan Herman <ivan@w3.org> wrote:
>>
>>> Dear James,
>>>
>>> First of all, to your second and third question: the JSON-LD you have is
>>> absolutely correct and, without knowing the details of the vocabulary you
>>> use, does not 'smell':-). As for the 'a' in the turtle output, that is a
>>> widely used Turtle idiom (does not have anything to do with JSON-LD: it is
>>> a shorthand for rdf:type.
>>>
>>> I have made a few changes on your example, mostly to address your first
>>> question. The "@graph" construct makes it possible to gather nodes on the
>>> 'top level' as you wanted but also to share contexts. Ie, you do not have
>>> to repeat the context. The other change I have made is when you have
>>> properties whose values are simply strings, it is possible to make the
>>> JSON-LD data more compact by just using that string as a value. Though your
>>> construction of using an object with "@value" is absolutely correct, it is
>>> too complicated for that simple case.
>>>
>>> Here is the new version:
>>>
>>> {
>>> "@context": {
>>> "tt": "http://my-company-name/Tasking#",
>>> "task": "http://my-company-name/data/TaskingOntology#",
>>> "rdfs": "http://www.w3.org/2000/01/rdf-schema#"
>>> },
>>> "@graph": [
>>> {
>>> "@id": "tt:Task_3",
>>> "@type": "task:Task",
>>> "task:itemToTeardown": {
>>> "@id": "tt:TaskSubject"
>>> },
>>> "task:taskDescription": "The description of the task",
>>> "rdfs:label": "Task 3"
>>> },
>>> {
>>> "@id": "tt:taskparta_TaskSubject",
>>> "task:isComponentOf": {
>>> "@id": "task:TaskSubject"
>>> },
>>> "rdfs:label": "Label A"
>>> },
>>> {
>>> "@id": "tt:taskpartb_TaskSubject",
>>> "task:isComponentOf": {
>>> "@id": "task:TaskSubject"
>>> },
>>> "rdfs:label": "Label B"
>>> }
>>> ]
>>> }
>>>
>>> I hope this helps
>>>
>>> Sincerely
>>>
>>> Ivan Herman
>>>
>>>
>>>
>>>
>>>
>>> On 6 Mar 2020, at 19:22, James Hudson <jameshudson3010@gmail.com> wrote:
>>>
>>> I have the following JSON-LD document:
>>>
>>> [
>>> {
>>> "@context": {
>>> "tt": "http://my-company-name/Tasking#",
>>> "task": "http://my-company-name/data/TaskingOntology#",
>>> "rdfs": "http://www.w3.org/2000/01/rdf-schema#"
>>> },
>>> "@id": "tt:Task_3",
>>> "@type": "task:Task",
>>> "task:itemToTeardown": {
>>> "@id": "tt:TaskSubject"
>>> },
>>> "task:taskDescription": {
>>> "@value": "The description of the task"
>>> },
>>> "rdfs:label": {
>>> "@value": "Task 3"
>>> }
>>> },
>>> {
>>> "@context": {
>>> "tt": "http://my-company-name/Tasking#",
>>> "task": "http://my-company-name/data/TaskingOntology#",
>>> "rdfs": "http://www.w3.org/2000/01/rdf-schema#"
>>> },
>>> "@id": "tt:taskparta_TaskSubject",
>>> "task:isComponentOf": {
>>> "@id": "task:TaskSubject"
>>> },
>>> "rdfs:label": {
>>> "@value": "Label A"
>>> }
>>> },
>>> {
>>> "@context": {
>>> "tt": "http://my-company-name/Tasking#",
>>> "task": "http://my-company-name/data/TaskingOntology#",
>>> "rdfs": "http://www.w3.org/2000/01/rdf-schema#"
>>> },
>>> "@id": "tt:taskpartb_TaskSubject",
>>> "task:isComponentOf": {
>>> "@id": "task:TaskSubject"
>>> },
>>> "rdfs:label": {
>>> "@value": "Label B"
>>> }
>>> }
>>> ]
>>>
>>>
>>> using https://github.com/RDFLib/rdflib-jsonld, it will produce the
>>> following RDF:
>>>
>>> @prefix ns1: <http://my-company-name/data/TaskingOntology#> .
>>>
>>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>>>
>>> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
>>>
>>> @prefix xml: <http://www.w3.org/XML/1998/namespace> .
>>>
>>> @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
>>>
>>>
>>> <http://my-company-name/Tasking#Task_3> a ns1:Task ;
>>>
>>> rdfs:label "Task 3" ;
>>>
>>> ns1:itemToTeardown <http://my-company-name/Tasking#TaskSubject> ;
>>>
>>> ns1:taskDescription "The description of the task" .
>>>
>>>
>>> <http://my-company-name/Tasking#taskparta_TaskSubject> rdfs:label "Label A" ;
>>>
>>> ns1:isComponentOf ns1:TaskSubject .
>>>
>>>
>>> <http://my-company-name/Tasking#taskpartb_TaskSubject> rdfs:label "Label B" ;
>>>
>>> ns1:isComponentOf ns1:TaskSubject .
>>>
>>>
>>> I have the following questions:
>>>
>>> (1) I need to duplicate the @context across several entries. Is there
>>> some way to avoid that? I note that in the RDF, the common prefixes can be
>>> shared.
>>>
>>> (2) Does the JSON-LD stuff look "right"? Does anything smell? It is hard
>>> for me to judge having only starting looking at such things.
>>>
>>> (3) In the RDF, I see <http://my-company-name/Tasking#Task_3> *a*
>>> ns1:Task ; ... what is the 'a'? Where did it come from?
>>>
>>> Thank you.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> ----
>>> Ivan Herman, W3C
>>> Home: http://www.w3.org/People/Ivan/
>>> mobile: +31-641044153
>>> ORCID ID: https://orcid.org/0000-0003-0782-2704
>>>
>>>
>
> --
> Rob Sanderson
> Semantic Architect
> The Getty Trust
> Los Angeles, CA 90049
>
Received on Monday, 9 March 2020 17:10:59 UTC