@chronicle.app/schema 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,13 +22,17 @@ the examples format.
22
22
  Plugins extend these roots only where their outputs require it: Things adds task
23
23
  lifecycle actions and collections/tags; shell adds commands, people, and machine
24
24
  realms; iMessage adds messages and attachment media; Claude Code adds threads,
25
- software agents, and model instruments. Shared properties cover source identity,
25
+ software agents, and model instruments; Safari adds page views; Arc Timeline adds
26
+ visits, trips, places, and journeys; WhatsApp adds group channels, members, and
27
+ quoted replies. Shared properties cover source identity,
26
28
  event time, agents, membership, authors, and recipients.
27
29
 
28
- `Text`, `URL`, and `DateTime` are literal datatypes. Cardinality in
30
+ `Text`, `URL`, `DateTime`, `Date`, and `Number` are literal datatypes, under `DataType`. Cardinality in
29
31
  `chronicle.ttl` defines each property's constraints: `owl:minCardinality 1` makes
30
32
  it required, and `owl:maxCardinality 1` makes it single-valued; otherwise it is a list. Records carry `@type` and at least one of `@key` (a nonempty list of
31
- identity fields or computed key entries) or `@id` (an existing identity).
33
+ identity fields or computed key entries) or `@id` (an existing identity). A
34
+ record can also carry `@assertedAt`, the instant its source observed it, and
35
+ `@asserts`, the predicates it states completely (`'*'` for all of them).
32
36
  Identity validation checks that declaration, not the existence or hash of the
33
37
  referenced fields. Source-specific extraction owns the values; never invent IDs
34
38
  to make a record pass validation.
package/chronicle.ttl CHANGED
@@ -3,9 +3,10 @@
3
3
  @prefix owl: <http://www.w3.org/2002/07/owl#> .
4
4
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
5
5
  @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
6
+ @prefix schemaorg: <https://schema.org/> .
6
7
 
7
8
  : a owl:Ontology;
8
- owl:versionInfo "0.1.0" .
9
+ owl:versionInfo "0.2.0" .
9
10
 
10
11
  :Base a rdfs:Class;
11
12
  rdfs:comment "The common base for entities and actions described by a source. Each node carries an identity, expressed as @key or @id, so it can be referenced across records." .
@@ -16,8 +17,10 @@
16
17
  rdfs:subClassOf :Base;
17
18
  rdfs:comment "An occurrence recorded by a source, such as reading an article, sending a message, or visiting a place. Its :object identifies the entity the action was carried out on." .
18
19
  :Text a rdfs:Class;
20
+ rdfs:subClassOf :DataType;
19
21
  rdfs:comment "A literal string, used for values such as names and source identifiers. Text is carried directly as a property value and has no node identity of its own." .
20
22
  :URL a rdfs:Class;
23
+ rdfs:subClassOf :Text;
21
24
  rdfs:comment "A Uniform Resource Locator expressed as an absolute URL string, such as https://example.com/article. Used for properties that locate a resource." .
22
25
 
23
26
  :sourceId a rdf:Property;
@@ -42,6 +45,7 @@
42
45
  :rangeIncludes :Entity .
43
46
 
44
47
  :DateTime a rdfs:Class;
48
+ rdfs:subClassOf :DataType;
45
49
  rdfs:comment "An instant anchored in time, including a date and time of day. Represented as a JavaScript Date in extracted records; use only when the source provides enough information to identify an instant." .
46
50
  :Agent a rdfs:Class;
47
51
  rdfs:subClassOf :Entity;
@@ -50,7 +54,7 @@
50
54
  rdfs:subClassOf :Entity;
51
55
  rdfs:comment "A unit of work to be done, such as a to-do item. The task carries its :name and :description; actions record its planning, updates, completion, or cancellation." .
52
56
  :Collection a rdfs:Class;
53
- rdfs:subClassOf :Entity;
57
+ rdfs:subClassOf :CreativeWork;
54
58
  rdfs:comment "A grouping of entities declared by a source, such as a list, an area of responsibility, or a section within a project. Members link to the collection through :isPartOf." .
55
59
  :Project a rdfs:Class;
56
60
  rdfs:subClassOf :Collection;
@@ -82,7 +86,8 @@
82
86
  rdfs:comment "The instant when the action occurred, as reported by the source. Records occurrence time, not the time Chronicle extracted the record.";
83
87
  owl:maxCardinality 1;
84
88
  :domainIncludes :Action;
85
- :rangeIncludes :DateTime .
89
+ :rangeIncludes :Date,
90
+ :DateTime .
86
91
  :agent a rdf:Property;
87
92
  rdfs:comment "The doer of the action, when identified by the source. Omit when no doer is known; an occurrence can be recorded without an agent.";
88
93
  owl:maxCardinality 1;
@@ -134,13 +139,13 @@
134
139
  :rangeIncludes :Entity .
135
140
 
136
141
  :Message a rdfs:Class;
137
- rdfs:subClassOf :Entity;
142
+ rdfs:subClassOf :CreativeWork;
138
143
  rdfs:comment "A communicated item, such as a text message or chat reply. Its :body carries text, :contains links attachments, and :recipient identifies the intended receivers." .
139
144
  :MessageAction a rdfs:Class;
140
145
  rdfs:subClassOf :Action;
141
146
  rdfs:comment "The sending of a message. The :object identifies the message and :agent identifies the sender when known." .
142
147
  :MediaObject a rdfs:Class;
143
- rdfs:subClassOf :Entity;
148
+ rdfs:subClassOf :CreativeWork;
144
149
  rdfs:comment "A media artifact, such as an image, audio recording, video, or document. Its :contentPath or :url locates the content, and :mimeType describes its format." .
145
150
  :ImageObject a rdfs:Class;
146
151
  rdfs:subClassOf :MediaObject;
@@ -159,8 +164,8 @@
159
164
  :domainIncludes :Message;
160
165
  :rangeIncludes :Agent .
161
166
  :contains a rdf:Property;
162
- rdfs:comment "A media artifact carried by a message, such as an attached image, voice recording, video, or document.";
163
- :domainIncludes :Message;
167
+ rdfs:comment "The components an entity is materially made of — the media files that constitute a :Post (a photo, a carousel's images and videos), the attachments carried by a :Message. Each component is a leaf-typed :MediaObject carrying its own bytes.";
168
+ :domainIncludes :Entity;
164
169
  :rangeIncludes :MediaObject .
165
170
  :contentPath a rdf:Property;
166
171
  rdfs:comment "An absolute filesystem path to the local file containing the media bytes. Describes where the extracted content is available on the source machine.";
@@ -177,7 +182,7 @@
177
182
  rdfs:subClassOf :Agent;
178
183
  rdfs:comment "Running software acting as a participant, such as an assistant, bot, or automation. It can be the :agent of an action or the :author of a message." .
179
184
  :SoftwareApplication a rdfs:Class;
180
- rdfs:subClassOf :Entity;
185
+ rdfs:subClassOf :CreativeWork;
181
186
  rdfs:comment "A software application or model used to perform work. An action can identify it through :instrument, using the source-provided application or model identifier." .
182
187
  :Thread a rdfs:Class;
183
188
  rdfs:subClassOf :Collection;
@@ -196,3 +201,493 @@
196
201
  owl:maxCardinality 1;
197
202
  :domainIncludes :Entity;
198
203
  :rangeIncludes :Realm .
204
+
205
+ :ConsumeAction a rdfs:Class;
206
+ rdfs:comment "The agent took in the :object — read, watched, listened to, ate, or drank it; the subclasses name the mode. A bare ConsumeAction records consumption in progress without a known start.";
207
+ rdfs:subClassOf :Action .
208
+
209
+ :ViewAction a rdfs:Class;
210
+ rdfs:comment "The agent looked at the :object — a web page visited, a photo opened, a document viewed. A point encounter rather than a consumption in progress.";
211
+ rdfs:subClassOf :ConsumeAction .
212
+
213
+ :Number a rdfs:Class;
214
+ rdfs:comment "A numeric value, integral or decimal.";
215
+ rdfs:subClassOf :DataType .
216
+ :startTime a rdf:Property;
217
+ rdfs:comment "The start time of an action, or the start bound of an interval value. A :DateTime is an anchored instant; a :Date is a civil whole-day bound (e.g. an all-day event).";
218
+ owl:maxCardinality 1;
219
+ :domainIncludes :Action,
220
+ :Event,
221
+ :Interval;
222
+ :rangeIncludes :Date,
223
+ :DateTime .
224
+ :endTime a rdf:Property;
225
+ rdfs:comment "The end time of an action, or the end bound of an interval value. A :DateTime is an anchored instant; a :Date is a civil whole-day bound (e.g. an all-day event).";
226
+ owl:maxCardinality 1;
227
+ :domainIncludes :Action,
228
+ :Event,
229
+ :Interval;
230
+ :rangeIncludes :Date,
231
+ :DateTime .
232
+ :result a rdf:Property;
233
+ rdfs:comment "What the action produced — the artifact or session that came into being through it.";
234
+ owl:maxCardinality 1;
235
+ :domainIncludes :Action;
236
+ :rangeIncludes :Entity .
237
+
238
+ :StructuredValue a rdfs:Class;
239
+ rdfs:comment "A value made of several fields — a position, an interval — that describes something without being an identified entity of its own." .
240
+ :Location a rdfs:Class;
241
+ rdfs:comment "A geographic position and address — coordinates (:latitude, :longitude, :elevation) and address parts (:address, :locality, :region, :country, :postalCode). A structured value with no identity of its own; the identified place it describes is a :Place.";
242
+ rdfs:subClassOf :StructuredValue .
243
+ :Place a rdfs:Class;
244
+ rdfs:comment "A location in the world with an identity of its own — a venue, a city, a region, a country. Its geographic position and address are its :location value.";
245
+ rdfs:subClassOf :Entity .
246
+ :Venue a rdfs:Class;
247
+ rdfs:comment "A specific place one goes to — a café, a shop, a park, a home, an office. The :object of a :VisitAction or :CheckInAction, and the :location where something happened.";
248
+ rdfs:subClassOf :Place .
249
+ :location a rdf:Property;
250
+ rdfs:comment "The location associated with the action or entity.";
251
+ owl:maxCardinality 1;
252
+ :domainIncludes :Action,
253
+ :Entity,
254
+ :Event;
255
+ :rangeIncludes :Place, :Location .
256
+ :latitude a rdf:Property;
257
+ rdfs:comment "The latitude of the location.";
258
+ owl:maxCardinality 1;
259
+ :domainIncludes :Location;
260
+ :rangeIncludes :Number .
261
+ :longitude a rdf:Property;
262
+ rdfs:comment "The longitude of the location.";
263
+ owl:maxCardinality 1;
264
+ :domainIncludes :Location;
265
+ :rangeIncludes :Number .
266
+ :address a rdf:Property;
267
+ rdfs:comment "The address of the location.";
268
+ owl:maxCardinality 1;
269
+ :domainIncludes :Location;
270
+ :rangeIncludes :Text .
271
+ :category a rdf:Property;
272
+ rdfs:comment "Categories or tags that classify the entity or action.";
273
+ :domainIncludes :Entity;
274
+ :rangeIncludes :Text .
275
+
276
+ :VisitAction a rdfs:Class;
277
+ rdfs:comment "The agent was present at the :object place over :startTime to :endTime — a stay somewhere, as distinct from the :TravelAction between stays.";
278
+ rdfs:subClassOf :Action .
279
+ :TravelAction a rdfs:Class;
280
+ rdfs:comment "The agent travelled from :object to :target — a physical journey between places, over :startTime to :endTime. Its :result is the :Journey recording the route, mode, and distance.";
281
+ rdfs:subClassOf :Action .
282
+ :Journey a rdfs:Class;
283
+ rdfs:comment "A recorded segment of travel — the :result of a :TravelAction, carrying the :travelMode, the :distance, and the route as :path. Dateless itself; the action carries the span.";
284
+ rdfs:subClassOf :Entity .
285
+ :travelMode a rdf:Property;
286
+ rdfs:comment "The mode of travel of a journey (e.g. walking, cycling, driving).";
287
+ owl:maxCardinality 1;
288
+ :domainIncludes :Journey;
289
+ :rangeIncludes :Text .
290
+ :distance a rdf:Property;
291
+ rdfs:comment "The distance covered by a journey, in meters.";
292
+ owl:maxCardinality 1;
293
+ :domainIncludes :Journey;
294
+ :rangeIncludes :Number .
295
+ :path a rdf:Property;
296
+ rdfs:comment "The recorded route of a journey.";
297
+ owl:maxCardinality 1;
298
+ :domainIncludes :Journey;
299
+ :rangeIncludes :Text .
300
+
301
+ :CreativeWork a rdfs:Class;
302
+ rdfs:comment "A work made by an agent — a text, a recording, a post, a message, a document. Carries its attribution (:author, :publisher), its release (:datePublished), what it is about (:about), and its composition (:isPartOf, :contains).";
303
+ rdfs:subClassOf :Entity .
304
+ :Channel a rdfs:Class;
305
+ rdfs:comment "A named, multi-participant messaging container that messages are posted to — a workspace channel, a group chat, a chat room. Messages link to it with :isPartOf; a one-to-one conversation has no Channel.";
306
+ rdfs:subClassOf :CreativeWork .
307
+ :Organization a rdfs:Class;
308
+ rdfs:comment "A group of people acting as one — a company, an institution, a club, a school. Its :member values are the agents that belong to it.";
309
+ rdfs:subClassOf :Agent;
310
+ owl:equivalentClass schemaorg:Organization .
311
+ :member a rdf:Property;
312
+ rdfs:comment "A member of the group — a musical group, an organization, or a messaging channel/group chat.";
313
+ rdfs:subPropertyOf :involvement;
314
+ :domainIncludes :Organization, :Channel;
315
+ :rangeIncludes :Person, :Agent .
316
+ :inReplyTo a rdf:Property;
317
+ rdfs:comment "The message this message is a quoted reply to.";
318
+ rdfs:subPropertyOf :relation;
319
+ :domainIncludes :Message;
320
+ :rangeIncludes :Message .
321
+
322
+ :DataType a rdfs:Class;
323
+ rdfs:comment "A simple literal value: text, a number, a date, a date-time." .
324
+ :Date a rdfs:Class;
325
+ rdfs:comment "A civil calendar date — a day in wall-clock time with no time of day and no zone, kept as an ISO date string rather than an instant. The whole-day counterpart of :DateTime: an all-day event, a date-only life event, a bare year.";
326
+ rdfs:subClassOf :DataType .
327
+ :Event a rdfs:Class;
328
+ rdfs:comment "A named happening with a declared :scheduledTime — a calendar entry, a concert, a picnic. Carries its :location and :attendee values; the :object of an :AttendAction. Its actual extent derives from the activity that constitutes it.";
329
+ rdfs:subClassOf :Entity .
330
+ :Interval a rdfs:Class;
331
+ rdfs:comment "A bounded stretch of time — a start and an end, each at its own precision. A structured value with no identity of its own, like :Location; it carries the declared extent of an event or session (its :scheduledTime), as distinct from an action's occurrence.";
332
+ rdfs:subClassOf :StructuredValue .
333
+ :relation a rdf:Property;
334
+ rdfs:comment "Any edge from an entity to another entity.";
335
+ :abstract true;
336
+ :rangeIncludes :Entity .
337
+ :involvement a rdf:Property;
338
+ rdfs:comment "An agent involved in an entity as addressee, attendee, or member.";
339
+ rdfs:subPropertyOf :relation;
340
+ :rangeIncludes :Agent .
341
+
342
+ :InteractAction a rdfs:Class;
343
+ rdfs:comment "An agent engages with another agent or a social object — communicating, following.";
344
+ rdfs:subClassOf :Action .
345
+ :CommunicateAction a rdfs:Class;
346
+ rdfs:comment "An agent conveys something to others — a message, a call, a check-in.";
347
+ rdfs:subClassOf :InteractAction .
348
+ :CallAction a rdfs:Class;
349
+ rdfs:comment "A phone or video call. :agent is the caller when known; the :result is the :CallSession the call constitutes, which carries the receiver as its :recipient and, for a group call, the :Channel it is :isPartOf.";
350
+ rdfs:subClassOf :CommunicateAction .
351
+ :Session a rdfs:Class;
352
+ rdfs:comment "A described segment of time — a bounded, characterized interval of the subject's logged activity (an app-usage block, a manual time block, a call). A sibling of :Event (a named happening); both carry a declared :scheduledTime, while their actual aliveness derives from the activity that constitutes them. A session constituted by an action (:DeviceSession, :CallSession) takes its occurrence from that action; an atomic session (a manual time block) carries its own :startTime/:endTime, like :Event.";
353
+ rdfs:subClassOf :Entity .
354
+ :CallSession a rdfs:Class;
355
+ rdfs:comment "A phone or FaceTime call as a described segment of time — the :result of a :CallAction. Carries the :recipient (the receiver) and, for group calls, :isPartOf a :Channel whose :member is the roster. A missed call is a zero-length span; a connected call a non-zero one.";
356
+ rdfs:subClassOf :Session .
357
+ :recipient :domainIncludes :CallSession .
358
+ :EatAction a rdfs:Class;
359
+ rdfs:comment "The agent ate the :object, a :Meal. Where it happened is the action's :location.";
360
+ rdfs:subClassOf :ConsumeAction .
361
+ :DrankAction a rdfs:Class;
362
+ rdfs:comment "The agent drank the :object.";
363
+ rdfs:subClassOf :ConsumeAction .
364
+ :Meal a rdfs:Class;
365
+ rdfs:comment "A meal or snack the subject ate — the :object of an :EatAction. Its slot (breakfast, lunch, dinner) is :category data.";
366
+ rdfs:subClassOf :Entity .
367
+ :Post a rdfs:Class;
368
+ rdfs:comment "A work published to a social or media platform — a feed post, a story, a reel, a tweet. A media-agnostic container: it may carry a text :body and :contains one or more media files (:MediaObject). Its native presentation format (feed, story, reel) is its :sourceFormat.";
369
+ rdfs:subClassOf :CreativeWork .
370
+ :PublishAction a rdfs:Class;
371
+ rdfs:comment "A work was published or released. Its :agent is the publisher when known and its :object the work; the work's :datePublished is when this occurred.";
372
+ rdfs:subClassOf :CreateAction .
373
+ :CreateAction a rdfs:Class;
374
+ rdfs:comment "The agent brought a work into existence. Its :result is the work created; the subclasses name the kind of making.";
375
+ rdfs:subClassOf :Action .
376
+ :LikeAction a rdfs:Class;
377
+ rdfs:comment "The agent liked the :object. Opens the agent's standing :likes run over it.";
378
+ rdfs:subClassOf :ReactAction .
379
+ :ReactAction a rdfs:Class;
380
+ rdfs:comment "A payload-free stance an agent takes on the :object, such as a like. A reaction that carries content (an emoji, a comment) is a :RespondAction.";
381
+ rdfs:subClassOf :AssessAction .
382
+ :AssessAction a rdfs:Class;
383
+ rdfs:comment "An agent takes a stance on the :object — a like, a reaction, a rating, a review.";
384
+ rdfs:subClassOf :Action .
385
+ :references a rdf:Property;
386
+ rdfs:comment "An entity this one references — an @mention, or a link from one resource to another (a web page's outbound link, a citation).";
387
+ rdfs:subPropertyOf :mentions;
388
+ :domainIncludes :CreativeWork,
389
+ :Session,
390
+ :Entity;
391
+ :rangeIncludes :Entity .
392
+ :mentions a rdf:Property;
393
+ rdfs:comment "An entity pointed to from this one (e.g. an @mention or link).";
394
+ rdfs:subPropertyOf :relation;
395
+ :rangeIncludes :Entity .
396
+ :FindAction a rdfs:Class;
397
+ rdfs:comment "The agent looked something up on a platform — an entry in a search history. :object is the :Query entered.";
398
+ rdfs:subClassOf :Action .
399
+ :Query a rdfs:Class;
400
+ rdfs:comment "A search query as entered. Carries the query text as :body; the :object of a :FindAction.";
401
+ rdfs:subClassOf :CreativeWork .
402
+ :RespondAction a rdfs:Class;
403
+ rdfs:comment "An agent responds to the :object with content — an emoji reaction, a comment, a rating, a review. The :result is the :Response carrying that content; the :object names what it is about. The payload-carrying counterpart of :LikeAction.";
404
+ rdfs:subClassOf :AssessAction .
405
+ :Response a rdfs:Class;
406
+ rdfs:comment "An agent's response to a thing, carrying its content in two facets: :body (an emoji reaction is a one-character body; prose is a :Comment) and :ratingValue (a review carries both). The :result of a :RespondAction, whose :object names what the response is about. The payload is kept verbatim in the source's own vocabulary, a literal ❤️ beside a platform's LOVE. A like with no payload is a :LikeAction rather than a Response.";
407
+ rdfs:subClassOf :CreativeWork .
408
+ :Comment a rdfs:Class;
409
+ rdfs:comment "A prose response — the :Response leaf whose :body is authored text.";
410
+ rdfs:subClassOf :Response .
411
+ :author :domainIncludes :CreativeWork .
412
+ :FollowAction a rdfs:Class;
413
+ rdfs:comment "The agent began following the :object — an account, a feed, a collection. Opens the agent's :follows run over it.";
414
+ rdfs:subClassOf :InteractAction .
415
+ :OrganizeAction a rdfs:Class;
416
+ rdfs:comment "An agent arranges or plans things — saving, bookmarking, scheduling.";
417
+ rdfs:subClassOf :Action .
418
+ :BookmarkAction a rdfs:Class;
419
+ rdfs:comment "The agent saved the :object for later — a bookmarked page, an article saved to a reading list, a work shelved as to-read.";
420
+ rdfs:subClassOf :OrganizeAction .
421
+ :sourceFormat a rdf:Property;
422
+ rdfs:comment "The source's own presentation format for an item — which of the platform's native content shapes it is among items of the same type: a story, feed post, or reel; a video, short, or live stream; a full episode, trailer, or bonus. A descriptive, per-source, open-vocabulary label, present only where the source has such a sub-format.";
423
+ owl:maxCardinality 1;
424
+ :domainIncludes :CreativeWork;
425
+ :rangeIncludes :Text .
426
+ :visibility a rdf:Property;
427
+ rdfs:comment "How widely the work is shared: `public`, `private`, or `unlisted`, always as these lowercase tokens. A coarse bucket shared across sources, onto which each source's own audience states map.";
428
+ owl:maxCardinality 1;
429
+ :domainIncludes :CreativeWork;
430
+ :rangeIncludes :Text .
431
+ :ListenAction a rdfs:Class;
432
+ rdfs:comment "The agent listened to the :object — a recording, a podcast episode. Opens or extends the agent's :consuming run over it.";
433
+ rdfs:subClassOf :ConsumeAction .
434
+ :AddAction a rdfs:Class;
435
+ rdfs:comment "The agent added the :object to the :target — a track to a playlist, a work to a collection.";
436
+ rdfs:subClassOf :UpdateAction .
437
+ :MusicRecording a rdfs:Class;
438
+ rdfs:comment "A recorded track — one performance of a :MusicComposition (:recordingOf) by an :artist, appearing on a :MusicAlbum via :inAlbum, with a :duration.";
439
+ rdfs:subClassOf :CreativeWork .
440
+ :MusicAlbum a rdfs:Class;
441
+ rdfs:comment "A released collection of recordings by an :artist; each recording on it is a :track.";
442
+ rdfs:subClassOf :CreativeWork .
443
+ :PerformingGroup a rdfs:Class;
444
+ rdfs:comment "An organization that performs — a band, a troupe, an ensemble.";
445
+ rdfs:subClassOf :Organization .
446
+ :MusicGroup a rdfs:Class;
447
+ rdfs:comment "A musical act — a band, an orchestra, or a solo artist as a performing identity. The :artist of recordings and albums.";
448
+ rdfs:subClassOf :PerformingGroup .
449
+ :PodcastEpisode a rdfs:Class;
450
+ rdfs:comment "One episode of a :PodcastSeries (via :series), with its :episodeNumber and :duration.";
451
+ rdfs:subClassOf :CreativeWork .
452
+ :attribution a rdf:Property;
453
+ rdfs:comment "An agent responsible for a creative work coming into existence.";
454
+ rdfs:subPropertyOf :relation;
455
+ :abstract true;
456
+ :rangeIncludes :Agent .
457
+ :performer a rdf:Property;
458
+ :propagatesEncounter true;
459
+ rdfs:comment "An agent who performed or realized an existing work.";
460
+ rdfs:subPropertyOf :attribution;
461
+ :rangeIncludes :Agent .
462
+ :composition a rdf:Property;
463
+ rdfs:comment "A structural part/whole relation between entities. Direction-neutral; assert :partOf or :hasPart.";
464
+ rdfs:subPropertyOf :relation;
465
+ :abstract true;
466
+ :rangeIncludes :Entity .
467
+ :partOf a rdf:Property;
468
+ :propagatesEncounter true;
469
+ rdfs:comment "This entity is a component of the referenced entity.";
470
+ rdfs:subPropertyOf :composition;
471
+ :rangeIncludes :CreativeWork .
472
+ :emblem a rdf:Property;
473
+ rdfs:comment "The image an entity presents itself by — an avatar, poster, cover, logo, or favicon. Representation, not content: swap it and the entity is the same. Where a :depiction is a photograph someone took of the thing, an emblem is the image the thing was given to stand for it, photographic or not; banners and headers are decoration rather than emblems. The single elected image among candidates; its bytes live on the :ImageObject.";
474
+ rdfs:subPropertyOf :relation;
475
+ owl:maxCardinality 1;
476
+ :domainIncludes :Entity;
477
+ :rangeIncludes :ImageObject .
478
+ :artist a rdf:Property;
479
+ :propagatesEncounter true;
480
+ rdfs:comment "The artist who created or performed the musical work.";
481
+ rdfs:subPropertyOf :performer;
482
+ :domainIncludes :MusicRecording,
483
+ :MusicAlbum,
484
+ :AudioObject;
485
+ :rangeIncludes :MusicGroup .
486
+ :inAlbum a rdf:Property;
487
+ :propagatesEncounter true;
488
+ rdfs:comment "The album that contains this musical recording.";
489
+ owl:maxCardinality 1;
490
+ rdfs:subPropertyOf :partOf;
491
+ :domainIncludes :MusicRecording;
492
+ :rangeIncludes :MusicAlbum .
493
+ :duration a rdf:Property;
494
+ rdfs:comment "The duration of the musical recording or media content.";
495
+ owl:maxCardinality 1;
496
+ :domainIncludes :MusicRecording,
497
+ :PodcastEpisode,
498
+ :AudioObject,
499
+ :VideoObject;
500
+ :rangeIncludes :Text .
501
+ :genre a rdf:Property;
502
+ rdfs:comment "The genre of the creative work.";
503
+ :domainIncludes :CreativeWork,
504
+ :AudioObject;
505
+ :rangeIncludes :Text .
506
+ :datePublished a rdf:Property;
507
+ rdfs:comment "When the work was published or released, at whatever precision the source knows (a bare year is a year-precision date). A date on the work's own timeline: the moment its :PublishAction occurred.";
508
+ owl:maxCardinality 1;
509
+ owl:equivalentProperty schemaorg:datePublished;
510
+ :domainIncludes :CreativeWork;
511
+ :rangeIncludes :Date,
512
+ :DateTime .
513
+ :target a rdf:Property;
514
+ rdfs:comment "What an action is directed toward, as opposed to what it is carried out on (:object). A collection operation targets the collection it adds to or removes from; a movement verb targets where it ended up, with :object naming where it began (:NavigateAction from one page to the next, :TravelAction from one place to the next).";
515
+ owl:maxCardinality 1;
516
+ :domainIncludes :Action;
517
+ :rangeIncludes :Entity .
518
+ :ExperienceAction a rdfs:Class;
519
+ rdfs:comment "A segment of lived activity the subject engaged in or underwent — a manually-logged time block or life episode (its :result is the :Session it constitutes: a :Tenure, :Residence, :Relationship, and the like), or a punctual life event (:BirthAction, :DeathAction). Carries the real occurrence via :startTime/:endTime; the constituted session takes its span from the action.";
520
+ rdfs:subClassOf :Action .
521
+ :JoinAction a rdfs:Class;
522
+ rdfs:comment "The subject joined the :object organization or realm — the opening boundary of a membership. Its :result may carry the :Tenure, :Membership, or :Enrollment the membership constitutes.";
523
+ rdfs:subClassOf :ExperienceAction .
524
+ :LeaveAction a rdfs:Class;
525
+ rdfs:comment "The subject left the :object organization or realm — the closing boundary of a membership opened by a :JoinAction.";
526
+ rdfs:subClassOf :ExperienceAction .
527
+ :Tenure a rdfs:Class;
528
+ rdfs:comment "A stretch of employment — the :result of the :ExperienceAction whose span it takes. Dateless itself; carries the :employer (an :Organization) and the :role held. The subject's :memberOf run over the employer derives from this span.";
529
+ rdfs:subClassOf :Session .
530
+ :Enrollment a rdfs:Class;
531
+ rdfs:comment "A stretch of study at a school — the :result of the :ExperienceAction whose span it takes. Dateless itself; carries the :school (an :Organization) and the :degree pursued. The subject's :memberOf run over the school derives from this span.";
532
+ rdfs:subClassOf :Session .
533
+ :Membership a rdfs:Class;
534
+ rdfs:comment "A stretch of belonging to an organization or realm — the :result of the :ExperienceAction whose span it takes. Dateless itself; carries the :org and the :role held. The subject's :memberOf run derives from this span.";
535
+ rdfs:subClassOf :Session .
536
+ :Relationship a rdfs:Class;
537
+ rdfs:comment "A stretch of romantic partnership — the :result of the :ExperienceAction whose span it takes. Dateless itself; names the other person via :with. The subject's :partner run derives from this span.";
538
+ rdfs:subClassOf :Session .
539
+ :role a rdf:Property;
540
+ rdfs:comment "The role, title, or nature held during a :Tenure, :Membership, or :Relationship.";
541
+ owl:maxCardinality 1;
542
+ :domainIncludes :Tenure,
543
+ :Membership,
544
+ :Relationship;
545
+ :rangeIncludes :Text .
546
+ :degree a rdf:Property;
547
+ rdfs:comment "The degree or program pursued during an :Enrollment.";
548
+ owl:maxCardinality 1;
549
+ :domainIncludes :Enrollment;
550
+ :rangeIncludes :Text .
551
+ :Intangible a rdfs:Class;
552
+ rdfs:comment "An entity with no physical or creative existence of its own — a term, a selector, a category.";
553
+ rdfs:subClassOf :Entity .
554
+ :DefinedTerm a rdfs:Class;
555
+ rdfs:comment "A word or code from a vocabulary — a tag, a category — used to classify other entities.";
556
+ rdfs:subClassOf :Intangible .
557
+ :WatchAction a rdfs:Class;
558
+ rdfs:comment "The agent watched the :object — a video, a film, a show. Opens or extends the agent's :consuming run over it.";
559
+ rdfs:subClassOf :ConsumeAction .
560
+ :width a rdf:Property;
561
+ rdfs:comment "The width of the media content in pixels.";
562
+ owl:maxCardinality 1; :domainIncludes :ImageObject,
563
+ :VideoObject;
564
+ :rangeIncludes :Number .
565
+ :height a rdf:Property;
566
+ rdfs:comment "The height of the media content in pixels.";
567
+ owl:maxCardinality 1; :domainIncludes :ImageObject,
568
+ :VideoObject;
569
+ :rangeIncludes :Number .
570
+
571
+ :AnnotateAction a rdfs:Class;
572
+ rdfs:comment "The agent wrote a note on something — a comment on a highlighted passage, a note on a work, a margin note on a page. Its :result is the :Comment, whose :about names what it annotates.";
573
+ rdfs:subClassOf :CreateAction .
574
+
575
+ :DeviceSession a rdfs:Class;
576
+ rdfs:comment "A screen-usage segment — an app-focus/app-usage block on a device. The :result of an :ExecuteAction (which carries the measured span); dateless itself, carrying the focused resource (:subject), the project (:isPartOf), and, when no resource is present, the window title (:name).";
577
+ rdfs:subClassOf :Session .
578
+ :PhysicalObject a rdfs:Class;
579
+ rdfs:comment "A tangible object the subject owns or uses and has a history with — a device, a vehicle, an instrument. Its kind is open-ended :category data ('computer', 'car'); its make and model is :model. Subclasses name functional roles an object plays in actions, such as :Device.";
580
+ rdfs:subClassOf :Entity .
581
+ :Device a rdfs:Class;
582
+ rdfs:comment "A physical computing device the subject runs software on — the :instrument of an :ExecuteAction, and the device a :DeviceSession takes place on. A functional role rather than a kind: whether it is a computer, phone, or tablet is :category data. It runs within a :Realm (via :inRealm), the logical machine that may outlive the hardware.";
583
+ rdfs:subClassOf :PhysicalObject .
584
+ :Directory a rdfs:Class;
585
+ rdfs:subClassOf :Collection;
586
+ rdfs:comment "A filesystem directory: a :Collection whose members are the files (:MediaObject) and subdirectories (:Directory) it :contains, identified by its path (:handle) within the machine it lives on (:inRealm). It has no content of its own; its membership is its content." .
587
+ :workingDirectory a rdf:Property;
588
+ rdfs:comment "The filesystem directory a session took place in — a terminal's current working directory or a folder open in a file manager. Where the session happened, not what it was about (cf. :subject).";
589
+ owl:maxCardinality 1;
590
+ :domainIncludes :Session;
591
+ :rangeIncludes :Directory .
592
+ :subject a rdf:Property;
593
+ rdfs:comment "The specific resource a session was spent on — the document, page, or media in focus. A specialization of :about (subject matter) for sessions.";
594
+ rdfs:subPropertyOf :about;
595
+ :domainIncludes :Session;
596
+ :rangeIncludes :Entity .
597
+ :model a rdf:Property;
598
+ rdfs:comment "The make/model of a physical object (e.g. 'Mac17,9', 'iPhone15,2') — the manufactured model, distinct from the object's own :name and from its :category kind.";
599
+ owl:maxCardinality 1;
600
+ :domainIncludes :PhysicalObject;
601
+ :rangeIncludes :Text .
602
+
603
+ :CheckInAction a rdfs:Class;
604
+ rdfs:comment "The agent announced their presence at the :object, a :Venue, at :timestamp.";
605
+ rdfs:subClassOf :CommunicateAction .
606
+
607
+ :Book a rdfs:Class;
608
+ rdfs:comment "A book, as an edition: carries its :author and :pageCount.";
609
+ rdfs:subClassOf :CreativeWork .
610
+ :pageCount a rdf:Property;
611
+ rdfs:comment "The number of pages in a document or book (an edition-level count).";
612
+ owl:maxCardinality 1;
613
+ :domainIncludes :DocumentObject,
614
+ :Book;
615
+ :rangeIncludes :Number .
616
+ :publisher a rdf:Property;
617
+ rdfs:comment "The publisher of the creative work.";
618
+ rdfs:subPropertyOf :creator;
619
+ :domainIncludes :CreativeWork;
620
+ :rangeIncludes :Organization .
621
+ :creator a rdf:Property;
622
+ :propagatesEncounter true;
623
+ rdfs:comment "An agent who brought the work into existence (authored, produced, or released it).";
624
+ rdfs:subPropertyOf :attribution;
625
+ :domainIncludes :CreativeWork;
626
+ :rangeIncludes :Agent .
627
+
628
+ :ReadAction a rdfs:Class;
629
+ rdfs:comment "The agent read the :object — a book, an article, a document. Opens or extends the agent's :consuming run over it.";
630
+ rdfs:subClassOf :ConsumeAction .
631
+ :QuoteAction a rdfs:Class;
632
+ rdfs:comment "The agent selected a passage of the :object — a highlight in a book or document, an excerpt from a page. Its :result is the :Quotation carrying the text and its position via :selector.";
633
+ rdfs:subClassOf :CreateAction .
634
+ :Quotation a rdfs:Class;
635
+ rdfs:comment "A passage selected from a work — a highlight, an excerpt. Carries the text as :body, its position in the work via :selector, and, for a visual annotation, its :annotationStyle and :color. The :result of a :QuoteAction.";
636
+ rdfs:subClassOf :CreativeWork .
637
+
638
+ :Category a rdfs:Class;
639
+ rdfs:comment "A classification drawn from a fixed set of kinds, as distinct from a free-form :Tag.";
640
+ rdfs:subClassOf :DefinedTerm .
641
+ :Selector a rdfs:Class;
642
+ rdfs:comment "A position within a resource — where a passage sits in a book, a page, or a media file. Carries a machine value (:selectorValue), a readable label (:selectorLabel), and a normalized position (:selectorProgress); the subclasses name the addressing scheme.";
643
+ rdfs:subClassOf :Intangible .
644
+ :PageSelector a rdfs:Class;
645
+ rdfs:comment "A position in a paginated document, addressed by page number.";
646
+ rdfs:subClassOf :Selector .
647
+ :EpubCfiSelector a rdfs:Class;
648
+ rdfs:comment "A position in an EPUB, addressed by a Canonical Fragment Identifier.";
649
+ rdfs:subClassOf :Selector .
650
+ :Article a rdfs:Class;
651
+ rdfs:comment "A written piece published on the web or in a periodical — a news story, a blog post, a feed item.";
652
+ rdfs:subClassOf :CreativeWork .
653
+ :snapshotOf a rdf:Property;
654
+ rdfs:comment "The resource this media is a capture of: a screenshot or archive (the :result of a :ScreenshotAction or :ArchiveAction) points at the :Entity whose URL it captured at a moment. The referent is the addressed resource itself, the URL entity. Screenshot and archive are told apart by the media's type; being a snapshot is the role this edge confers.";
655
+ rdfs:subPropertyOf :relation;
656
+ :domainIncludes :MediaObject;
657
+ :rangeIncludes :Entity .
658
+ :color a rdf:Property;
659
+ rdfs:comment "Color associated with the entity (hex or name).";
660
+ owl:maxCardinality 1;
661
+ :domainIncludes :Quotation,
662
+ :Tag,
663
+ :Category;
664
+ :rangeIncludes :Text .
665
+ :annotationStyle a rdf:Property;
666
+ rdfs:comment "Type of visual annotation (highlight, underline, strikethrough, squiggly, box, margin).";
667
+ owl:maxCardinality 1;
668
+ :domainIncludes :Quotation;
669
+ :rangeIncludes :Text .
670
+ :selector a rdf:Property;
671
+ rdfs:comment "Selectors identifying content position within a resource.";
672
+ :domainIncludes :Quotation;
673
+ :rangeIncludes :Selector .
674
+ :selectorValue a rdf:Property;
675
+ rdfs:comment "The selector value string (EPUB CFI, media fragment, page number, etc.).";
676
+ owl:maxCardinality 1;
677
+ :domainIncludes :Selector;
678
+ :rangeIncludes :Text .
679
+ :selectorLabel a rdf:Property;
680
+ rdfs:comment "Human-readable location label such as pt3ch1p40, p215, or 23:43.";
681
+ owl:maxCardinality 1;
682
+ :domainIncludes :Selector;
683
+ :rangeIncludes :Text .
684
+
685
+ :tags a rdf:Property;
686
+ rdfs:comment "Tags for categorization or labeling.";
687
+ :domainIncludes :Entity;
688
+ :rangeIncludes :Text .
689
+ :caption a rdf:Property;
690
+ rdfs:comment "A caption or description for the media content.";
691
+ owl:maxCardinality 1;
692
+ :domainIncludes :ImageObject;
693
+ :rangeIncludes :Text .