Skip to main content


I'm still not clear about the discussion we had yesterday. @evan are AS2 (and #ActivityPub) serializations JSON-LD or not? I see the AS2 spec says the serialization only has "“compatibility with JSON-LD” but must conform to JSON-LD algorithm requirements. I understand if it's JSON-LD, it is also JSON (but not necessarily the inverse). Like we discussed yesterday, JSON-LD is JSON and it's an RDF data model. JSON, in general, is neither JSON-LD nor an RDF data model.
This entry was edited (1 month ago)
in reply to Steve Bate

they're JSON-LD because we needed an extension mechanism.

You can generate RDF triples if you really want. I think quads are even better.

But you can't read those triples to find the secret design intent of AS2. We designed it from JSON down, not from RDF up.

in reply to Evan Prodromou

I understand the extension goal, but how does that work without using JSON-LD processing to expand (disambiguate) terms? In other words, how is extensibility supposed to work for developers using plain JSON?
in reply to Steve Bate

you put an URL in your context array that says, "I support this extension."

Then, you use terms from that extension.

And, yes, I'm aware it can get a lot more complicated, but it doesn't have to.

in reply to Evan Prodromou

That's not going to handle the same property names in different extensions (without JSON-LD expansion). If that weren't an issue, there could just be an "extensions" property with a list of URIs and JSON-LD could be eliminated completely.
in reply to Evan Prodromou

you were talking about whether activities you receive are "in" your inbox.

It's hard to say "where" a digital object is. In ActivityPub, it's very reasonable to say that the object only truly exists at the URL of its id, and everything else is a copy or reference.

But Collection objects can have JSON objects (copies) and/or URLs (references) in the items array. Saying those objects aren't really "in" the Collection is misleading. Using RDF triples to prove that the aren't is wrong.

in reply to Evan Prodromou

I'd add that even from a pure RDF graph perspective, it doesn't matter whether the object (activity) of a triple statement is a URI or a bnode (optionally the copy of all the triple statements about that object).

What typically matters is if the collection is "self-describing", i.e., the inbox URI (the Collection) is the subject, the lifecycle of the triple statement is expected to be under the control of the inbox owner. The URI owner essentially controls the statements any way.

This entry was edited (1 month ago)
in reply to Evan Prodromou

I think we're conflating data models with JSON(-LD) *serialization* of those models and that's going to cause even more confusion. Without RDF, I think it's not going to be easy to discuss whatever abstract data model AP uses.
in reply to Steve Bate

I think trying to define where digital objects *really* are is a fool's errand. When I get an inbox, it has activities in it.
in reply to Evan Prodromou

I mean, are apples really "on" your shopping list? No, there is not a pile of fruit on top of the piece of paper. The letters "A-P-P-L-E-S" are not actual apples. They're not even the idea of apples. But saying "I have apples on my shopping list" is useful and meaningful.
in reply to Evan Prodromou

Not necessarily. If you'd like, I can quickly write a simple AP-server that will return a JSON-serialized inbox Collection with URIs in the "orderedItems" array instead of embedded serialized copies of the object referents. It won't interoperate with typical server implementations (Vocata is one exception), although AFAIK it would be conformant with AP/AS2. But again, this is conflating serialization with whatever abstract data model underlies it.
in reply to Steve Bate

ok. The abstract model is, "the objects are in the collection".
in reply to Evan Prodromou

One can discuss containment without identifying the *real* location of objects (whatever that even means). You seem to be annoyed with this discussion, so I'm going to end my part in the thread now. However, I think it's important (and maybe I'm the only one that feels this way?) to discuss and fully understand these and other confusing aspects of AP/AS2, so don't be surprised to see related posts in the future.
in reply to Steve Bate

I think it's a style issue. You started the thread by saying that collections do not contain AS2 objects. This is untrue, unless you twist the definition of "contain".
in reply to Evan Prodromou

I'm open to style suggestions. However, I still think my original statements are true. I've tried to explain why, but if you have questions, let me know.
in reply to Steve Bate

for style, I guess I'd suggest softening language or even asking a question when your statement is counterintuitive and provocative. Instead of "The AS2 container type does not contain objects" maybe "I think the AS2 container type does not contain objects" or "Does the AS2 container type contain objects?" or "What does containment mean in AS2?"
in reply to Evan Prodromou

I'm also REALLY oversensitive to any statements about allowed representation of objects in AP. As you probably know better than I, a lot of AP consumers fail to robustly handle id representation or object representation of property values.
This entry was edited (1 month ago)
in reply to Evan Prodromou

I understand. That's why I said repeatedly that I'm not discussing serialization. I agree that serializing Collections with embedded copies of Objects is needed for interoperability with most existing AP S2S implementations. To clarify, are you concerned about statements related to valid, allowed AP (serialized) representations that aren't the ones typically implemented? Versus invalid representations?
in reply to Steve Bate

so, this is an interesting question. I'd say, as an interoperability standard, AP doesn't make any (well, not many...) assumptions about underlying models. The JSON-LD serialization is all you get; each implementation decides how to manage its own structures internally.
in reply to Evan Prodromou

and, yes, what I worry about is when people say, "the value of the `object` property can only be in its JSON object representation" or "the members of the `items` array can only be URLs". It's not true, it's hard for people to understand, and it drives us towards fragile implementations.
in reply to Evan Prodromou

We're back in the circular reasoning since JSON-LD *has* a well-defined data model. It's RDF and graph-based (Chapt 10. JSON-LD 1.1 spec.). The statement that AP uses "JSON-LD" but is not an RDF data model doesn't make sense to me given how JSON-LD is specified. I don't think JSON-LD provides much extensibility benefit to plain JSON apps. Maybe there should be a variant of #ActivityPub that is unambiguously plain JSON with a plain JSON extensibility design? Maybe less confusing for devs?
in reply to Steve Bate

so, it sounds like you want to believe in some kind of secret, hermeneutical ActivityPub that one can only understand if you cast enough RDF spells.

But there is no such secret formula. We made no pact with the RDF powers when we started using JSON-LD for AS2.

in reply to Evan Prodromou

We created these types and structures to represent activities, actors and objects on social networks. An object with type Person represents a person. An object with type Video represents a video. An object with type Collection is a collection.

The RDF model is no more significant than the curly brackets and colons in the JSON.

in reply to Evan Prodromou

also, I wonder if you've read the section on object representations in Chapter 2 of my book? It goes into a lot of detail about how these things interact.

https://www.oreilly.com/library/view/activitypub/9781098162733/

in reply to Evan Prodromou

is there in the meanwhile s way to geht it without abo? Will there be a print version?
in reply to naturzukunft

@naturzukunft if you want one, please contact O'Reilly. We're doing ebook only at first, but they said if there's enough interest they'll do a print book. So please let them know!
in reply to Evan Prodromou

so if I want to read it now I need to sign up for an O'Reilly account? (10-day free trial?)

@naturzukunft @steve

in reply to naturzukunft

Question:
Hi there, i would like to order the ActivityPub by Evan Prodromou ISBN: 9781098169466 as print version. Is this possible ?

Answer:
Hi Fred,
Thanks for contacting us. Unfortunately, this title has been canceled and can't be ordered. Please let me know if you have any questions.

Kind regards,
Paul | Senior Customer Support

in reply to Evan Prodromou

There's no need to "cast" me in that light. However, intentional pact or not... it would be like selecting RDF/XML as the AP/AS2 representation but saying it should be treated as generic XML and has no relationship to RDF. Or using Turtle and suggesting that it be interpreted as just lines of text with no relation to RDF. I think it's a very confusing position. If you had to make that decision (to use JSON-LD) today, would you make the same decision? Why?
in reply to Steve Bate

I think James had switched to JSON-LD before we started the WG. We discussed it a lot; the continuum between JSON, JSON-LD, and RDF. I think the balance works well, and I like how much the RDF community has embraced AS2. There are a couple of other schema languages for JSON, like JSON Schema, but I don't think they lend a lot that JSON-LD lacks.
in reply to Evan Prodromou

oh, and the example you gave about XML is exactly how people worked with RSS up until version 2.0!
in reply to Evan Prodromou

I'm not exactly clear about the analogy, but maybe someday we'll say that's how it worked in ActivityPub up until version 2.0! 😉
in reply to Steve Bate

early versions of RSS were based on RDF/XML. Version 2.0 is not. People parsed it as plain XML.
in reply to Steve Bate

also, you don't have to wait for some imaginary future version. If you want to change ActivityPub, make extensions. It's really easy, and if your extension gets popular, it will get merged into the main AS2 context.
in reply to Evan Prodromou

I remember AS2 as JLD being part of the WG charter, and therefore not really up for discussion. Maybe that discussion was had before the invites went out, but it felt too me a bit like a mandate from "on high" (i.e. the W3C)

I regret how the JLD interop was specified in the spec though. I think we could have done better

in reply to Erin 💽✨

@erincandescent James used JSON-LD in the later drafts of the AS2 RFC, so it antedated coming to W3C. But it definitely also worked as a selling point internally, at least until the SoLiD schism.
in reply to Evan Prodromou

JSON-LD is a Linked Data (RDF) serialization. I think it's a stretch to call it a schema language in the same genre as JSON Schema. The JSON-LD AP context can only be compared to a schema language in very limited ways. I'd expect one would use RDF Schema (RDFS) or SHACLE or Shape Expressions (ShEx), maybe OWL, *with* JSON-LD for that purpose. Given that, would you personally still choose JSON-LD today, since the focus is on plain JSON? I'm not asking about what Snell chose a decade ago.
in reply to Steve Bate

it's no longer up to you or me. The AS2 spec was standardized in 2018 and AP in 2019. We have hundreds of implementations, tens of thousands of servers, and tens of millions of user accounts.
in reply to Evan Prodromou

there's no latitude at all to change the primary serialization format for AS2. JSON-LD meets all our needs, anyway.
in reply to Evan Prodromou

so, I did a gist that I think represents your original point, namely, that regardless of whether the object is represented as a JSON object or an URL in the `items` property array value of an AS2 `Collection`, the triple generated to represent the relationship of containment is the same. Is that roughly it?

https://gist.github.com/evanp/dc5f242aa4a2a6aab1f8b9977e4d04fc

This entry was edited (1 month ago)
in reply to Evan Prodromou

I can definitely agree with that, although it gets more complicated with paged collections. For AS2 and AP, this also shows a single note in a collection, but the RDF is not the same.

https://gist.github.com/evanp/86f81773d2a06eac91f67574f004500b

This entry was edited (1 month ago)
in reply to Evan Prodromou

Yes, that’s essentially it. The AS2 Collection paging is a whole other discussion. The RDF triples are accurately representing what’s in the page-related JSON-LD, but the JSON-LD isn’t literally serializing one item in a Collection. It’s serializing a Collection referencing a CollectionPage (via `first`) that references one item (which is consistent with the RDF triples).
in reply to Steve Bate

the note is contained in the collection in all three examples. That's the abstract model. I agree, the RDF is different.
in reply to Evan Prodromou

Right, the RDF differs because the Collection's JSON-LD serialization is different in the paged serialization. I'd prefer that the Collection representation wouldn't change for paging, but I know that's another aspect of AS2 that will not change. Linked Data Platform (LDP) Paging describes a different way that doesn't couple the Collection and page representations so tightly. IIRC, they use Link headers for page refs and transient objects (in AP terms) for pages. https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp-paging.html
in reply to Steve Bate

it's neat. I can't remember why we decided not to use LDP collections.
in reply to Steve Bate

Some AP advocates/activities like @smallcircles have been proposing something similar to this for a while now (discussed on SocialHub).