- From: James M Snell <jasnell@gmail.com>
- Date: Tue, 3 Nov 2015 17:16:45 -0800
- To: Aaron Parecki <aaron@parecki.com>
- Cc: "public-socialweb@w3.org" <public-socialweb@w3.org>
Btw, Some additional comments based on looking at the current version
of jf2 JSON-LD @context definition here:
https://github.com/dissolve/socialstream/blob/master/jf2.php
1. You map "url" to "@id". This is likely to interact badly with other
JSON-LD vocabularies that have their own definitions of "url" already.
The best practice is to map "@id" to "id".
2. You map both "type" and "content-type" to "@type". This means that
"@type" will be aliased to "content-type" and the information will be
lost after JSON-LD processing. Also, the @type keyword is specifically
limited to URL's, not media types. See: http://tinyurl.com/p6y59lm and
http://tinyurl.com/pwmyd2q for examples that show how this mapping is
a problem (yes, I see that you map a couple of the media types to
terms in the context but the way this is defined, you'd have to map
EVERY possible media type in a JSON-LD @context in order for it to
work reliably unless you're strictly limiting implementations to these
two media types)
3. You map "lang" to "@language". Your draft currently does not define
how "lang" would be used but if the intent is for "lang" to be used to
establish a global default language context, it doesn't work that way
in JSON-LD and this mapping will lead to problems.
4. You have two separate aliases defined for "adr":
- "adr": "mf:h-adr"
- "adr": "mf:microformats2#p-adr"
5. You've duplicated the definition of "author":
- "author": "mf:microformats2#p-author",
- "author": "mf:microformats2#p-author",
6. You have two separate aliases defined for "item":
- "item": "mf:h-item"
- "item": "mf:microformats2#p-item"
7. Keep in mind that because you do not define @vocab in the context
to set the default vocabulary, any property not defined in the
@context will be silently dropped after JSON-LD processing and any
vocab value (such as "content-type" as you've currently defined) will
be resolved as relative URL references.
- James
On Tue, Nov 3, 2015 at 4:51 PM, James M Snell <jasnell@gmail.com> wrote:
> On Tue, Nov 3, 2015 at 4:46 PM, Aaron Parecki <aaron@parecki.com> wrote:
>> Thanks for looking over this, but please don't make assumptions about what
>> the purpose of jf2 is. I tried adding it to the agenda for today's call, but
>> it was continually pushed down in the list to make room for all the AS2
>> issues and we didn't get to talk about it at all.
>>
>
> Fair enough. I'm responding to what I've already been told about it's
> purpose. Harry indicated previously that it was intended as an
> alternative to AS 2.0 and, from what I understand, there's been some
> discussion/disagreement among the chairs about considering it as an
> alternative to AS2 that ought to be considered a parallel work item of
> the working group. My analysis is based on that information. If you
> (as the author) have a different point of view on it, then fantastic,
> and I certainly hope you take no offense to the analysis.
>
> - James
>
>> The real goal with jf2 is to show an attempt at bringing the microformats
>> community closer to what the AS and other JSON-based communities expect from
>> a syntax. I know there's been a lot of talk about "compromising" and
>> "convergence" between the three communities, and that's exactly what this is
>> an exercise in. I'm sorry you are seeing it as a thread/competitor to what
>> you are doing, but that was not the intent. The intent is to bring
>> everything closer in line like we have all been talking about for such a
>> long time. If you are seeing similarities between jf2 and AS2 that is great,
>> because that is literally the goal of converging.
>>
>> I won't be able to make the call next week, but I will continue working on
>> jf2 with others in the mean time and hope to get it on the agenda for the
>> call on the 17th.
>>
>> ----
>> Aaron Parecki
>> aaronparecki.com
>> @aaronpk
>>
>>
>> On Tue, Nov 3, 2015 at 4:29 PM, James M Snell <jasnell@gmail.com> wrote:
>>>
>>> There has been some discussion of whether an alternative JSON
>>> serialization should be considered by this WG. The proposal that has
>>> been put on the table is currently being called "jf2". The current
>>> draft can be found here:
>>> https://github.com/w3c-social/Social-Syntax-Brainstorming/wiki/jf2
>>>
>>> I cannot speak to the motivations for why folks feel this second draft
>>> would be necessary or even remotely beneficial to the WG's efforts but
>>> I can do a side by side comparison with the syntax spec we already
>>> have.
>>>
>>> Going through the current draft of the jf2 draft on the wiki:
>>> https://github.com/w3c-social/Social-Syntax-Brainstorming/wiki/jf2...
>>>
>>> 1. Post object ..
>>>
>>> a. effectively the same as Object in AS2. Calling it something else is
>>> not a
>>> worthwhile "improvement"
>>>
>>> b. "type" is essentially the same function as AS2's "type". No real
>>> benefit
>>> gained. The write up proposes using the Microformats list as the
>>> "full"
>>> list but doesn't indicate anything about extensibility.
>>>
>>> c. Overall, doesn't seem to buy us anything different than current
>>> AS2 Object definition.
>>>
>>> jf2 example:
>>> ```json
>>> {
>>> "type": "entry",
>>> }
>>> ```
>>> AS 2.0 example:
>>> ```json
>>> {
>>> "@context": "http://www.w3.org/ns/activitystreams",
>>> "type": "Note"
>>> }
>>> ```
>>>
>>> 2. URL values
>>>
>>> a. "Every value that is a URL is in an object with a property of url"
>>> ...
>>> This statement is not clear.
>>>
>>> b. This is generally equivalent to the most common case in AS2. AS2
>>> does
>>> have the additional bit that "url" can specify multiple urls
>>>
>>> c. Overall, doesn't seem to buy us anything different than current
>>> AS2 "url" definition.
>>>
>>> jf2 example:
>>> ```json
>>> {
>>> "type": "image",
>>> "url": "http://example.org/foo.png"
>>> }
>>> ```
>>> AS 2.0 example:
>>> ```json
>>> {
>>> "@context": "http://www.w3.org/ns/activitystreams",
>>> "type": "Image",
>>> "url": "http://example.org/foo.png"
>>> }
>>> ```
>>>
>>> jf2 example:
>>> ```json
>>> {
>>> "type": "entry",
>>> "video": [
>>> {
>>> "type": "video",
>>> "content-type": "video/mp4",
>>> "url": "sample_h264.mov"
>>> },
>>> {
>>> "type": "video",
>>> "content-type": "video/ogg",
>>> "url": "sample_ogg.ogg"
>>> },
>>> {
>>> "type": "video",
>>> "content-type": "video/webm",
>>> "url": "sample_webm.webm"
>>> }
>>> ]
>>> }
>>> ```
>>> AS 2.0 Example:
>>> ```json
>>> {
>>> "@context": "http://www.w3.org/ns/activitystreams",
>>> "type": "Video",
>>> "url": [
>>> {
>>> "mediaType": "video/mp4",
>>> "href": "sample_h264.mov"
>>> },
>>> {
>>> "mediaType": "video/ogg",
>>> "href": "sample_ogg.ogg"
>>> },
>>> {
>>> "mediatype": "video/webm",
>>> "href": "sample_webm.webm"
>>> }
>>> ]
>>> }
>>> ```
>>>
>>> 3. Post properties
>>>
>>> "The list of valid post properties is defined by vocabularies. This
>>> allows
>>> new vocabularies to be developed outside the development of the syntax"
>>>
>>> This is equivalent to AS 2.0's existing extensibility model.
>>>
>>> js2 example
>>> ```json
>>> {
>>> "type": "entry",
>>> "published": "2015-10-20T15:49:00-0700",
>>> "url": "http://example.com/post/fsjeuu8372",
>>> "author": {
>>> "type": "card",
>>> "name": "Alice",
>>> "url": "http://alice.example.com",
>>> "photo": {
>>> "type": "image",
>>> "url": "http://alice.example.com/photo.jpg"
>>> }
>>> },
>>> "name": "Hello World",
>>> "content": "This is a blog post"
>>> }
>>> ```
>>> AS 2.0 example:
>>> ```json
>>> {
>>> "@context": "http://www.w3.org/ns/activitystreams",
>>> "type": "Note",
>>> "published": "2015-10-20T15:49:00-0700",
>>> "url": "http://example.com/post/fsjeuu8372",
>>> "attributedto": {
>>> "type": "Person",
>>> "displayName": "Alice",
>>> "url": "http://alice.example.com",
>>> "image": {
>>> "type": "Image",
>>> "url": "http://alice.example.com/photo.jpg"
>>> }
>>> },
>>> "displayName": "Hello World",
>>> "content": "This is a blog post"
>>> }
>>> ```
>>> The examples are essentially equivalent. jf2 gives provides nothing new.
>>>
>>> jf2 example:
>>> ```json
>>> {
>>> "type": "entry",
>>> "published": "2015-10-20T15:49:00-0700",
>>> "url": "http://example.com/like/r23eugi02c",
>>> "author": {
>>> "type": "card",
>>> "name": "Alice",
>>> "url": "http://alice.example.com",
>>> "photo": {
>>> "type": "image",
>>> "url": "http://alice.example.com/photo.jpg"
>>> }
>>> },
>>> "like-of": {
>>> "url": "http://bob.example.com/post/100"
>>> }
>>> }
>>> ```
>>> AS 2.0 Example:
>>> ```json
>>> {
>>> "@context": "http://www.w3.org/ns/activitystreams",
>>> "type": "Like",
>>> "published": "2015-10-20T15:49:00-0700",
>>> "url": "http://example.com/like/r23eugi02c",
>>> "actor": {
>>> "type": "Person",
>>> "displayName": "Alice",
>>> "url": "http://alice.example.com",
>>> "image": {
>>> "type": "Image",
>>> "url": "http://alice.example.com/photo.jpg"
>>> }
>>> },
>>> "object": "http://bob.example.com/post/100"
>>> }
>>> ```
>>> The examples are essentially equivalent. jf2 gives provides nothing new.
>>>
>>> 4. Author
>>>
>>> "An author is represented by the h-card vocabulary"
>>>
>>> AS 2.0 refers to the standardized hcard vocabulary. jf2 is offering
>>> nothing new.
>>>
>>> jf2 example:
>>> ```json
>>> {
>>> "type": "card",
>>> "name": "Aaron Parecki",
>>> "photo": {
>>> "type": "image",
>>> "url": "http://aaronparecki.com/photo.jpg"
>>> },
>>> "url": "http://aaronparecki.com/"
>>> }
>>> ```
>>> AS 2.0 Example:
>>> ```json
>>> {
>>> "@context": "http://www.w3.org/ns/activitystreams",
>>> "type": "Person",
>>> "displayName": "Aaron Parecki",
>>> "image": {
>>> "type": "Image",
>>> "url": "http://aaronparecki.com/photo.jpg"
>>> },
>>> "url": "http://aaronparecki.com/"
>>> }
>>> ```
>>>
>>> 5. HTML Content
>>>
>>> jf2 example:
>>> ```json
>>> {
>>> "type": "entry",
>>> "content": {
>>> "content-type": "text/html",
>>> "value": "<b>Hello World</b>"
>>> }
>>> }
>>> ```
>>> AS 2.0 Example:
>>> ```json
>>> {
>>> "@context": "http://www.w3.org/ns/activitystreams",
>>> "type": "Note",
>>> "mediaType": "text/html",
>>> "content": "<b>Hello World</b>"
>>> }
>>> ```
>>>
>>> 6. Collections
>>>
>>> jf2 does not offer anything distinctly different from AS 2.0
>>> collections
>>>
>>> jf2 example:
>>> ```json
>>> {
>>> "type": "feed",
>>> "url": "http://alice.example.com/collectionurl",
>>> "name": "Alice's Home Page",
>>> "author": {
>>> "type": "card",
>>> "name": "Alice",
>>> "url": "http://alice.example.com",
>>> "photo": {
>>> "type": "image",
>>> "url": "http://alice.example.com/photo"
>>> }
>>> },
>>> "children": [
>>> { ... },
>>> { ... }
>>> ]
>>> }
>>> ```
>>> AS 2.0 Example:
>>> ```json
>>> {
>>> "@context": "http://www.w3.org/ns/activitystreams",
>>> "type": "Collection",
>>> "url": "http://alice.example.com/collectionurl",
>>> "displayName": "Alice's Home Page",
>>> "attributedTo": {
>>> "type": "Person",
>>> "displayName": "Alice",
>>> "url": "http://alice.example.com",
>>> "image": {
>>> "type": "Image",
>>> "url": "http://alice.example.com/photo"
>>> }
>>> },
>>> "items": [
>>> { ... },
>>> { ... }
>>> ]
>>> }
>>> ```
>>> the only difference between these is that I renamed fields, added the
>>> @context, and used different values for "type". jf2 offers nothing
>>> different from what's currently in AS 2.0.
>>>
>>> 7. Summary
>>>
>>> So far, jf2 offers nothing that isn't already covered by AS 2.0.
>>> At best, it represents an exercise in bikeshedding over property names
>>> and a handful of values. AS 2.0 does cover a broader range of use
>>> cases than jf2 so an argument can be made that jf2 is "less
>>> complicated". jf2 attempts to defer the complexity of that by
>>> referencing out to individual microformats vocabularies. I would argue
>>> that doing so actually does not reduce the complexity for
>>> implementers, it simply shifts the problem do a different set of
>>> specs.
>>>
>>> I would note that jf2 does not currently handle internationalization
>>> concerns. Addressing such concerns would lead jf2 to duplicate more of
>>> what is already in AS 2.0 today.
>>>
>>> Obviously, I'm leading in to this review with an obvious bias towards
>>> the spec we've already been working on for the past year, that already
>>> does everything we need, and that folks have already implemented. I'd
>>> encourage the proponents and authors of jf2 to make specific change
>>> proposals against AS 2.0 if they really feel that things can be
>>> simplified further.
>>>
>>> - James
>>>
>>
Received on Wednesday, 4 November 2015 01:17:36 UTC