On Apr 2, 2012, at 9:24 AM, Danny Ayers wrote:
> Hi Markus,
>
> Thanks. The use of "_:blank" is clear now I've seen an example, but
> really wasn't obvious from the spec, I'd still suggest a doc tweak.
Danny, do you think that [1] isn't clear? Or that it is referenced too far down in the document?
[[[
At times, it becomes necessary to be able to express information without being able to specify the subject. Typically, this type of node is called an unlabeled node or a blank node. In JSON-LD, unlabeled node identifiers are automatically created if a subject is not specified using the @idkeyword. However, authors may provide identifiers for unlabeled nodes by using the special _ (underscore) prefix. This allows to reference the node locally within the document but not in an external document.
]]]
> Re. typing of objects, right, it makes sense now you mention
> literals/scalars. In this case when the context says the object of a
> statement is an @id as well as the actual statement it's redundant,
> but I guess that still might be useful as a sanity-checking
> annotation.
Typically, you wouldn't use both the expanded form and a compact form if you specify the datatype in the context, but it's certainly allowed.
Gregg
[1] http://json-ld.org/spec/latest/json-ld-syntax/#identifying-unlabeled-nodes
> Cheers,
> Danny.
>
> On 2 April 2012 12:28, Markus Lanthaler <markus.lanthaler@gmx.net> wrote:
>> Hi Danny,
>>
>>> After not having looked at the spec for months, I'm in the process of
>>> manually converting a bit of Turtle into JSON-LD. I stumbled at this
>>> point:
>>>
>>> <http://hyperdata.org/Hello>
>>> foaf:maker [ foaf:nick "danja" ] .
>>>
>>> Text-searching the spec ("blank nodes") I found:
>>>
>>> http://json-ld.org/spec/latest/json-ld-syntax/#identifying-unlabeled-
>>> nodes
>>>
>>> ...which didn't seem to help at all. How would the above be expressed
>>> using the "_:blank" style?
>>
>> Generally blank nodes are generated automatically when you convert to RDF. If you want to label an object with a specific blank node you use the idiom described in the spec.
>>
>> So the above example (which also just has implicit blank nodes) would be expressed as follows:
>>
>> {
>> "@context": {
>> "maker": "http://xmlns.com/foaf/0.1/maker",
>> "nick": "http://xmlns.com/foaf/0.1/nick"
>> },
>> "@id": "http://hyperdata.org/Hello",
>> "maker": {
>> "@id": "_:blank",
>> "nick": "danja"
>> }
>> }
>>
>>
>>> One thing I'm still uncertain about is that although the JSON-LD above
>>> produced the triples I was after, the context part doesn't distinguish
>>> what kind of a node the object of maker/subject of nick was. This
>>> appears to be possible using the context:
>>>
>>> "@context": {
>>> "maker": {
>>> "@id": "http://xmlns.com/foaf/0.1/maker",
>>> "@type": "@id"
>>> },
>>>
>>> - but doesn't make any difference to the resulting triples.
>>
>> The reason for this is that you set the value to an object and not a literal (string, number, boolean in JSON). If you would have set it to "http://example.org/maker" you would have to add that @type declaration.
>>
>>
>>> Leading to the question: why would/should anyone bother putting node
>>> type info into the context?
>>
>> It's used for type coercing with scalars/literals. As explained above. Since you use an object as value, JSON-LD automatically generates an identifier for that object and "knows" that it is an IRI (when converted to Turtle for example).
>>
>>
>> Hope this helps,
>> Markus
>>
>>
>> --
>> Markus Lanthaler
>> @markuslanthaler
>>
>>
>>
>
>
>
> --
> http://dannyayers.com
>
> http://webbeep.it - text to tones and back again
>