Re: jf2 vs. AS 2.0

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