linkml-activitypub/README.md

3.6 KiB

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
    • Removed problematic OrderedCollection definitions
  • activitystreams2.ofn - Convert to functional notation with robot
  • activitystreams2.yaml - Then to rough linkml using 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 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:

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

See Also