- From: Nathan <nathan@webr3.org>
- Date: Wed, 23 Mar 2011 18:14:00 +0000
- To: RDF WG <public-rdf-wg@w3.org>
Hi All,
Here's a tiny proposal:
1: Constrain JSON [1] to be an (optionally nested) sequence of one or
more objects (where one, no enclosing [] is needed).
2: constrain object keys to be strings with no white space
3: add in IRI recognition as a value type (wrapped in quotes), likewise
dateTime, date and time.
4: add recognition for a special "@id" property who's value is an IRI
(sets the subject of the object when present)
5: add recognition for a special "@vocab" property who's value is an IRI
(when present, each key in that object is concatenated to the @vocabs
value to form the IRI of the property)
6: add recognition for a special "@type" property who's value is simple
string (when present the value is concatenated to the @vocabs value to
form the IRI of the rdf:type)
7: add recognition for a special "@base" property who's value is an IRI
(relative IRI-ref resolution)
For the Sample Graphs [2] this would produce:
{
"@vocab": "http://xmlns.com/foaf/0.1/",
"@type": "Person",
"@id": "http://jondoe.example.org/#me",
"nick": "Jonny",
"givenname": "Jon",
"family_name": "Doe",
"depiction": "http://jondoe.example.org/me.jpg",
"homepage": "http://jondoe.example.org/",
"interest": "http://dbpedia.org/resource/Film",
"knows": {
"@type": "Person",
"@id": "http://janedoe.example.org/#me",
"name": "Jane Doe"
}
}
and for the next example:
{
"@vocab": "http://business.example.org/v/custom-gr-merged#",
"@base": "http://business.example.org/openinghours.html",
"@id": "#business",
"@type": "BusinessEntity",
"label": "Example Business, Inc.",
"legalName": "Example Business, Inc.",
"page": [
"http://business.example.com",
"http://business.example.org/openinghours.html"
],
"fn": "Example Business, Inc.",
"geo": {
"latitude": "49.0202626",
"longitude": "12.8407428"
},
"tel": "+49-12-3546789",
"url": "http://business.example.com",
"hasPOS": {
"@vocab": "http://purl.org/goodrelations/v1#",
"@type": "LocationOfSalesOrServiceProvisioning",
"@id": "#shop",
"hasOpeningHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"@id": "#mon",
"opens": "08:00:00",
"closes": "18:00:00"
},
{
"@type": "OpeningHoursSpecification",
"@id": "#tue",
"opens": "08:00:00",
"closes": "18:00:00"
},
{
"@type": "OpeningHoursSpecification",
"@id": "#wed",
"opens": "08:00:00",
"closes": "14:00:00"
},
{
"@type": "OpeningHoursSpecification",
"@id": "#thu",
"opens": "08:00:00",
"closes": "18:00:00"
},
{
"@type": "OpeningHoursSpecification",
"@id": "#fri",
"opens": "08:00:00",
"closes": "20:00:00"
},
{
"@type": "OpeningHoursSpecification",
"@id": "#mon",
"opens": "09:00:00",
"closes": "15:00:00"
}
]
}
trade-offs and clarifications:
- multiple values represented by an array
- blank nodes are objects with no "@id" (blank node identifiers not
supported)
- no provision for @language or @datatype
- when terms from multiple vocabularies are needed it requires people
to make their own custom vocab which includes aliases to terms in other
vocabularies. (having a single cachable vocab is lighter for network
though and easier to maintain)
I think that's about it..
Best,
Nathan
[1] http://json.org/
[2] http://www.w3.org/2011/rdf-wg/wiki/TF-JSON#Sample_Graphs
Received on Wednesday, 23 March 2011 18:15:03 UTC