The x: namespace
Every term in the x: RDF vocabulary, with a one-line definition. The namespace URL x rdf writes, dereferenced.
@prefix x: <https://x-cli.tamnd.com/ns#> .
x rdf writes schema.org wherever a term exists and x: where none does. This
page is the x: half. It is served at the namespace URL itself, so a triple
store that follows its nose from x:repliesTo lands here.
Nothing on this page is an invention where schema.org already had a word. A
reply is not a schema:comment, because a comment is a different thing on a
different kind of page; a repost is not a schema:sharedContent, because that
is what was shared and not the act of sharing. Where the fit was close enough,
the mapping uses schema.org and this page says nothing at all: schema:author,
schema:mentions, schema:citation, schema:keywords,
schema:associatedMedia, schema:sameAs, schema:location,
schema:containedInPlace, schema:memberOf.
Classes
| Term | What it is |
|---|---|
x:Conversation |
A thread, identified by the id X gives the whole conversation rather than any one post in it. |
x:Hashtag |
A hashtag, lowercased, without the #. |
x:Cashtag |
A ticker symbol tag, lowercased, without the $. |
x:Trend |
One trending topic, in one place, at one moment. All three parts are part of the identity. |
x:Poll |
A poll attached to a post. |
x:Card |
A link preview card: the title, description, and image X renders for a URL. |
x:CommunityNote |
A Community Note attached to a post. |
Properties
| Term | Domain to range | What it says |
|---|---|---|
x:repliesTo |
post to post | This post is a reply to that one. |
x:reposts |
post to post | This post is a repost of that one. |
x:inConversation |
post to conversation | This post belongs to that thread. |
x:taggedSymbol |
post to cashtag | This post carries that ticker tag. |
x:hasPoll |
post to poll | This post carries that poll. |
x:hasCard |
post to card | This post carries that link preview. |
x:hasNote |
post to note | This post carries that Community Note. |
x:pinned |
account to post | This account has pinned that post to its profile. |
x:follows |
account to account | The first account follows the second. A followers listing and a following listing both normalise to this, pointing the way the claim points. |
x:liked |
account to post | This account liked that post. |
x:reposted |
account to post | This account reposted that post. |
x:owns |
account to list | This account owns that list. |
x:hosted |
account to space | This account hosted that Space, or created it. |
x:spokeIn |
account to space | This account held the microphone in that Space. Not x:hosted, because a speaker is not an admin. |
x:joined |
account to dateTime | When the account was created. schema:dateCreated describes the page rather than the person, so this is its own term. |
x:state |
space to text | X's own word for what became of a Space: Running, Scheduled, Ended, TimedOut, Canceled. Not normalised, because a Space that timed out and one the host ended are different events and only X knows which happened. |
Counters
Engagement counts are not x: terms. They are schema:InteractionCounter,
which is what X itself publishes in the microdata on every status and profile
page, so the counts a crawl produces line up with the counts X states:
<x://tweet/20> schema:interactionStatistic [
a schema:InteractionCounter ;
schema:interactionType schema:LikeAction ;
schema:name "Likes" ;
schema:userInteractionCount 307403
] .
Followers use schema:interactionStatistic and follows use
schema:agentInteractionStatistic, which is the same split X makes: one is
something done to the account, the other is something the account did.