Metadata-Version: 2.1
Name: linkml-activitypub
Version: 0.2.0
Summary: LinkML representation of ActivityStreams Schema
License: GNU GPL v3.0
Author: Jonny Saunders
Author-email: sneakers-the-rat@protonmail.com
Requires-Python: >=3.9,<4.0
Classifier: License :: Other/Proprietary License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Provides-Extra: docs
Requires-Dist: linkml-runtime (>=1.1.24,<2.0.0)
Requires-Dist: pydantic (>=2.5.3,<3.0.0)
Description-Content-Type: text/markdown

# linkml-activitypub

LinkML representation of ActivityStreams and ActivityPub schema

https://pypi.org/projects/linkml-activitypub

Source schema: 
- `linkml_activitypub/activitystreams.yaml` - ActivityStreams2 vocabulary schema
- `linkml_activitypub/activitypub.yaml` - ActivityPub Extensions to ActivityStreams2 (imports ActivityStreams2)

Generated models:
- `generated/` - All generated schema for both source schema
- Pydantic 2 Models:
  - `linkml_activitypub/activitystreams.py` 
  - `linkml_activitypub/activitypub.py`
- Dataclasses
  - `linkml_activitypub/dataclass/activitystreams.py` 
  - `linkml_activitypub/dataclass/activitypub.py`

## ActivityStreams

### Process

Intermediate files are in the `data` directory

- `activitystreams2.owl` - Initially imported from [activitystreams2.owl](https://github.com/w3c/activitystreams/blob/5910a59a6f46c1f8ec9fb028bd8bbb65a7332e4e/vocabulary/activitystreams2.owl)
  - Removed problematic OrderedCollection definitions
- `activitystreams2.ofn` - Convert to functional notation with [robot](http://robot.obolibrary.org/)
- `activitystreams2.yaml` - Then to rough linkml using [schema-automator](https://linkml.io/schema-automator/)

Then the final schema in `linkml_activitypub/activitystreams.yaml`:
- Reorder to match ActivityStreams 
- Ensure correct
  - inheritance
  - `multivalued`
- Prune extra properties and classes to match those in [ActivityStreams2](https://www.w3.org/TR/activitystreams-vocabulary/) normative definition
  - Then re-add the ones that declare a class in their domain, even if the class doesn't list that property in its definition
  - Except for those types that seem to be metaclasses:
    - `attributedTo` (-> `actor`)
- Added LinkML properties (where needed):
  - Classes
    - `disjoint_with`
    - `see_also` when references given
  - Properties
    - `description`
    - `domain`
    - `range`
    - `minumum_value`
    - `maximum_value`
- Added missing slots
  - `closed`
  - `startIndex`
- Handle special property cases
  - `items` is marked as `list_elements_ordered: true` on `OrderedCollection` and false on `Collection`
- Made types
  - anyURI as `xsd:anyURI`, did not try and find a validator pattern. The spec alternatingly uses its own anyURI prop and `xsd:anyURI`
  - `duration` as a string that indicates it's a `xsd:duration`, finding a pattern is TODO
- Made enums
  - `unitEnum` - for `unit`
- Copied Notes to class `description` rather than `comments`
- Added schema prefixes:
  - `schema`: https://schema.org/ - for specifying IETF BCP 47 language codes


### Errata

- `OrderedCollectionPage` is not a subclass of, and doesn't mix in `CollectionPage` since it would then have an ambiguous
  class definition, since `OrderedCollection` inherits from `Collection` but asserts that the `list_items_ordered` slot is `true`
  rather than `false`. Instead, the slots from `CollectionPage` are just duplicated.
  - Accordingly, the domain and range of slots that include `CollectionPage` also include `OrderedCollectionPage
- Need to implement some `xsd:duration` pattern 

### TODO

- JSON-LD Serialization: https://www.w3.org/TR/activitystreams-core/#syntaxconventions
- Collection serialization: "In the JSON serialization, the unordered items of a Collection are represented using the items property while ordered items are represented using the orderedItems property."
  - Should `items` and `orderedItems` just be disjoint slots, rather than a slot with a special property modification?

## ActivityPub

## Process

## Errata

## TODO

- Everything!

# References

- Status of AS OWL vocabulary and etc. https://github.com/w3c/activitystreams/issues/416

# See Also

- https://github.com/steve-bate/activitypub-ontology
