diff --git a/.gitignore b/.gitignore index 68bc17f..58b7691 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +/docs/ +/generated/docs/ +/tmp/ + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -20,6 +24,7 @@ parts/ sdist/ var/ wheels/ +pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg @@ -49,7 +54,6 @@ coverage.xml *.py,cover .hypothesis/ .pytest_cache/ -cover/ # Translations *.mo @@ -72,7 +76,6 @@ instance/ docs/_build/ # PyBuilder -.pybuilder/ target/ # Jupyter Notebook @@ -83,9 +86,7 @@ profile_default/ ipython_config.py # pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version +.python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. @@ -94,22 +95,7 @@ ipython_config.py # install all needed dependencies. #Pipfile.lock -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/#use-with-ide -.pdm.toml - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +# PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff @@ -145,16 +131,3 @@ dmypy.json # Pyre type checker .pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..01ad80c --- /dev/null +++ b/Makefile @@ -0,0 +1,188 @@ +MAKEFLAGS += --warn-undefined-variables +SHELL := bash +.SHELLFLAGS := -eu -o pipefail -c +.DEFAULT_GOAL := help +.DELETE_ON_ERROR: +.SUFFIXES: +.SECONDARY: + +RUN = poetry run +# get values from about.yaml file +SCHEMA_NAME = $(shell ${SHELL} ./utils/get-value.sh name) +SOURCE_SCHEMA_PATH = $(shell ${SHELL} ./utils/get-value.sh source_schema_path) +SOURCE_SCHEMA_DIR = $(dir $(SOURCE_SCHEMA_PATH)) +SRC = src +DEST = project +PYMODEL = $(SRC)/$(SCHEMA_NAME)/datamodel +DOCDIR = docs +EXAMPLEDIR = examples +SHEET_MODULE = personinfo_enums +SHEET_ID = $(shell ${SHELL} ./utils/get-value.sh google_sheet_id) +SHEET_TABS = $(shell ${SHELL} ./utils/get-value.sh google_sheet_tabs) +SHEET_MODULE_PATH = $(SOURCE_SCHEMA_DIR)/$(SHEET_MODULE).yaml + +# environment variables +include config.env + +GEN_PARGS = +ifdef LINKML_GENERATORS_PROJECT_ARGS +GEN_PARGS = ${LINKML_GENERATORS_PROJECT_ARGS} +endif + +GEN_DARGS = +ifdef LINKML_GENERATORS_MARKDOWN_ARGS +GEN_DARGS = ${LINKML_GENERATORS_MARKDOWN_ARGS} +endif + + +# basename of a YAML file in model/ +.PHONY: all clean setup gen-project gen-examples gendoc git-init-add git-init git-add git-commit git-status + +# note: "help" MUST be the first target in the file, +# when the user types "make" they should get help info +help: status + @echo "" + @echo "make setup -- initial setup (run this first)" + @echo "make site -- makes site locally" + @echo "make install -- install dependencies" + @echo "make test -- runs tests" + @echo "make lint -- perform linting" + @echo "make testdoc -- builds docs and runs local test server" + @echo "make deploy -- deploys site" + @echo "make update -- updates linkml version" + @echo "make help -- show this help" + @echo "" + +status: check-config + @echo "Project: $(SCHEMA_NAME)" + @echo "Source: $(SOURCE_SCHEMA_PATH)" + +# generate products and add everything to github +setup: git-init install gen-project gen-examples gendoc git-add git-commit + +# install any dependencies required for building +install: + poetry install +.PHONY: install + +# --- +# Project Synchronization +# --- +# +# check we are up to date +check: cruft-check +cruft-check: + cruft check +cruft-diff: + cruft diff + +update: update-template update-linkml +update-template: + cruft update + +# todo: consider pinning to template +update-linkml: + poetry add -D linkml@latest + +# EXPERIMENTAL +create-data-harmonizer: + npm init data-harmonizer $(SOURCE_SCHEMA_PATH) + +all: site +site: gen-project gendoc +%.yaml: gen-project +deploy: all mkd-gh-deploy + +compile-sheets: + $(RUN) sheets2linkml --gsheet-id $(SHEET_ID) $(SHEET_TABS) > $(SHEET_MODULE_PATH).tmp && mv $(SHEET_MODULE_PATH).tmp $(SHEET_MODULE_PATH) + +# In future this will be done by conversion +gen-examples: + cp src/data/examples/* $(EXAMPLEDIR) + +# generates all project files + +gen-project: $(PYMODEL) + $(RUN) gen-project ${GEN_PARGS} -d $(DEST) $(SOURCE_SCHEMA_PATH) && mv $(DEST)/*.py $(PYMODEL) + + +test: test-schema test-python test-examples + +test-schema: + $(RUN) gen-project ${GEN_PARGS} -d tmp $(SOURCE_SCHEMA_PATH) + +test-python: + $(RUN) python -m unittest discover + +lint: + $(RUN) linkml-lint $(SOURCE_SCHEMA_PATH) + +check-config: + @(grep my-datamodel about.yaml > /dev/null && printf "\n**Project not configured**:\n\n - Remember to edit 'about.yaml'\n\n" || exit 0) + +convert-examples-to-%: + $(patsubst %, $(RUN) linkml-convert % -s $(SOURCE_SCHEMA_PATH) -C Person, $(shell ${SHELL} find src/data/examples -name "*.yaml")) + +examples/%.yaml: src/data/examples/%.yaml + $(RUN) linkml-convert -s $(SOURCE_SCHEMA_PATH) -C Person $< -o $@ +examples/%.json: src/data/examples/%.yaml + $(RUN) linkml-convert -s $(SOURCE_SCHEMA_PATH) -C Person $< -o $@ +examples/%.ttl: src/data/examples/%.yaml + $(RUN) linkml-convert -P EXAMPLE=http://example.org/ -s $(SOURCE_SCHEMA_PATH) -C Person $< -o $@ + +test-examples: examples/output + +examples/output: src/linkml_activitypub + mkdir -p $@ + $(RUN) linkml-run-examples \ + --output-formats json \ + --output-formats yaml \ + --counter-example-input-directory src/data/examples/invalid \ + --input-directory src/data/examples/valid \ + --output-directory $@ \ + --schema $< > $@/README.md + +# Test documentation locally +serve: mkd-serve + +# Python datamodel +$(PYMODEL): + mkdir -p $@ + + +$(DOCDIR): + mkdir -p $@ + +gendoc: $(DOCDIR) + cp $(SRC)/docs/*md $(DOCDIR) ; \ + $(RUN) gen-doc ${GEN_DARGS} -d $(DOCDIR) $(SOURCE_SCHEMA_PATH) + +testdoc: gendoc serve + +MKDOCS = $(RUN) mkdocs +mkd-%: + $(MKDOCS) $* + +PROJECT_FOLDERS = sqlschema shex shacl protobuf prefixmap owl jsonschema jsonld graphql excel +git-init-add: git-init git-add git-commit git-status +git-init: + git init +git-add: .cruft.json + git add . +git-commit: + git commit -m 'chore: initial commit' -a +git-status: + git status + +# only necessary if setting up via cookiecutter +.cruft.json: + echo "creating a stub for .cruft.json. IMPORTANT: setup via cruft not cookiecutter recommended!" ; \ + touch $@ + +clean: + rm -rf $(DEST) + rm -rf tmp + rm -fr docs/* + rm -fr $(PYMODEL)/* + +include project.Makefile diff --git a/README.md b/README.md index b83aadc..40d62be 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,23 @@ # linkml-activitypub -LinkML Schema representation of ActivityPub + +LinkML representation of ActivityPub schema (which is mostly ActivityStreams except where it's not) + +## 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 +- Manually refined... + +# References + +- Status of AS OWL vocabulary and etc. https://github.com/w3c/activitystreams/issues/416 + +# See Also + +- https://github.com/steve-bate/activitypub-ontology \ No newline at end of file diff --git a/about.yaml b/about.yaml new file mode 100644 index 0000000..d5c0eb4 --- /dev/null +++ b/about.yaml @@ -0,0 +1,5 @@ +--- +name: linkml-activitypub +author: Jonny Saunders +description: LinkML representation of linkml_activitypub Schema +source_schema_path: linkml_activitypub/activitypub.yaml diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..56da66d --- /dev/null +++ b/config.yaml @@ -0,0 +1,41 @@ +# Configuration of generators (defaults illustrated) +--- +generator_args: + excel: + mergeimports: true + owl: + mergeimports: true + metaclasses: true + type_objects: true + # throws 'Cannot handle metadata profile: rdfs' + # metadata_profile: rdfs + markdown: + mergeimports: true + graphql: + mergeimports: true + java: + mergeimports: true + metadata: true + jsonld: + mergeimports: true + jsonschema: + mergeimports: true + jsonldcontext: + mergeimports: true + python: + mergeimports: true + prefixmap: + mergeimports: true + proto: + mergeimports: true + shacl: + mergeimports: true + shex: + mergeimports: true + sqlddl: + mergeimports: true + typescript: + mergeimports: true + metadata: true + +... diff --git a/data/activitystreams.yaml b/data/activitystreams.yaml new file mode 100644 index 0000000..a33307d --- /dev/null +++ b/data/activitystreams.yaml @@ -0,0 +1,653 @@ +name: '' +description: '' +id: http://www.w3.org/ns/activitystreams# +imports: +- linkml:types +prefixes: + linkml: https://w3id.org/linkml/ + ? '' + : https://w3id.org/None/ +default_prefix: '' +slots: + predicate: + slot_uri: rdf:predicate + multivalued: true + subject: + comments: + - On a Relationship object, identifies the subject. e.g. when saying \"John is + connected to Sally\", 'subject' refers to 'John'@en + is_a: subject + slot_uri: as:subject + multivalued: true + actor: + comments: + - Subproperty of as:attributedTo that identifies the primary actor@en + is_a: attributedTo + slot_uri: as:actor + multivalued: true + anyOf: + comments: + - Describes a possible inclusive answer or option for a question.@en + slot_uri: as:anyOf + multivalued: true + attachment: + slot_uri: as:attachment + multivalued: true + attachments: + slot_uri: as:attachments + multivalued: true + attributedTo: + comments: + - Identifies an entity to which an object is attributed@en + slot_uri: as:attributedTo + multivalued: true + audience: + slot_uri: as:audience + multivalued: true + author: + comments: + - Identifies the author of an object. Deprecated. Use as:attributedTo instead@en + is_a: attributedTo + slot_uri: as:author + multivalued: true + bcc: + slot_uri: as:bcc + multivalued: true + bto: + slot_uri: as:bto + multivalued: true + cc: + slot_uri: as:cc + multivalued: true + context: + comments: + - Specifies the context within which an object exists or an activity was performed@en + slot_uri: as:context + multivalued: true + current: + slot_uri: as:current + multivalued: true + describes: + comments: + - On a Profile object, describes the object described by the profile@en + slot_uri: as:describes + multivalued: true + range: Object + first: + slot_uri: as:first + multivalued: true + formerType: + comments: + - On a Tombstone object, describes the former type of the deleted object@en + slot_uri: as:formerType + multivalued: true + range: Object + generator: + slot_uri: as:generator + multivalued: true + icon: + slot_uri: as:icon + multivalued: true + image: + slot_uri: as:image + multivalued: true + inReplyTo: + slot_uri: as:inReplyTo + multivalued: true + instrument: + comments: + - Indentifies an object used (or to be used) to complete an activity@en + slot_uri: as:instrument + multivalued: true + items: + slot_uri: as:items + multivalued: true + last: + slot_uri: as:last + multivalued: true + location: + slot_uri: as:location + multivalued: true + next: + slot_uri: as:next + multivalued: true + object: + slot_uri: as:object + multivalued: true + oneOf: + comments: + - Describes a possible exclusive answer or option for a question.@en + slot_uri: as:oneOf + multivalued: true + origin: + comments: + - For certain activities, specifies the entity from which the action is directed.@en + slot_uri: as:origin + multivalued: true + partOf: + slot_uri: as:partOf + multivalued: true + prev: + slot_uri: as:prev + multivalued: true + preview: + slot_uri: as:preview + multivalued: true + provider: + slot_uri: as:provider + multivalued: true + relationship: + comments: + - On a Relationship object, describes the type of relationship@en + is_a: predicate + slot_uri: as:relationship + multivalued: true + range: Property + replies: + slot_uri: as:replies + multivalued: true + range: Collection + result: + slot_uri: as:result + multivalued: true + tag: + slot_uri: as:tag + multivalued: true + tags: + slot_uri: as:tags + multivalued: true + target: + slot_uri: as:target + multivalued: true + to: + slot_uri: as:to + multivalued: true + url: + comments: + - Specifies a link to a specific representation of the Object@en + slot_uri: as:url + multivalued: true + accuracy: + comments: + - Specifies the accuracy around the point established by the longitude and latitude@en + slot_uri: as:accuracy + multivalued: true + altitude: + comments: + - The altitude of a place@en + slot_uri: as:altitude + multivalued: true + content: + comments: + - The content of the object.@en + slot_uri: as:content + multivalued: true + deleted: + comments: + - Specifies the date and time the object was deleted@en + slot_uri: as:deleted + multivalued: true + downstreamDuplicates: + slot_uri: as:downstreamDuplicates + multivalued: true + duration: + comments: + - The duration of the object@en + slot_uri: as:duration + multivalued: true + endTime: + comments: + - The ending time of the object@en + slot_uri: as:endTime + multivalued: true + height: + comments: + - The display height expressed as device independent pixels@en + slot_uri: as:height + multivalued: true + href: + comments: + - The target URI of the Link@en + slot_uri: as:href + multivalued: true + hreflang: + comments: + - A hint about the language of the referenced resource@en + slot_uri: as:hreflang + multivalued: true + id: + slot_uri: as:id + multivalued: true + latitude: + comments: + - The latitude@en + slot_uri: as:latitude + multivalued: true + longitude: + comments: + - The longitude@en + slot_uri: as:longitude + multivalued: true + mediaType: + comments: + - The MIME Media Type@en + slot_uri: as:mediaType + multivalued: true + name: + slot_uri: rdfs:name + multivalued: true + objectType: + slot_uri: as:objectType + multivalued: true + published: + comments: + - Specifies the date and time the object was published@en + slot_uri: as:published + multivalued: true + radius: + comments: + - Specifies a radius around the point established by the longitude and latitude@en + slot_uri: as:radius + multivalued: true + rating: + comments: + - A numeric rating (>= 0.0, <= 5.0) for the object@en + slot_uri: as:rating + multivalued: true + rel: + comments: + - The RFC 5988 or HTML5 Link Relation associated with the Link@en + slot_uri: as:rel + multivalued: true + startTime: + comments: + - The starting time of the object@en + slot_uri: as:startTime + multivalued: true + summary: + comments: + - A short summary of the object@en + slot_uri: as:summary + multivalued: true + totalItems: + comments: + - The total number of items in a logical collection@en + slot_uri: as:totalItems + multivalued: true + units: + comments: + - Identifies the unit of measurement used by the radius, altitude and accuracy + properties. The value can be expressed either as one of a set of predefined + units or as a well-known common URI that identifies units.@en + slot_uri: as:units + multivalued: true + updated: + comments: + - Specifies when the object was last updated@en + slot_uri: as:updated + multivalued: true + upstreamDuplicates: + slot_uri: as:upstreamDuplicates + multivalued: true + verb: + slot_uri: as:verb + multivalued: true + width: + comments: + - Specifies the preferred display width of the content, expressed in terms of + device independent pixels.@en + slot_uri: as:width + multivalued: true +classes: + Property: + class_uri: rdf:Property + Statement: + class_uri: rdf:Statement + Accept: + comments: + - Actor accepts the Object@en + is_a: Activity + class_uri: as:Accept + Activity: + comments: + - An Object representing some form of Action that has been taken@en + is_a: Object + slots: + - actor + - instrument + - object + - origin + - result + - target + - verb + class_uri: as:Activity + Add: + comments: + - To Add an Object or Link to Something@en + is_a: Activity + class_uri: as:Add + Announce: + comments: + - Actor announces the object to the target@en + is_a: Activity + class_uri: as:Announce + Application: + comments: + - Represents a software application of any sort@en + is_a: Object + class_uri: as:Application + Arrive: + comments: + - To Arrive Somewhere (can be used, for instance, to indicate that a particular + entity is currently located somewhere, e.g. a \"check-in\")@en + is_a: IntransitiveActivity + class_uri: as:Arrive + Article: + comments: + - A written work. Typically several paragraphs long. For example, a blog post + or a news article.@en + is_a: Object + class_uri: as:Article + Audio: + comments: + - An audio file@en + is_a: Document + class_uri: as:Audio + Block: + is_a: Ignore + class_uri: as:Block + Collection: + comments: + - An ordered or unordered collection of Objects or Links@en + is_a: Object + slots: + - current + - first + - items + - last + - totalItems + class_uri: as:Collection + CollectionPage: + comments: + - A subset of items from a Collection@en + is_a: Collection + slots: + - next + - partOf + - prev + class_uri: as:CollectionPage + Create: + comments: + - To Create Something@en + is_a: Activity + class_uri: as:Create + Delete: + comments: + - To Delete Something@en + is_a: Activity + class_uri: as:Delete + Dislike: + comments: + - The actor dislikes the object@en + is_a: Activity + class_uri: as:Dislike + Document: + comments: + - Represents a digital document/file of any sort@en + is_a: Object + class_uri: as:Document + Event: + comments: + - An Event of any kind@en + is_a: Object + class_uri: as:Event + Flag: + comments: + - To flag something (e.g. flag as inappropriate, flag as spam, etc)@en + is_a: Activity + class_uri: as:Flag + Follow: + comments: + - To Express Interest in Something@en + is_a: Activity + class_uri: as:Follow + Group: + comments: + - A Group of any kind.@en + is_a: Object + class_uri: as:Group + Ignore: + comments: + - Actor is ignoring the Object@en + is_a: Activity + class_uri: as:Ignore + Image: + comments: + - An Image file@en + is_a: Document + class_uri: as:Image + IntransitiveActivity: + comments: + - An Activity that has no direct object@en + is_a: Activity + class_uri: as:IntransitiveActivity + Invite: + comments: + - To invite someone or something to something@en + is_a: Offer + class_uri: as:Invite + Join: + comments: + - To Join Something@en + is_a: Activity + class_uri: as:Join + Leave: + comments: + - To Leave Something@en + is_a: Activity + class_uri: as:Leave + Like: + comments: + - To Like Something@en + is_a: Activity + class_uri: as:Like + Link: + comments: + - Represents a qualified reference to another resource. Patterned after the RFC5988 + Web Linking Model@en + slots: + - attributedTo + - name + - preview + - height + - href + - hreflang + - id + - mediaType + - rel + - width + class_uri: as:Link + Listen: + comments: + - The actor listened to the object@en + is_a: Activity + class_uri: as:Listen + Mention: + comments: + - A specialized Link that represents an @mention@en + is_a: Link + class_uri: as:Mention + Move: + comments: + - The actor is moving the object. The target specifies where the object is moving + to. The origin specifies where the object is moving from. + is_a: Activity + class_uri: as:Move + Note: + comments: + - A Short note, typically less than a single paragraph. A \"tweet\" is an example, + or a \"status update\"@en + is_a: Object + class_uri: as:Note + Object: + slots: + - attachment + - attachments + - attributedTo + - audience + - author + - bcc + - bto + - cc + - content + - context + - generator + - icon + - image + - inReplyTo + - location + - name + - preview + - provider + - replies + - summary + - tag + - tags + - to + - url + - downstreamDuplicates + - duration + - endTime + - id + - mediaType + - objectType + - published + - rating + - startTime + - updated + - upstreamDuplicates + class_uri: as:Object + Offer: + comments: + - To Offer something to someone or something@en + is_a: Activity + class_uri: as:Offer + OrderedItems: + class_uri: as:OrderedItems + Organization: + comments: + - An Organization@en + is_a: Object + class_uri: as:Organization + Page: + comments: + - A Web Page@en + is_a: Object + class_uri: as:Page + Person: + comments: + - A Person@en + is_a: Object + class_uri: as:Person + Place: + comments: + - A physical or logical location@en + is_a: Object + slots: + - accuracy + - altitude + - latitude + - longitude + - radius + - units + class_uri: as:Place + Profile: + comments: + - A Profile Document@en + is_a: Object + slots: + - describes + class_uri: as:Profile + Question: + comments: + - A question of any sort.@en + is_a: IntransitiveActivity + slots: + - anyOf + - oneOf + class_uri: as:Question + Read: + comments: + - The actor read the object@en + is_a: Activity + class_uri: as:Read + Reject: + comments: + - Actor rejects the Object@en + is_a: Activity + class_uri: as:Reject + Relationship: + comments: + - Represents a Social Graph relationship between two Individuals (indicated by + the 'a' and 'b' properties)@en + is_a: Object + slots: + - object + - relationship + - subject + class_uri: as:Relationship + Remove: + comments: + - To Remove Something@en + is_a: Activity + class_uri: as:Remove + Service: + comments: + - A service provided by some entity@en + is_a: Object + class_uri: as:Service + TentativeAccept: + comments: + - Actor tentatively accepts the Object@en + is_a: Accept + class_uri: as:TentativeAccept + TentativeReject: + comments: + - Actor tentatively rejects the object@en + is_a: Reject + class_uri: as:TentativeReject + Tombstone: + comments: + - A placeholder for a deleted object@en + is_a: Object + slots: + - formerType + - deleted + class_uri: as:Tombstone + Travel: + comments: + - The actor is traveling to the target. The origin specifies where the actor is + traveling from. + is_a: IntransitiveActivity + class_uri: as:Travel + Undo: + comments: + - To Undo Something. This would typically be used to indicate that a previous + Activity has been undone.@en + is_a: Activity + class_uri: as:Undo + Update: + comments: + - To Update/Modify Something@en + is_a: Activity + class_uri: as:Update + Video: + comments: + - A Video document of any kind.@en + is_a: Document + class_uri: as:Video + View: + comments: + - The actor viewed the object@en + is_a: Activity + class_uri: as:View diff --git a/data/activitystreams2.json b/data/activitystreams2.json new file mode 100644 index 0000000..037026c --- /dev/null +++ b/data/activitystreams2.json @@ -0,0 +1,379 @@ +{ + "@context": { + "@vocab": "_:", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "as": "https://www.w3.org/ns/activitystreams#", + "ldp": "http://www.w3.org/ns/ldp#", + "vcard": "http://www.w3.org/2006/vcard/ns#", + "id": "@id", + "type": "@type", + "Accept": "as:Accept", + "Activity": "as:Activity", + "IntransitiveActivity": "as:IntransitiveActivity", + "Add": "as:Add", + "Announce": "as:Announce", + "Application": "as:Application", + "Arrive": "as:Arrive", + "Article": "as:Article", + "Audio": "as:Audio", + "Block": "as:Block", + "Collection": "as:Collection", + "CollectionPage": "as:CollectionPage", + "Relationship": "as:Relationship", + "Create": "as:Create", + "Delete": "as:Delete", + "Dislike": "as:Dislike", + "Document": "as:Document", + "Event": "as:Event", + "Follow": "as:Follow", + "Flag": "as:Flag", + "Group": "as:Group", + "Ignore": "as:Ignore", + "Image": "as:Image", + "Invite": "as:Invite", + "Join": "as:Join", + "Leave": "as:Leave", + "Like": "as:Like", + "Link": "as:Link", + "Mention": "as:Mention", + "Note": "as:Note", + "Object": "as:Object", + "Offer": "as:Offer", + "OrderedCollection": "as:OrderedCollection", + "OrderedCollectionPage": "as:OrderedCollectionPage", + "Organization": "as:Organization", + "Page": "as:Page", + "Person": "as:Person", + "Place": "as:Place", + "Profile": "as:Profile", + "Question": "as:Question", + "Reject": "as:Reject", + "Remove": "as:Remove", + "Service": "as:Service", + "TentativeAccept": "as:TentativeAccept", + "TentativeReject": "as:TentativeReject", + "Tombstone": "as:Tombstone", + "Undo": "as:Undo", + "Update": "as:Update", + "Video": "as:Video", + "View": "as:View", + "Listen": "as:Listen", + "Read": "as:Read", + "Move": "as:Move", + "Travel": "as:Travel", + "IsFollowing": "as:IsFollowing", + "IsFollowedBy": "as:IsFollowedBy", + "IsContact": "as:IsContact", + "IsMember": "as:IsMember", + "subject": { + "@id": "as:subject", + "@type": "@id" + }, + "relationship": { + "@id": "as:relationship", + "@type": "@id" + }, + "actor": { + "@id": "as:actor", + "@type": "@id" + }, + "attributedTo": { + "@id": "as:attributedTo", + "@type": "@id" + }, + "attachment": { + "@id": "as:attachment", + "@type": "@id" + }, + "bcc": { + "@id": "as:bcc", + "@type": "@id" + }, + "bto": { + "@id": "as:bto", + "@type": "@id" + }, + "cc": { + "@id": "as:cc", + "@type": "@id" + }, + "context": { + "@id": "as:context", + "@type": "@id" + }, + "current": { + "@id": "as:current", + "@type": "@id" + }, + "first": { + "@id": "as:first", + "@type": "@id" + }, + "generator": { + "@id": "as:generator", + "@type": "@id" + }, + "icon": { + "@id": "as:icon", + "@type": "@id" + }, + "image": { + "@id": "as:image", + "@type": "@id" + }, + "inReplyTo": { + "@id": "as:inReplyTo", + "@type": "@id" + }, + "items": { + "@id": "as:items", + "@type": "@id" + }, + "instrument": { + "@id": "as:instrument", + "@type": "@id" + }, + "orderedItems": { + "@id": "as:items", + "@type": "@id", + "@container": "@list" + }, + "last": { + "@id": "as:last", + "@type": "@id" + }, + "location": { + "@id": "as:location", + "@type": "@id" + }, + "next": { + "@id": "as:next", + "@type": "@id" + }, + "object": { + "@id": "as:object", + "@type": "@id" + }, + "oneOf": { + "@id": "as:oneOf", + "@type": "@id" + }, + "anyOf": { + "@id": "as:anyOf", + "@type": "@id" + }, + "closed": { + "@id": "as:closed", + "@type": "xsd:dateTime" + }, + "origin": { + "@id": "as:origin", + "@type": "@id" + }, + "accuracy": { + "@id": "as:accuracy", + "@type": "xsd:float" + }, + "prev": { + "@id": "as:prev", + "@type": "@id" + }, + "preview": { + "@id": "as:preview", + "@type": "@id" + }, + "replies": { + "@id": "as:replies", + "@type": "@id" + }, + "result": { + "@id": "as:result", + "@type": "@id" + }, + "audience": { + "@id": "as:audience", + "@type": "@id" + }, + "partOf": { + "@id": "as:partOf", + "@type": "@id" + }, + "tag": { + "@id": "as:tag", + "@type": "@id" + }, + "target": { + "@id": "as:target", + "@type": "@id" + }, + "to": { + "@id": "as:to", + "@type": "@id" + }, + "url": { + "@id": "as:url", + "@type": "@id" + }, + "altitude": { + "@id": "as:altitude", + "@type": "xsd:float" + }, + "content": "as:content", + "contentMap": { + "@id": "as:content", + "@container": "@language" + }, + "name": "as:name", + "nameMap": { + "@id": "as:name", + "@container": "@language" + }, + "duration": { + "@id": "as:duration", + "@type": "xsd:duration" + }, + "endTime": { + "@id": "as:endTime", + "@type": "xsd:dateTime" + }, + "height": { + "@id": "as:height", + "@type": "xsd:nonNegativeInteger" + }, + "href": { + "@id": "as:href", + "@type": "@id" + }, + "hreflang": "as:hreflang", + "latitude": { + "@id": "as:latitude", + "@type": "xsd:float" + }, + "longitude": { + "@id": "as:longitude", + "@type": "xsd:float" + }, + "mediaType": "as:mediaType", + "published": { + "@id": "as:published", + "@type": "xsd:dateTime" + }, + "radius": { + "@id": "as:radius", + "@type": "xsd:float" + }, + "rel": "as:rel", + "startIndex": { + "@id": "as:startIndex", + "@type": "xsd:nonNegativeInteger" + }, + "startTime": { + "@id": "as:startTime", + "@type": "xsd:dateTime" + }, + "summary": "as:summary", + "summaryMap": { + "@id": "as:summary", + "@container": "@language" + }, + "totalItems": { + "@id": "as:totalItems", + "@type": "xsd:nonNegativeInteger" + }, + "units": "as:units", + "updated": { + "@id": "as:updated", + "@type": "xsd:dateTime" + }, + "width": { + "@id": "as:width", + "@type": "xsd:nonNegativeInteger" + }, + "describes": { + "@id": "as:describes", + "@type": "@id" + }, + "formerType": { + "@id": "as:formerType", + "@type": "@id" + }, + "deleted": { + "@id": "as:deleted", + "@type": "xsd:dateTime" + }, + "inbox": { + "@id": "ldp:inbox", + "@type": "@id" + }, + "outbox": { + "@id": "as:outbox", + "@type": "@id" + }, + "following": { + "@id": "as:following", + "@type": "@id" + }, + "followers": { + "@id": "as:followers", + "@type": "@id" + }, + "streams": { + "@id": "as:streams", + "@type": "@id" + }, + "preferredUsername": "as:preferredUsername", + "endpoints": { + "@id": "as:endpoints", + "@type": "@id" + }, + "uploadMedia": { + "@id": "as:uploadMedia", + "@type": "@id" + }, + "proxyUrl": { + "@id": "as:proxyUrl", + "@type": "@id" + }, + "liked": { + "@id": "as:liked", + "@type": "@id" + }, + "oauthAuthorizationEndpoint": { + "@id": "as:oauthAuthorizationEndpoint", + "@type": "@id" + }, + "oauthTokenEndpoint": { + "@id": "as:oauthTokenEndpoint", + "@type": "@id" + }, + "provideClientKey": { + "@id": "as:provideClientKey", + "@type": "@id" + }, + "signClientKey": { + "@id": "as:signClientKey", + "@type": "@id" + }, + "sharedInbox": { + "@id": "as:sharedInbox", + "@type": "@id" + }, + "Public": { + "@id": "as:Public", + "@type": "@id" + }, + "source": "as:source", + "likes": { + "@id": "as:likes", + "@type": "@id" + }, + "shares": { + "@id": "as:shares", + "@type": "@id" + }, + "alsoKnownAs": { + "@id": "as:alsoKnownAs", + "@type": "@id" + } + } +} diff --git a/data/activitystreams2.ofn b/data/activitystreams2.ofn new file mode 100644 index 0000000..8e55819 --- /dev/null +++ b/data/activitystreams2.ofn @@ -0,0 +1,975 @@ +Prefix(:=) +Prefix(as:=) +Prefix(owl:=) +Prefix(rdf:=) +Prefix(xml:=) +Prefix(xsd:=) +Prefix(rdfs:=) + + +Ontology( +Annotation(rdfs:comment "Extended Activity Streams 2.0 Vocabulary"@en) +Annotation(rdfs:label "Activity Streams 2.0"@en) + +Declaration(Class(rdf:Property)) +Declaration(Class(rdf:Statement)) +Declaration(Class(as:Accept)) +Declaration(Class(as:Activity)) +Declaration(Class(as:Add)) +Declaration(Class(as:Announce)) +Declaration(Class(as:Application)) +Declaration(Class(as:Arrive)) +Declaration(Class(as:Article)) +Declaration(Class(as:Audio)) +Declaration(Class(as:Block)) +Declaration(Class(as:Collection)) +Declaration(Class(as:CollectionPage)) +Declaration(Class(as:Create)) +Declaration(Class(as:Delete)) +Declaration(Class(as:Dislike)) +Declaration(Class(as:Document)) +Declaration(Class(as:Event)) +Declaration(Class(as:Flag)) +Declaration(Class(as:Follow)) +Declaration(Class(as:Group)) +Declaration(Class(as:Ignore)) +Declaration(Class(as:Image)) +Declaration(Class(as:IntransitiveActivity)) +Declaration(Class(as:Invite)) +Declaration(Class(as:Join)) +Declaration(Class(as:Leave)) +Declaration(Class(as:Like)) +Declaration(Class(as:Link)) +Declaration(Class(as:Listen)) +Declaration(Class(as:Mention)) +Declaration(Class(as:Move)) +Declaration(Class(as:Note)) +Declaration(Class(as:Object)) +Declaration(Class(as:Offer)) +Declaration(Class(as:OrderedItems)) +Declaration(Class(as:Organization)) +Declaration(Class(as:Page)) +Declaration(Class(as:Person)) +Declaration(Class(as:Place)) +Declaration(Class(as:Profile)) +Declaration(Class(as:Question)) +Declaration(Class(as:Read)) +Declaration(Class(as:Reject)) +Declaration(Class(as:Relationship)) +Declaration(Class(as:Remove)) +Declaration(Class(as:Service)) +Declaration(Class(as:TentativeAccept)) +Declaration(Class(as:TentativeReject)) +Declaration(Class(as:Tombstone)) +Declaration(Class(as:Travel)) +Declaration(Class(as:Undo)) +Declaration(Class(as:Update)) +Declaration(Class(as:Video)) +Declaration(Class(as:View)) +Declaration(ObjectProperty(rdf:predicate)) +Declaration(ObjectProperty(rdf:subject)) +Declaration(ObjectProperty(as:actor)) +Declaration(ObjectProperty(as:anyOf)) +Declaration(ObjectProperty(as:attachment)) +Declaration(ObjectProperty(as:attachments)) +Declaration(ObjectProperty(as:attributedTo)) +Declaration(ObjectProperty(as:audience)) +Declaration(ObjectProperty(as:author)) +Declaration(ObjectProperty(as:bcc)) +Declaration(ObjectProperty(as:bto)) +Declaration(ObjectProperty(as:cc)) +Declaration(ObjectProperty(as:context)) +Declaration(ObjectProperty(as:current)) +Declaration(ObjectProperty(as:describes)) +Declaration(ObjectProperty(as:first)) +Declaration(ObjectProperty(as:formerType)) +Declaration(ObjectProperty(as:generator)) +Declaration(ObjectProperty(as:icon)) +Declaration(ObjectProperty(as:image)) +Declaration(ObjectProperty(as:inReplyTo)) +Declaration(ObjectProperty(as:instrument)) +Declaration(ObjectProperty(as:items)) +Declaration(ObjectProperty(as:last)) +Declaration(ObjectProperty(as:location)) +Declaration(ObjectProperty(as:next)) +Declaration(ObjectProperty(as:object)) +Declaration(ObjectProperty(as:oneOf)) +Declaration(ObjectProperty(as:origin)) +Declaration(ObjectProperty(as:partOf)) +Declaration(ObjectProperty(as:prev)) +Declaration(ObjectProperty(as:preview)) +Declaration(ObjectProperty(as:provider)) +Declaration(ObjectProperty(as:relationship)) +Declaration(ObjectProperty(as:replies)) +Declaration(ObjectProperty(as:result)) +Declaration(ObjectProperty(as:subject)) +Declaration(ObjectProperty(as:tag)) +Declaration(ObjectProperty(as:tags)) +Declaration(ObjectProperty(as:target)) +Declaration(ObjectProperty(as:to)) +Declaration(ObjectProperty(as:url)) +Declaration(DataProperty(as:accuracy)) +Declaration(DataProperty(as:altitude)) +Declaration(DataProperty(as:content)) +Declaration(DataProperty(as:deleted)) +Declaration(DataProperty(as:downstreamDuplicates)) +Declaration(DataProperty(as:duration)) +Declaration(DataProperty(as:endTime)) +Declaration(DataProperty(as:height)) +Declaration(DataProperty(as:href)) +Declaration(DataProperty(as:hreflang)) +Declaration(DataProperty(as:id)) +Declaration(DataProperty(as:latitude)) +Declaration(DataProperty(as:longitude)) +Declaration(DataProperty(as:mediaType)) +Declaration(DataProperty(as:name)) +Declaration(DataProperty(as:objectType)) +Declaration(DataProperty(as:published)) +Declaration(DataProperty(as:radius)) +Declaration(DataProperty(as:rating)) +Declaration(DataProperty(as:rel)) +Declaration(DataProperty(as:startTime)) +Declaration(DataProperty(as:summary)) +Declaration(DataProperty(as:totalItems)) +Declaration(DataProperty(as:units)) +Declaration(DataProperty(as:updated)) +Declaration(DataProperty(as:upstreamDuplicates)) +Declaration(DataProperty(as:verb)) +Declaration(DataProperty(as:width)) +Declaration(NamedIndividual(rdf:nil)) +Declaration(NamedIndividual(as:Relationship)) +Declaration(AnnotationProperty(rdfs:name)) +Declaration(Datatype(rdf:langString)) +Declaration(Datatype(xsd:duration)) + +############################ +# Object Properties +############################ + +# Object Property: as:actor (actor) + +AnnotationAssertion(rdfs:comment as:actor "Subproperty of as:attributedTo that identifies the primary actor"@en) +AnnotationAssertion(rdfs:label as:actor "actor"@en) +SubObjectPropertyOf(as:actor as:attributedTo) +ObjectPropertyDomain(as:actor as:Activity) +ObjectPropertyRange(as:actor ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:anyOf (oneOf) + +AnnotationAssertion(rdfs:comment as:anyOf "Describes a possible inclusive answer or option for a question."@en) +AnnotationAssertion(rdfs:label as:anyOf "oneOf"@en) +ObjectPropertyDomain(as:anyOf as:Question) +ObjectPropertyRange(as:anyOf ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:attachment (attachment) + +AnnotationAssertion(rdfs:label as:attachment "attachment"@en) +EquivalentObjectProperties(as:attachment as:attachments) +ObjectPropertyDomain(as:attachment as:Object) +ObjectPropertyRange(as:attachment ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:attachments (attachments) + +AnnotationAssertion(rdfs:label as:attachments "attachments"@en) +AnnotationAssertion(owl:deprecated as:attachments "true"^^xsd:boolean) +ObjectPropertyDomain(as:attachments as:Object) +ObjectPropertyRange(as:attachments ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:attributedTo (attributedTo) + +AnnotationAssertion(rdfs:comment as:attributedTo "Identifies an entity to which an object is attributed"@en) +AnnotationAssertion(rdfs:label as:attributedTo "attributedTo"@en) +ObjectPropertyDomain(as:attributedTo ObjectUnionOf(as:Link as:Object)) +ObjectPropertyRange(as:attributedTo ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:audience (audience) + +AnnotationAssertion(rdfs:label as:audience "audience"@en) +ObjectPropertyDomain(as:audience as:Object) +ObjectPropertyRange(as:audience ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:author (author) + +AnnotationAssertion(rdfs:comment as:author "Identifies the author of an object. Deprecated. Use as:attributedTo instead"@en) +AnnotationAssertion(rdfs:label as:author "author"@en) +AnnotationAssertion(owl:deprecated as:author "true"^^xsd:boolean) +SubObjectPropertyOf(as:author as:attributedTo) +ObjectPropertyDomain(as:author as:Object) +ObjectPropertyRange(as:author ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:bcc (bcc) + +AnnotationAssertion(rdfs:label as:bcc "bcc"@en) +ObjectPropertyDomain(as:bcc as:Object) +ObjectPropertyRange(as:bcc ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:bto (bto) + +AnnotationAssertion(rdfs:label as:bto "bto"@en) +ObjectPropertyDomain(as:bto as:Object) +ObjectPropertyRange(as:bto ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:cc (cc) + +AnnotationAssertion(rdfs:label as:cc "cc"@en) +ObjectPropertyDomain(as:cc as:Object) +ObjectPropertyRange(as:cc ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:content (content) + +AnnotationAssertion(rdfs:comment as:content "The content of the object."@en) +AnnotationAssertion(rdfs:label as:content "content"@en) +ObjectPropertyDomain(as:content as:Object) +ObjectPropertyRange(as:content ObjectUnionOf(rdf:langString xsd:string)) + +# Object Property: as:context (context) + +AnnotationAssertion(rdfs:comment as:context "Specifies the context within which an object exists or an activity was performed"@en) +AnnotationAssertion(rdfs:label as:context "context"@en) +ObjectPropertyDomain(as:context as:Object) +ObjectPropertyRange(as:context ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:current (current) + +AnnotationAssertion(rdfs:label as:current "current"@en) +FunctionalObjectProperty(as:current) +ObjectPropertyDomain(as:current as:Collection) +ObjectPropertyRange(as:current ObjectUnionOf(as:CollectionPage as:Link)) + +# Object Property: as:describes (describes) + +AnnotationAssertion(rdfs:comment as:describes "On a Profile object, describes the object described by the profile"@en) +AnnotationAssertion(rdfs:label as:describes "describes"@en) +FunctionalObjectProperty(as:describes) +ObjectPropertyDomain(as:describes as:Profile) +ObjectPropertyRange(as:describes as:Object) + +# Object Property: as:first (first) + +AnnotationAssertion(rdfs:label as:first "first"@en) +FunctionalObjectProperty(as:first) +ObjectPropertyDomain(as:first as:Collection) +ObjectPropertyRange(as:first ObjectUnionOf(as:CollectionPage as:Link)) + +# Object Property: as:formerType (formerType) + +AnnotationAssertion(rdfs:comment as:formerType "On a Tombstone object, describes the former type of the deleted object"@en) +AnnotationAssertion(rdfs:label as:formerType "formerType"@en) +FunctionalObjectProperty(as:formerType) +ObjectPropertyDomain(as:formerType as:Tombstone) +ObjectPropertyRange(as:formerType as:Object) + +# Object Property: as:generator (generator) + +AnnotationAssertion(rdfs:label as:generator "generator"@en) +ObjectPropertyDomain(as:generator as:Object) +ObjectPropertyRange(as:generator ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:icon (icon) + +AnnotationAssertion(rdfs:label as:icon "icon"@en) +ObjectPropertyDomain(as:icon as:Object) +ObjectPropertyRange(as:icon ObjectUnionOf(as:Image as:Link)) + +# Object Property: as:image (image) + +AnnotationAssertion(rdfs:label as:image "image"@en) +ObjectPropertyDomain(as:image as:Object) +ObjectPropertyRange(as:image ObjectUnionOf(as:Image as:Link)) + +# Object Property: as:inReplyTo (inReplyTo) + +AnnotationAssertion(rdfs:label as:inReplyTo "inReplyTo"@en) +ObjectPropertyDomain(as:inReplyTo as:Object) +ObjectPropertyRange(as:inReplyTo ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:instrument (instrument) + +AnnotationAssertion(rdfs:comment as:instrument "Indentifies an object used (or to be used) to complete an activity"@en) +AnnotationAssertion(rdfs:label as:instrument "instrument"@en) +ObjectPropertyDomain(as:instrument as:Activity) +ObjectPropertyRange(as:instrument ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:items (items) + +AnnotationAssertion(rdfs:label as:items "items"@en) +ObjectPropertyDomain(as:items as:Collection) +ObjectPropertyRange(as:items ObjectUnionOf(as:OrderedItems ObjectUnionOf(as:Link as:Object))) + +# Object Property: as:last (last) + +AnnotationAssertion(rdfs:label as:last "last"@en) +FunctionalObjectProperty(as:last) +ObjectPropertyDomain(as:last as:Collection) +ObjectPropertyRange(as:last ObjectUnionOf(as:CollectionPage as:Link)) + +# Object Property: as:location (location) + +AnnotationAssertion(rdfs:label as:location "location"@en) +ObjectPropertyDomain(as:location as:Object) +ObjectPropertyRange(as:location ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:name (name) + +AnnotationAssertion(rdfs:label as:name "name"@en) +AnnotationAssertion(rdfs:name as:name "The default, plain-text display name of the object or link."@en) +ObjectPropertyDomain(as:name ObjectUnionOf(as:Link as:Object)) +ObjectPropertyRange(as:name ObjectUnionOf(rdf:langString xsd:string)) + +# Object Property: as:next (next) + +AnnotationAssertion(rdfs:label as:next "next"@en) +FunctionalObjectProperty(as:next) +ObjectPropertyDomain(as:next as:CollectionPage) +ObjectPropertyRange(as:next ObjectUnionOf(as:CollectionPage as:Link)) + +# Object Property: as:object (object) + +AnnotationAssertion(rdfs:label as:object "object"@en) +ObjectPropertyDomain(as:object ObjectUnionOf(as:Activity as:Relationship)) +ObjectPropertyRange(as:object ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:oneOf (oneOf) + +AnnotationAssertion(rdfs:comment as:oneOf "Describes a possible exclusive answer or option for a question."@en) +AnnotationAssertion(rdfs:label as:oneOf "oneOf"@en) +ObjectPropertyDomain(as:oneOf as:Question) +ObjectPropertyRange(as:oneOf ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:origin (origin) + +AnnotationAssertion(rdfs:comment as:origin "For certain activities, specifies the entity from which the action is directed."@en) +AnnotationAssertion(rdfs:label as:origin "origin"@en) +ObjectPropertyDomain(as:origin as:Activity) +ObjectPropertyRange(as:origin ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:partOf (partOf) + +AnnotationAssertion(rdfs:label as:partOf "partOf"@en) +FunctionalObjectProperty(as:partOf) +ObjectPropertyDomain(as:partOf as:CollectionPage) +ObjectPropertyRange(as:partOf ObjectUnionOf(as:Collection as:Link)) + +# Object Property: as:prev (prev) + +AnnotationAssertion(rdfs:label as:prev "prev"@en) +FunctionalObjectProperty(as:prev) +ObjectPropertyDomain(as:prev as:CollectionPage) +ObjectPropertyRange(as:prev ObjectUnionOf(as:CollectionPage as:Link)) + +# Object Property: as:preview (preview) + +AnnotationAssertion(rdfs:label as:preview "preview"@en) +ObjectPropertyDomain(as:preview ObjectUnionOf(as:Link as:Object)) +ObjectPropertyRange(as:preview ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:provider (provider) + +AnnotationAssertion(rdfs:label as:provider "provider"@en) +AnnotationAssertion(owl:deprecated as:provider "true"^^xsd:boolean) +ObjectPropertyDomain(as:provider as:Object) +ObjectPropertyRange(as:provider ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:relationship (relationship) + +AnnotationAssertion(rdfs:comment as:relationship "On a Relationship object, describes the type of relationship"@en) +AnnotationAssertion(rdfs:label as:relationship "relationship"@en) +SubObjectPropertyOf(as:relationship rdf:predicate) +ObjectPropertyDomain(as:relationship as:Relationship) +ObjectPropertyRange(as:relationship rdf:Property) + +# Object Property: as:replies (replies) + +AnnotationAssertion(rdfs:label as:replies "replies"@en) +ObjectPropertyDomain(as:replies as:Object) +ObjectPropertyRange(as:replies as:Collection) + +# Object Property: as:result (result) + +AnnotationAssertion(rdfs:label as:result "result"@en) +ObjectPropertyDomain(as:result as:Activity) +ObjectPropertyRange(as:result ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:subject (a) + +AnnotationAssertion(rdfs:comment as:subject "On a Relationship object, identifies the subject. e.g. when saying \"John is connected to Sally\", 'subject' refers to 'John'"@en) +AnnotationAssertion(rdfs:label as:subject "a"@en) +SubObjectPropertyOf(as:subject rdf:subject) +FunctionalObjectProperty(as:subject) +ObjectPropertyDomain(as:subject as:Relationship) +ObjectPropertyRange(as:subject ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:summary (summary) + +AnnotationAssertion(rdfs:comment as:summary "A short summary of the object"@en) +AnnotationAssertion(rdfs:label as:summary "summary"@en) +ObjectPropertyDomain(as:summary as:Object) +ObjectPropertyRange(as:summary ObjectUnionOf(rdf:langString xsd:string)) + +# Object Property: as:tag (tag) + +AnnotationAssertion(rdfs:label as:tag "tag"@en) +EquivalentObjectProperties(as:tag as:tags) +ObjectPropertyDomain(as:tag as:Object) +ObjectPropertyRange(as:tag ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:tags (tags) + +AnnotationAssertion(rdfs:label as:tags "tags"@en) +AnnotationAssertion(owl:deprecated as:tags "true"^^xsd:boolean) +ObjectPropertyDomain(as:tags as:Object) +ObjectPropertyRange(as:tags ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:target (target) + +AnnotationAssertion(rdfs:label as:target "target"@en) +ObjectPropertyDomain(as:target as:Activity) +ObjectPropertyRange(as:target ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:to (to) + +AnnotationAssertion(rdfs:label as:to "to"@en) +ObjectPropertyDomain(as:to as:Object) +ObjectPropertyRange(as:to ObjectUnionOf(as:Link as:Object)) + +# Object Property: as:url (url) + +AnnotationAssertion(rdfs:comment as:url "Specifies a link to a specific representation of the Object"@en) +AnnotationAssertion(rdfs:label as:url "url"@en) +ObjectPropertyDomain(as:url as:Object) +ObjectPropertyRange(as:url ObjectUnionOf(owl:Thing as:Link)) + + +############################ +# Data Properties +############################ + +# Data Property: as:accuracy (accuracy) + +AnnotationAssertion(rdfs:comment as:accuracy "Specifies the accuracy around the point established by the longitude and latitude"@en) +AnnotationAssertion(rdfs:label as:accuracy "accuracy"@en) +FunctionalDataProperty(as:accuracy) +DataPropertyDomain(as:accuracy as:Place) +DataPropertyRange(as:accuracy DatatypeRestriction(xsd:float xsd:minInclusive "0.0"^^xsd:float)) + +# Data Property: as:altitude (altitude) + +AnnotationAssertion(rdfs:comment as:altitude "The altitude of a place"@en) +AnnotationAssertion(rdfs:label as:altitude "altitude"@en) +FunctionalDataProperty(as:altitude) +DataPropertyDomain(as:altitude as:Place) +DataPropertyRange(as:altitude xsd:float) + +# Data Property: as:deleted (deleted) + +AnnotationAssertion(rdfs:comment as:deleted "Specifies the date and time the object was deleted"@en) +AnnotationAssertion(rdfs:label as:deleted "deleted"@en) +FunctionalDataProperty(as:deleted) +DataPropertyDomain(as:deleted as:Tombstone) +DataPropertyRange(as:deleted xsd:dateTime) + +# Data Property: as:downstreamDuplicates (downstreamDuplicates) + +AnnotationAssertion(rdfs:label as:downstreamDuplicates "downstreamDuplicates"@en) +AnnotationAssertion(owl:deprecated as:downstreamDuplicates "true"^^xsd:boolean) +DataPropertyDomain(as:downstreamDuplicates as:Object) +DataPropertyRange(as:downstreamDuplicates xsd:anyURI) + +# Data Property: as:duration (duration) + +AnnotationAssertion(rdfs:comment as:duration "The duration of the object"@en) +AnnotationAssertion(rdfs:label as:duration "duration"@en) +FunctionalDataProperty(as:duration) +DataPropertyDomain(as:duration as:Object) +DataPropertyRange(as:duration xsd:duration) + +# Data Property: as:endTime (endTime) + +AnnotationAssertion(rdfs:comment as:endTime "The ending time of the object"@en) +AnnotationAssertion(rdfs:label as:endTime "endTime"@en) +FunctionalDataProperty(as:endTime) +DataPropertyDomain(as:endTime as:Object) +DataPropertyRange(as:endTime xsd:dateTime) + +# Data Property: as:height (height) + +AnnotationAssertion(rdfs:comment as:height "The display height expressed as device independent pixels"@en) +AnnotationAssertion(rdfs:label as:height "height"@en) +FunctionalDataProperty(as:height) +DataPropertyDomain(as:height as:Link) +DataPropertyRange(as:height xsd:nonNegativeInteger) + +# Data Property: as:href (href) + +AnnotationAssertion(rdfs:comment as:href "The target URI of the Link"@en) +AnnotationAssertion(rdfs:label as:href "href"@en) +FunctionalDataProperty(as:href) +DataPropertyDomain(as:href as:Link) +DataPropertyRange(as:href xsd:anyURI) + +# Data Property: as:hreflang (hreflang) + +AnnotationAssertion(rdfs:comment as:hreflang "A hint about the language of the referenced resource"@en) +AnnotationAssertion(rdfs:label as:hreflang "hreflang"@en) +FunctionalDataProperty(as:hreflang) +DataPropertyDomain(as:hreflang as:Link) +DataPropertyRange(as:hreflang xsd:language) + +# Data Property: as:id (id) + +AnnotationAssertion(rdfs:label as:id "id"@en) +AnnotationAssertion(owl:deprecated as:id "true"^^xsd:boolean) +FunctionalDataProperty(as:id) +DataPropertyDomain(as:id ObjectUnionOf(as:Link as:Object)) +DataPropertyRange(as:id xsd:anyURI) + +# Data Property: as:latitude (latitude) + +AnnotationAssertion(rdfs:comment as:latitude "The latitude"@en) +AnnotationAssertion(rdfs:label as:latitude "latitude"@en) +FunctionalDataProperty(as:latitude) +DataPropertyDomain(as:latitude as:Place) +DataPropertyRange(as:latitude xsd:float) + +# Data Property: as:longitude (longitude) + +AnnotationAssertion(rdfs:comment as:longitude "The longitude"@en) +AnnotationAssertion(rdfs:label as:longitude "longitude"@en) +FunctionalDataProperty(as:longitude) +DataPropertyDomain(as:longitude as:Place) +DataPropertyRange(as:longitude xsd:float) + +# Data Property: as:mediaType (mediaType) + +AnnotationAssertion(rdfs:comment as:mediaType "The MIME Media Type"@en) +AnnotationAssertion(rdfs:label as:mediaType "mediaType"@en) +FunctionalDataProperty(as:mediaType) +DataPropertyDomain(as:mediaType ObjectUnionOf(as:Link as:Object)) +DataPropertyRange(as:mediaType xsd:string) + +# Data Property: as:objectType (objectType) + +AnnotationAssertion(rdfs:label as:objectType "objectType"@en) +AnnotationAssertion(owl:deprecated as:objectType "true"^^xsd:boolean) +FunctionalDataProperty(as:objectType) +DataPropertyDomain(as:objectType as:Object) +DataPropertyRange(as:objectType xsd:anyURI) + +# Data Property: as:published (published) + +AnnotationAssertion(rdfs:comment as:published "Specifies the date and time the object was published"@en) +AnnotationAssertion(rdfs:label as:published "published"@en) +FunctionalDataProperty(as:published) +DataPropertyDomain(as:published as:Object) +DataPropertyRange(as:published xsd:dateTime) + +# Data Property: as:radius (radius) + +AnnotationAssertion(rdfs:comment as:radius "Specifies a radius around the point established by the longitude and latitude"@en) +AnnotationAssertion(rdfs:label as:radius "radius"@en) +FunctionalDataProperty(as:radius) +DataPropertyDomain(as:radius as:Place) +DataPropertyRange(as:radius DatatypeRestriction(xsd:float xsd:minInclusive "0.0"^^xsd:float)) + +# Data Property: as:rating (rating) + +AnnotationAssertion(rdfs:comment as:rating "A numeric rating (>= 0.0, <= 5.0) for the object"@en) +AnnotationAssertion(rdfs:label as:rating "rating"@en) +AnnotationAssertion(owl:deprecated as:rating "true"^^xsd:boolean) +FunctionalDataProperty(as:rating) +DataPropertyDomain(as:rating as:Object) +DataPropertyRange(as:rating DatatypeRestriction(xsd:float xsd:minInclusive "0.0"^^xsd:float xsd:maxInclusive "5.0"^^xsd:float)) + +# Data Property: as:rel (rel) + +AnnotationAssertion(rdfs:comment as:rel "The RFC 5988 or HTML5 Link Relation associated with the Link"@en) +AnnotationAssertion(rdfs:label as:rel "rel"@en) +DataPropertyDomain(as:rel as:Link) +DataPropertyRange(as:rel xsd:string) + +# Data Property: as:startTime (startTime) + +AnnotationAssertion(rdfs:comment as:startTime "The starting time of the object"@en) +AnnotationAssertion(rdfs:label as:startTime "startTime"@en) +FunctionalDataProperty(as:startTime) +DataPropertyDomain(as:startTime as:Object) +DataPropertyRange(as:startTime xsd:dateTime) + +# Data Property: as:totalItems (totalItems) + +AnnotationAssertion(rdfs:comment as:totalItems "The total number of items in a logical collection"@en) +AnnotationAssertion(rdfs:label as:totalItems "totalItems"@en) +FunctionalDataProperty(as:totalItems) +DataPropertyDomain(as:totalItems as:Collection) +DataPropertyRange(as:totalItems xsd:nonNegativeInteger) + +# Data Property: as:units (units) + +AnnotationAssertion(rdfs:comment as:units "Identifies the unit of measurement used by the radius, altitude and accuracy properties. The value can be expressed either as one of a set of predefined units or as a well-known common URI that identifies units."@en) +AnnotationAssertion(rdfs:label as:units "units"@en) +FunctionalDataProperty(as:units) +DataPropertyDomain(as:units as:Place) +DataPropertyRange(as:units DataUnionOf(xsd:anyURI DataOneOf("cm" "feet" "inches" "km" "m" "miles"))) + +# Data Property: as:updated (updated) + +AnnotationAssertion(rdfs:comment as:updated "Specifies when the object was last updated"@en) +AnnotationAssertion(rdfs:label as:updated "updated"@en) +FunctionalDataProperty(as:updated) +DataPropertyDomain(as:updated as:Object) +DataPropertyRange(as:updated xsd:dateTime) + +# Data Property: as:upstreamDuplicates (upstreamDuplicates) + +AnnotationAssertion(rdfs:label as:upstreamDuplicates "upstreamDuplicates"@en) +AnnotationAssertion(owl:deprecated as:upstreamDuplicates "true"^^xsd:boolean) +DataPropertyDomain(as:upstreamDuplicates as:Object) +DataPropertyRange(as:upstreamDuplicates xsd:anyURI) + +# Data Property: as:verb (verb) + +AnnotationAssertion(rdfs:label as:verb "verb"@en) +AnnotationAssertion(owl:deprecated as:verb "true"^^xsd:boolean) +FunctionalDataProperty(as:verb) +DataPropertyDomain(as:verb as:Activity) +DataPropertyRange(as:verb xsd:anyURI) + +# Data Property: as:width (width) + +AnnotationAssertion(rdfs:comment as:width "Specifies the preferred display width of the content, expressed in terms of device independent pixels."@en) +AnnotationAssertion(rdfs:label as:width "width"@en) +FunctionalDataProperty(as:width) +DataPropertyDomain(as:width as:Link) +DataPropertyRange(as:width xsd:nonNegativeInteger) + + + +############################ +# Classes +############################ + +# Class: as:Accept (Accept) + +AnnotationAssertion(rdfs:comment as:Accept "Actor accepts the Object"@en) +AnnotationAssertion(rdfs:label as:Accept "Accept"@en) +SubClassOf(as:Accept as:Activity) + +# Class: as:Activity (Activity) + +AnnotationAssertion(rdfs:comment as:Activity "An Object representing some form of Action that has been taken"@en) +AnnotationAssertion(rdfs:label as:Activity "Activity"@en) +SubClassOf(as:Activity as:Object) + +# Class: as:Add (Add) + +AnnotationAssertion(rdfs:comment as:Add "To Add an Object or Link to Something"@en) +AnnotationAssertion(rdfs:label as:Add "Add"@en) +SubClassOf(as:Add as:Activity) + +# Class: as:Announce (Announce) + +AnnotationAssertion(rdfs:comment as:Announce "Actor announces the object to the target"@en) +AnnotationAssertion(rdfs:label as:Announce "Announce"@en) +SubClassOf(as:Announce as:Activity) + +# Class: as:Application (Application) + +AnnotationAssertion(rdfs:comment as:Application "Represents a software application of any sort"@en) +AnnotationAssertion(rdfs:label as:Application "Application"@en) +SubClassOf(as:Application as:Object) + +# Class: as:Arrive (Arrive) + +AnnotationAssertion(rdfs:comment as:Arrive "To Arrive Somewhere (can be used, for instance, to indicate that a particular entity is currently located somewhere, e.g. a \"check-in\")"@en) +AnnotationAssertion(rdfs:label as:Arrive "Arrive"@en) +SubClassOf(as:Arrive as:IntransitiveActivity) + +# Class: as:Article (Article) + +AnnotationAssertion(rdfs:comment as:Article "A written work. Typically several paragraphs long. For example, a blog post or a news article."@en) +AnnotationAssertion(rdfs:label as:Article "Article"@en) +SubClassOf(as:Article as:Object) + +# Class: as:Audio (Audio) + +AnnotationAssertion(rdfs:comment as:Audio "An audio file"@en) +AnnotationAssertion(rdfs:label as:Audio "Audio"@en) +SubClassOf(as:Audio as:Document) + +# Class: as:Block (Block) + +AnnotationAssertion(rdfs:label as:Block "Block"@en) +SubClassOf(as:Block as:Ignore) + +# Class: as:Collection (Collection) + +AnnotationAssertion(rdfs:comment as:Collection "An ordered or unordered collection of Objects or Links"@en) +AnnotationAssertion(rdfs:label as:Collection "Collection"@en) +SubClassOf(as:Collection as:Object) + +# Class: as:CollectionPage (CollectionPage) + +AnnotationAssertion(rdfs:comment as:CollectionPage "A subset of items from a Collection"@en) +AnnotationAssertion(rdfs:label as:CollectionPage "CollectionPage"@en) +SubClassOf(as:CollectionPage as:Collection) + +# Class: as:Create (Create) + +AnnotationAssertion(rdfs:comment as:Create "To Create Something"@en) +AnnotationAssertion(rdfs:label as:Create "Create"@en) +SubClassOf(as:Create as:Activity) + +# Class: as:Delete (Delete) + +AnnotationAssertion(rdfs:comment as:Delete "To Delete Something"@en) +AnnotationAssertion(rdfs:label as:Delete "Delete"@en) +SubClassOf(as:Delete as:Activity) + +# Class: as:Dislike (Dislike) + +AnnotationAssertion(rdfs:comment as:Dislike "The actor dislikes the object"@en) +AnnotationAssertion(rdfs:label as:Dislike "Dislike"@en) +SubClassOf(as:Dislike as:Activity) + +# Class: as:Document (Document) + +AnnotationAssertion(rdfs:comment as:Document "Represents a digital document/file of any sort"@en) +AnnotationAssertion(rdfs:label as:Document "Document"@en) +SubClassOf(as:Document as:Object) + +# Class: as:Event (Event) + +AnnotationAssertion(rdfs:comment as:Event "An Event of any kind"@en) +AnnotationAssertion(rdfs:label as:Event "Event"@en) +SubClassOf(as:Event as:Object) + +# Class: as:Flag (Flag) + +AnnotationAssertion(rdfs:comment as:Flag "To flag something (e.g. flag as inappropriate, flag as spam, etc)"@en) +AnnotationAssertion(rdfs:label as:Flag "Flag"@en) +SubClassOf(as:Flag as:Activity) + +# Class: as:Follow (Follow) + +AnnotationAssertion(rdfs:comment as:Follow "To Express Interest in Something"@en) +AnnotationAssertion(rdfs:label as:Follow "Follow"@en) +SubClassOf(as:Follow as:Activity) + +# Class: as:Group (Group) + +AnnotationAssertion(rdfs:comment as:Group "A Group of any kind."@en) +AnnotationAssertion(rdfs:label as:Group "Group"@en) +SubClassOf(as:Group as:Object) + +# Class: as:Ignore (Ignore) + +AnnotationAssertion(rdfs:comment as:Ignore "Actor is ignoring the Object"@en) +AnnotationAssertion(rdfs:label as:Ignore "Ignore"@en) +SubClassOf(as:Ignore as:Activity) + +# Class: as:Image (Image) + +AnnotationAssertion(rdfs:comment as:Image "An Image file"@en) +AnnotationAssertion(rdfs:label as:Image "Image"@en) +SubClassOf(as:Image as:Document) + +# Class: as:IntransitiveActivity (IntransitiveActivity) + +AnnotationAssertion(rdfs:comment as:IntransitiveActivity "An Activity that has no direct object"@en) +AnnotationAssertion(rdfs:label as:IntransitiveActivity "IntransitiveActivity"@en) +SubClassOf(as:IntransitiveActivity as:Activity) +SubClassOf(as:IntransitiveActivity ObjectMaxCardinality(0 as:object)) + +# Class: as:Invite (Invite) + +AnnotationAssertion(rdfs:comment as:Invite "To invite someone or something to something"@en) +AnnotationAssertion(rdfs:label as:Invite "Invite"@en) +SubClassOf(as:Invite as:Offer) + +# Class: as:Join (Join) + +AnnotationAssertion(rdfs:comment as:Join "To Join Something"@en) +AnnotationAssertion(rdfs:label as:Join "Join"@en) +SubClassOf(as:Join as:Activity) + +# Class: as:Leave (Leave) + +AnnotationAssertion(rdfs:comment as:Leave "To Leave Something"@en) +AnnotationAssertion(rdfs:label as:Leave "Leave"@en) +SubClassOf(as:Leave as:Activity) + +# Class: as:Like (Like) + +AnnotationAssertion(rdfs:comment as:Like "To Like Something"@en) +AnnotationAssertion(rdfs:label as:Like "Like"@en) +SubClassOf(as:Like as:Activity) + +# Class: as:Link (Link) + +AnnotationAssertion(rdfs:comment as:Link "Represents a qualified reference to another resource. Patterned after the RFC5988 Web Linking Model"@en) +AnnotationAssertion(rdfs:label as:Link "Link"@en) +DisjointClasses(as:Link as:Object) + +# Class: as:Listen (Listen) + +AnnotationAssertion(rdfs:comment as:Listen "The actor listened to the object"@en) +AnnotationAssertion(rdfs:label as:Listen "Listen"@en) +SubClassOf(as:Listen as:Activity) + +# Class: as:Mention (Mention) + +AnnotationAssertion(rdfs:comment as:Mention "A specialized Link that represents an @mention"@en) +AnnotationAssertion(rdfs:label as:Mention "Mention"@en) +SubClassOf(as:Mention as:Link) + +# Class: as:Move (Move) + +AnnotationAssertion(rdfs:comment as:Move "The actor is moving the object. The target specifies where the object is moving to. The origin specifies where the object is moving from.") +AnnotationAssertion(rdfs:label as:Move "Move"@en) +SubClassOf(as:Move as:Activity) + +# Class: as:Note (Note) + +AnnotationAssertion(rdfs:comment as:Note "A Short note, typically less than a single paragraph. A \"tweet\" is an example, or a \"status update\""@en) +AnnotationAssertion(rdfs:label as:Note "Note"@en) +SubClassOf(as:Note as:Object) + +# Class: as:Object (Object) + +AnnotationAssertion(rdfs:label as:Object "Object"@en) + +# Class: as:Offer (Offer) + +AnnotationAssertion(rdfs:comment as:Offer "To Offer something to someone or something"@en) +AnnotationAssertion(rdfs:label as:Offer "Offer"@en) +SubClassOf(as:Offer as:Activity) + +# Class: as:Organization (Organization) + +AnnotationAssertion(rdfs:comment as:Organization "An Organization"@en) +AnnotationAssertion(rdfs:label as:Organization "Organization"@en) +SubClassOf(as:Organization as:Object) + +# Class: as:Page (Page) + +AnnotationAssertion(rdfs:comment as:Page "A Web Page"@en) +AnnotationAssertion(rdfs:label as:Page "Page"@en) +SubClassOf(as:Page as:Object) + +# Class: as:Person (Person) + +AnnotationAssertion(rdfs:comment as:Person "A Person"@en) +AnnotationAssertion(rdfs:label as:Person "Person"@en) +SubClassOf(as:Person as:Object) + +# Class: as:Place (Place) + +AnnotationAssertion(rdfs:comment as:Place "A physical or logical location"@en) +AnnotationAssertion(rdfs:label as:Place "Place"@en) +SubClassOf(as:Place as:Object) + +# Class: as:Profile (Profile) + +AnnotationAssertion(rdfs:comment as:Profile "A Profile Document"@en) +AnnotationAssertion(rdfs:label as:Profile "Profile"@en) +SubClassOf(as:Profile as:Object) + +# Class: as:Question (Question) + +AnnotationAssertion(rdfs:comment as:Question "A question of any sort."@en) +AnnotationAssertion(rdfs:label as:Question "Question"@en) +SubClassOf(as:Question as:IntransitiveActivity) + +# Class: as:Read (Read) + +AnnotationAssertion(rdfs:comment as:Read "The actor read the object"@en) +AnnotationAssertion(rdfs:label as:Read "Read"@en) +SubClassOf(as:Read as:Activity) + +# Class: as:Reject (Reject) + +AnnotationAssertion(rdfs:comment as:Reject "Actor rejects the Object"@en) +AnnotationAssertion(rdfs:label as:Reject "Reject"@en) +SubClassOf(as:Reject as:Activity) + +# Class: as:Relationship (Relationship) + +AnnotationAssertion(rdfs:comment as:Relationship "Represents a Social Graph relationship between two Individuals (indicated by the 'a' and 'b' properties)"@en) +AnnotationAssertion(rdfs:label as:Relationship "Relationship"@en) +SubClassOf(as:Relationship as:Object) + +# Class: as:Remove (Remove) + +AnnotationAssertion(rdfs:comment as:Remove "To Remove Something"@en) +AnnotationAssertion(rdfs:label as:Remove "Remove"@en) +SubClassOf(as:Remove as:Activity) + +# Class: as:Service (Service) + +AnnotationAssertion(rdfs:comment as:Service "A service provided by some entity"@en) +AnnotationAssertion(rdfs:label as:Service "Service"@en) +SubClassOf(as:Service as:Object) + +# Class: as:TentativeAccept (TentativeAccept) + +AnnotationAssertion(rdfs:comment as:TentativeAccept "Actor tentatively accepts the Object"@en) +AnnotationAssertion(rdfs:label as:TentativeAccept "TentativeAccept"@en) +SubClassOf(as:TentativeAccept as:Accept) + +# Class: as:TentativeReject (TentativeReject) + +AnnotationAssertion(rdfs:comment as:TentativeReject "Actor tentatively rejects the object"@en) +AnnotationAssertion(rdfs:label as:TentativeReject "TentativeReject"@en) +SubClassOf(as:TentativeReject as:Reject) + +# Class: as:Tombstone (Tombstone) + +AnnotationAssertion(rdfs:comment as:Tombstone "A placeholder for a deleted object"@en) +AnnotationAssertion(rdfs:label as:Tombstone "Tombstone"@en) +SubClassOf(as:Tombstone as:Object) + +# Class: as:Travel (Travel) + +AnnotationAssertion(rdfs:comment as:Travel "The actor is traveling to the target. The origin specifies where the actor is traveling from.") +AnnotationAssertion(rdfs:label as:Travel "Travel"@en) +SubClassOf(as:Travel as:IntransitiveActivity) + +# Class: as:Undo (Undo) + +AnnotationAssertion(rdfs:comment as:Undo "To Undo Something. This would typically be used to indicate that a previous Activity has been undone."@en) +AnnotationAssertion(rdfs:label as:Undo "Undo"@en) +SubClassOf(as:Undo as:Activity) + +# Class: as:Update (Update) + +AnnotationAssertion(rdfs:comment as:Update "To Update/Modify Something"@en) +AnnotationAssertion(rdfs:label as:Update "Update"@en) +SubClassOf(as:Update as:Activity) + +# Class: as:Video (Video) + +AnnotationAssertion(rdfs:comment as:Video "A Video document of any kind."@en) +AnnotationAssertion(rdfs:label as:Video "Video"@en) +SubClassOf(as:Video as:Document) + +# Class: as:View (View) + +AnnotationAssertion(rdfs:comment as:View "The actor viewed the object"@en) +AnnotationAssertion(rdfs:label as:View "View"@en) +SubClassOf(as:View as:Activity) + + +############################ +# Named Individuals +############################ + +# Individual: rdf:nil (rdf:nil) + +ClassAssertion(as:OrderedItems rdf:nil) + +# Individual: as:Relationship (Relationship) + +ClassAssertion(rdf:Statement as:Relationship) + + +) \ No newline at end of file diff --git a/data/activitystreams2.owl b/data/activitystreams2.owl new file mode 100644 index 0000000..8e65fba --- /dev/null +++ b/data/activitystreams2.owl @@ -0,0 +1,899 @@ +@prefix : . +@prefix as: . +@prefix owl: . +@prefix rdf: . +@prefix xml: . +@prefix xsd: . +@prefix rdfs: . +@base . + + a owl:Ontology ; + rdfs:comment "Extended Activity Streams 2.0 Vocabulary"@en ; + rdfs:label "Activity Streams 2.0"@en . + +################################################################# +# +# Datatypes +# +################################################################# + +rdf:langString a rdfs:Datatype . +xsd:duration a rdfs:Datatype . + +################################################################# +# +# Object Properties +# +################################################################# + +as:actor a owl:ObjectProperty ; + rdfs:label "actor"@en ; + rdfs:domain as:Activity ; + rdfs:comment "Subproperty of as:attributedTo that identifies the primary actor"@en ; + rdfs:subPropertyOf as:attributedTo ; + rdfs:range [ + a owl:Class ; + owl:unionOf (as:Object as:Link) + ] . + +as:attributedTo a owl:ObjectProperty ; + rdfs:label "attributedTo"@en; + rdfs:comment "Identifies an entity to which an object is attributed"@en; + rdfs:range [ + a owl:Class ; + owl:unionOf (as:Object as:Link) + ] ; + rdfs:domain [ + a owl:Class ; + owl:unionOf (as:Object as:Link) + ] ; . + +as:attachment a owl:ObjectProperty ; + rdfs:label "attachment"@en ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Link as:Object ) + ] ; + rdfs:domain as:Object ; + owl:equivalentProperty as:attachments . + +as:attachments a owl:ObjectProperty, + owl:DeprecatedProperty ; + rdfs:label "attachments"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:author a owl:ObjectProperty, + owl:DeprecatedProperty ; + rdfs:label "author"@en ; + rdfs:comment "Identifies the author of an object. Deprecated. Use as:attributedTo instead"@en; + rdfs:domain as:Object ; + rdfs:subPropertyOf as:attributedTo ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:bcc a owl:ObjectProperty ; + rdfs:label "bcc"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:bto a owl:ObjectProperty ; + rdfs:label "bto"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:cc a owl:ObjectProperty ; + rdfs:label "cc"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:context a owl:ObjectProperty ; + rdfs:label "context"@en ; + rdfs:comment "Specifies the context within which an object exists or an activity was performed"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:current a owl:FunctionalProperty , + owl:ObjectProperty ; + rdfs:label "current"@en ; + rdfs:domain as:Collection ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:CollectionPage as:Link ) + ] . + +as:first a owl:FunctionalProperty , + owl:ObjectProperty ; + rdfs:label "first"@en ; + rdfs:domain as:Collection ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:CollectionPage as:Link ) + ] . + +as:generator a owl:ObjectProperty ; + rdfs:label "generator"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:icon a owl:ObjectProperty ; + rdfs:label "icon"@en ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Image as:Link ) + ] ; + rdfs:domain as:Object . + +as:image a owl:ObjectProperty ; + rdfs:label "image"@en ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Image as:Link ) + ] ; + rdfs:domain as:Object . + +as:inReplyTo a owl:ObjectProperty ; + rdfs:label "inReplyTo"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:items a owl:ObjectProperty ; + rdfs:label "items"@en ; + rdfs:domain as:Collection ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( + [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] + as:OrderedItems + ) + ] . + +as:last a owl:FunctionalProperty , + owl:ObjectProperty ; + rdfs:label "last"@en ; + rdfs:domain as:Collection ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:CollectionPage as:Link ) + ] . + +as:location a owl:ObjectProperty ; + rdfs:label "location"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:next a owl:FunctionalProperty , + owl:ObjectProperty ; + rdfs:label "next"@en ; + rdfs:domain as:CollectionPage ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:CollectionPage as:Link ) + ] . + +as:object a owl:ObjectProperty ; + rdfs:label "object"@en ; + rdfs:domain [ + a owl:Class ; + owl:unionOf ( as:Activity as:Relationship ) + ]; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:oneOf a owl:ObjectProperty ; + rdfs:label "oneOf"@en ; + rdfs:comment "Describes a possible exclusive answer or option for a question."@en ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] ; + rdfs:domain as:Question . + +as:anyOf a owl:ObjectProperty ; + rdfs:label "oneOf"@en ; + rdfs:comment "Describes a possible inclusive answer or option for a question."@en ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] ; + rdfs:domain as:Question . + +as:prev a owl:FunctionalProperty , + owl:ObjectProperty ; + rdfs:label "prev"@en ; + rdfs:domain as:CollectionPage ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:CollectionPage as:Link ) + ] . + +as:preview a owl:ObjectProperty ; + rdfs:label "preview"@en ; + rdfs:domain [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:provider a owl:ObjectProperty, + owl:DeprecatedProperty ; + rdfs:label "provider"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:replies a owl:ObjectProperty ; + rdfs:label "replies"@en ; + rdfs:range as:Collection ; + rdfs:domain as:Object . + +as:result a owl:ObjectProperty ; + rdfs:label "result"@en ; + rdfs:domain as:Activity ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:audience a owl:ObjectProperty ; + rdfs:label "audience"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:partOf a owl:FunctionalProperty , + owl:ObjectProperty ; + rdfs:label "partOf"@en ; + rdfs:domain as:CollectionPage ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Collection as:Link ) + ] . + +as:tag a owl:ObjectProperty ; + rdfs:label "tag"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:tags a owl:ObjectProperty, + owl:DeprecatedProperty ; + rdfs:label "tags"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] ; + owl:equivalentProperty as:tag ;. + +as:target a owl:ObjectProperty ; + rdfs:label "target"@en ; + rdfs:domain as:Activity ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:origin a owl:ObjectProperty ; + rdfs:label "origin"@en ; + rdfs:comment "For certain activities, specifies the entity from which the action is directed."@en ; + rdfs:domain as:Activity ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:instrument a owl:ObjectProperty ; + rdfs:label "instrument"@en ; + rdfs:comment "Indentifies an object used (or to be used) to complete an activity"@en ; + rdfs:domain as:Activity ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:to a owl:ObjectProperty ; + rdfs:label "to"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Object as:Link ) + ] . + +as:url a owl:ObjectProperty ; + rdfs:label "url"@en ; + rdfs:comment "Specifies a link to a specific representation of the Object"@en ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Link owl:Thing ) + ] ; + rdfs:domain as:Object . + +as:subject a owl:FunctionalProperty, + owl:ObjectProperty; + rdfs:label "a"@en; + rdfs:comment "On a Relationship object, identifies the subject. e.g. when saying \"John is connected to Sally\", 'subject' refers to 'John'"@en ; + rdfs:domain as:Relationship ; + rdfs:subPropertyOf rdf:subject ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( as:Link as:Object ) + ]. + +as:relationship a owl:ObjectProperty; + rdfs:label "relationship"@en; + rdfs:comment "On a Relationship object, describes the type of relationship"@en; + rdfs:subPropertyOf rdf:predicate ; + rdfs:domain as:Relationship ; + rdfs:range rdf:Property . + +as:describes a owl:ObjectProperty, + owl:FunctionalProperty; + rdfs:label "describes"@en; + rdfs:comment "On a Profile object, describes the object described by the profile"@en ; + rdfs:domain as:Profile ; + rdfs:range as:Object . + +as:formerType a owl:ObjectProperty, + owl:FunctionalProperty; + rdfs:label "formerType"@en; + rdfs:comment "On a Tombstone object, describes the former type of the deleted object"@en ; + rdfs:domain as:Tombstone ; + rdfs:range as:Object . + +################################################################# +# +# Data properties +# +################################################################# + +as:accuracy a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "accuracy"@en ; + rdfs:comment "Specifies the accuracy around the point established by the longitude and latitude"@en ; + rdfs:domain as:Place ; + rdfs:range [ + a rdfs:Datatype ; + owl:onDatatype xsd:float ; + owl:withRestrictions ( + [ xsd:minInclusive "0.0"^^xsd:float ] + ) + ] . + +as:altitude a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "altitude"@en ; + rdfs:comment "The altitude of a place"@en; + rdfs:domain as:Place ; + rdfs:range xsd:float . + +as:content a owl:DatatypeProperty ; + rdfs:label "content"@en ; + rdfs:comment "The content of the object."@en ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( rdf:langString xsd:string ) + ] ; + rdfs:domain as:Object . + +as:name a owl:DatatypeProperty ; + rdfs:label "name"@en ; + rdfs:name "The default, plain-text display name of the object or link."@en ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( rdf:langString xsd:string ) + ] ; + rdfs:domain [ + a owl:Class ; + owl:unionOf ( as:Object as:Link) + ]. + +as:downstreamDuplicates a owl:DatatypeProperty, + owl:DeprecatedProperty ; + rdfs:label "downstreamDuplicates"@en ; + rdfs:range xsd:anyURI ; + rdfs:domain as:Object . + +as:duration a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "duration"@en ; + rdfs:comment "The duration of the object"@en ; + rdfs:range xsd:duration ; + rdfs:domain as:Object . + +as:endTime a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "endTime"@en ; + rdfs:comment "The ending time of the object"@en ; + rdfs:range xsd:dateTime ; + rdfs:domain as:Object . + +as:height a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "height"@en ; + rdfs:comment "The display height expressed as device independent pixels"@en ; + rdfs:range xsd:nonNegativeInteger ; + rdfs:domain as:Link . + +as:href a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "href"@en ; + rdfs:comment "The target URI of the Link"@en ; + rdfs:range xsd:anyURI ; + rdfs:domain as:Link . + +as:hreflang a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "hreflang"@en ; + rdfs:comment "A hint about the language of the referenced resource"@en ; + rdfs:range xsd:language ; + rdfs:domain as:Link . + +as:id a owl:DatatypeProperty , + owl:FunctionalProperty, + owl:DeprecatedProperty ; + rdfs:label "id"@en ; + rdfs:range xsd:anyURI ; + rdfs:domain [ + a owl:Class ; + owl:unionOf (as:Link as:Object) + ] . + +as:latitude a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "latitude"@en ; + rdfs:comment "The latitude"@en ; + rdfs:range xsd:float ; + rdfs:domain as:Place . + +as:longitude a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "longitude"@en ; + rdfs:comment "The longitude"@en ; + rdfs:range xsd:float ; + rdfs:domain as:Place . + +as:mediaType a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "mediaType"@en ; + rdfs:comment "The MIME Media Type"@en ; + rdfs:range xsd:string ; + rdfs:domain [ + a owl:Class ; + owl:unionOf (as:Link as:Object) + ] . + +as:objectType a owl:DatatypeProperty , + owl:FunctionalProperty, + owl:DeprecatedProperty ; + rdfs:label "objectType"@en ; + rdfs:range xsd:anyURI ; + rdfs:domain as:Object . + +as:published a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "published"@en ; + rdfs:comment "Specifies the date and time the object was published"@en ; + rdfs:range xsd:dateTime ; + rdfs:domain as:Object . + +as:radius a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "radius"@en ; + rdfs:comment "Specifies a radius around the point established by the longitude and latitude"@en ; + rdfs:domain as:Place ; + rdfs:range [ + a rdfs:Datatype ; + owl:onDatatype xsd:float ; + owl:withRestrictions ( + [ xsd:minInclusive "0.0"^^xsd:float ] + ) + ] . + +as:rating a owl:DatatypeProperty , + owl:FunctionalProperty, + owl:DeprecatedProperty ; + rdfs:label "rating"@en ; + rdfs:comment "A numeric rating (>= 0.0, <= 5.0) for the object"@en ; + rdfs:domain as:Object ; + rdfs:range [ + a rdfs:Datatype ; + owl:onDatatype xsd:float ; + owl:withRestrictions ( + [ xsd:minInclusive "0.0"^^xsd:float ] + [ xsd:maxInclusive "5.0"^^xsd:float ] + )] . + +as:rel a owl:DatatypeProperty ; + rdfs:label "rel"@en ; + rdfs:comment "The RFC 5988 or HTML5 Link Relation associated with the Link"@en ; + rdfs:range xsd:string ; + rdfs:domain as:Link . + +as:startTime a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "startTime"@en ; + rdfs:comment "The starting time of the object"@en ; + rdfs:range xsd:dateTime ; + rdfs:domain as:Object . + +as:summary a owl:DatatypeProperty ; + rdfs:label "summary"@en ; + rdfs:comment "A short summary of the object"@en ; + rdfs:range [ + a owl:Class ; + owl:unionOf ( rdf:langString xsd:string ) + ] ; + rdfs:domain as:Object . + +as:totalItems a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "totalItems"@en ; + rdfs:comment "The total number of items in a logical collection"@en ; + rdfs:range xsd:nonNegativeInteger ; + rdfs:domain as:Collection . + +as:units a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "units"@en ; + rdfs:comment "Identifies the unit of measurement used by the radius, altitude and accuracy properties. The value can be expressed either as one of a set of predefined units or as a well-known common URI that identifies units."@en ; + rdfs:range [ + a rdfs:Datatype ; + owl:unionOf ( + [ a rdfs:Datatype ; + owl:oneOf ( + "inches" + "feet" + "miles" + "cm" + "m" + "km" + ) + ] + xsd:anyURI ) + ] ; + rdfs:domain as:Place . + +as:updated a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "updated"@en ; + rdfs:comment "Specifies when the object was last updated"@en ; + rdfs:range xsd:dateTime ; + rdfs:domain as:Object . + +as:upstreamDuplicates a owl:DatatypeProperty, + owl:DeprecatedProperty ; + rdfs:label "upstreamDuplicates"@en ; + rdfs:range xsd:anyURI ; + rdfs:domain as:Object . + +as:verb a owl:DatatypeProperty , + owl:FunctionalProperty, + owl:DeprecatedProperty ; + rdfs:label "verb"@en ; + rdfs:range xsd:anyURI ; + rdfs:domain as:Activity . + +as:width a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "width"@en ; + rdfs:comment "Specifies the preferred display width of the content, expressed in terms of device independent pixels."@en ; + rdfs:range xsd:nonNegativeInteger ; + rdfs:domain as:Link . + +as:deleted a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:label "deleted"@en ; + rdfs:comment "Specifies the date and time the object was deleted"@en ; + rdfs:range xsd:dateTime ; + rdfs:domain as:Tombstone . + +################################################################# +# +# Classes +# +################################################################# + +as:Accept a owl:Class ; + rdfs:label "Accept"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "Actor accepts the Object"@en . + +as:Activity a owl:Class ; + rdfs:label "Activity"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "An Object representing some form of Action that has been taken"@en . + +as:Block a owl:Class ; + rdfs:label "Block"@en ; + rdfs:subClassOf as:Ignore . + +as:IntransitiveActivity a owl:Class ; + rdfs:label "IntransitiveActivity"@en ; + rdfs:subClassOf as:Activity ; + rdfs:subClassOf [ + a owl:Restriction ; + owl:onProperty as:object ; + owl:maxCardinality "0"^^xsd:nonNegativeInteger + ] ; + rdfs:comment "An Activity that has no direct object"@en . + +as:Add a owl:Class ; + rdfs:label "Add"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Add an Object or Link to Something"@en . + +as:Announce a owl:Class ; + rdfs:label "Announce"@en; + rdfs:subClassOf as:Activity ; + rdfs:comment "Actor announces the object to the target"@en . + +as:Application a owl:Class ; + rdfs:label "Application"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "Represents a software application of any sort"@en . + +as:Arrive a owl:Class ; + rdfs:label "Arrive"@en ; + rdfs:subClassOf as:IntransitiveActivity ; + rdfs:comment "To Arrive Somewhere (can be used, for instance, to indicate that a particular entity is currently located somewhere, e.g. a \"check-in\")"@en . + +as:Article a owl:Class ; + rdfs:label "Article"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "A written work. Typically several paragraphs long. For example, a blog post or a news article."@en . + +as:Audio a owl:Class ; + rdfs:label "Audio"@en ; + rdfs:subClassOf as:Document ; + rdfs:comment "An audio file"@en . + +as:Collection a owl:Class ; + rdfs:label "Collection"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "An ordered or unordered collection of Objects or Links"@en . + +as:CollectionPage a owl:Class ; + rdfs:label "CollectionPage"@en ; + rdfs:subClassOf as:Collection ; + rdfs:comment "A subset of items from a Collection"@en . + +as:Relationship a owl:Class, rdf:Statement ; + rdfs:label "Relationship"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "Represents a Social Graph relationship between two Individuals (indicated by the 'a' and 'b' properties)"@en . + +as:Create a owl:Class ; + rdfs:label "Create"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Create Something"@en . + +as:Delete a owl:Class ; + rdfs:label "Delete"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Delete Something"@en . + +as:Dislike a owl:Class ; + rdfs:label "Dislike"@en; + rdfs:subClassOf as:Activity ; + rdfs:comment "The actor dislikes the object"@en . + +as:Document a owl:Class ; + rdfs:label "Document"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "Represents a digital document/file of any sort"@en . + +as:Event a owl:Class ; + rdfs:label "Event"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "An Event of any kind"@en . + +as:Flag a owl:Class ; + rdfs:label "Flag"@en; + rdfs:subClassOf as:Activity ; + rdfs:comment "To flag something (e.g. flag as inappropriate, flag as spam, etc)"@en . + +as:Follow a owl:Class ; + rdfs:label "Follow"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Express Interest in Something"@en . + +as:Group a owl:Class ; + rdfs:label "Group"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "A Group of any kind."@en . + +as:Ignore a owl:Class ; + rdfs:label "Ignore"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "Actor is ignoring the Object"@en . + +as:Image a owl:Class ; + rdfs:label "Image"@en ; + rdfs:subClassOf as:Document ; + rdfs:comment "An Image file"@en . + +as:Invite a owl:Class ; + rdfs:label "Invite"@en ; + rdfs:subClassOf as:Offer ; + rdfs:comment "To invite someone or something to something"@en . + +as:Join a owl:Class ; + rdfs:label "Join"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Join Something"@en . + +as:Leave a owl:Class ; + rdfs:label "Leave"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Leave Something"@en . + +as:Like a owl:Class ; + rdfs:label "Like"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Like Something"@en . + +as:View a owl:Class ; + rdfs:label "View"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "The actor viewed the object"@en . + +as:Listen a owl:Class ; + rdfs:label "Listen"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "The actor listened to the object"@en . + +as:Read a owl:Class ; + rdfs:label "Read"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "The actor read the object"@en . + +as:Move a owl:Class ; + rdfs:label "Move"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "The actor is moving the object. The target specifies where the object is moving to. The origin specifies where the object is moving from." . + +as:Travel a owl:Class ; + rdfs:label "Travel"@en ; + rdfs:subClassOf as:IntransitiveActivity ; + rdfs:comment "The actor is traveling to the target. The origin specifies where the actor is traveling from." . + +as:Link a owl:Class ; + rdfs:label "Link"@en ; + owl:disjointWith as:Object ; + rdfs:comment "Represents a qualified reference to another resource. Patterned after the RFC5988 Web Linking Model"@en . + +as:Mention a owl:Class ; + rdfs:label "Mention"@en ; + rdfs:subClassOf as:Link ; + rdfs:comment "A specialized Link that represents an @mention"@en . + +as:Note a owl:Class ; + rdfs:label "Note"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "A Short note, typically less than a single paragraph. A \"tweet\" is an example, or a \"status update\""@en . + +as:Object a owl:Class ; + rdfs:label "Object"@en . + +as:Offer a owl:Class ; + rdfs:label "Offer"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Offer something to someone or something"@en . + +as:Page a owl:Class ; + rdfs:label "Page"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "A Web Page"@en . + +as:Person a owl:Class ; + rdfs:label "Person"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "A Person"@en . + +as:Organization a owl:Class ; + rdfs:label "Organization"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "An Organization"@en . + +as:Profile a owl:Class ; + rdfs:label "Profile"@en; + rdfs:subClassOf as:Object ; + rdfs:comment "A Profile Document"@en . + +as:Place a owl:Class ; + rdfs:label "Place"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "A physical or logical location"@en . + +as:Question a owl:Class ; + rdfs:label "Question"@en; + rdfs:subClassOf as:IntransitiveActivity ; + rdfs:comment "A question of any sort."@en . + +as:Reject a owl:Class ; + rdfs:label "Reject"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "Actor rejects the Object"@en . + +as:Remove a owl:Class ; + rdfs:label "Remove"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Remove Something"@en . + +as:Service a owl:Class ; + rdfs:label "Service"@en ; + rdfs:subClassOf as:Object ; + rdfs:comment "A service provided by some entity"@en . + +as:TentativeAccept a owl:Class ; + rdfs:label "TentativeAccept"@en ; + rdfs:subClassOf as:Accept ; + rdfs:comment "Actor tentatively accepts the Object"@en . + +as:TentativeReject a owl:Class ; + rdfs:label "TentativeReject"@en ; + rdfs:subClassOf as:Reject ; + rdfs:comment "Actor tentatively rejects the object"@en . + +as:Tombstone a owl:Class ; + rdfs:label "Tombstone"@en; + rdfs:subClassOf as:Object ; + rdfs:comment "A placeholder for a deleted object"@en . + +as:Undo a owl:Class ; + rdfs:label "Undo"@en ; + rdfs:subClassOf as:Activity ; + rdfs:comment "To Undo Something. This would typically be used to indicate that a previous Activity has been undone."@en . + +as:Update a owl:Class ; + rdfs:label "Update"@en ; + rdfs:comment "To Update/Modify Something"@en ; + rdfs:subClassOf as:Activity . + +as:Video a owl:Class ; + rdfs:label "Video"@en ; + rdfs:comment "A Video document of any kind."@en ; + rdfs:subClassOf as:Document . + +rdf:nil a as:OrderedItems . diff --git a/linkml_activitypub/_version.py b/linkml_activitypub/_version.py new file mode 100644 index 0000000..7edc9ee --- /dev/null +++ b/linkml_activitypub/_version.py @@ -0,0 +1,7 @@ +from importlib.metadata import version, PackageNotFoundError + +try: + __version__ = version(__name__) +except PackageNotFoundError: + # package not installed + __version__ = "0.0.0" diff --git a/linkml_activitypub/activitypub.yaml b/linkml_activitypub/activitypub.yaml new file mode 100644 index 0000000..ba2fdc3 --- /dev/null +++ b/linkml_activitypub/activitypub.yaml @@ -0,0 +1,673 @@ +id: https://github.com/p2p_ld/linkml-activitypub +name: linkml-activitypub +title: linkml-activitypub +description: |- + LinkML representation of Activitypub (ActivityStreams) Schema +license: GNU GPL v3.0 +see_also: + - https://linkml-activitypub.readthedocs.io + - https://github.com/p2p_ld/linkml-activitypub + +imports: +- linkml:types +prefixes: + as: http://www.w3.org/ns/activitystreams# + linkml: https://w3id.org/linkml/ + owl: http://www.w3.org/2002/07/owl# + rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# + xml: http://www.w3.org/XML/1998/namespace + xsd: http://www.w3.org/2001/XMLSchema# + rdfs: http://www.w3.org/2000/01/rdf-schema# +default_prefix: as + +types: + langString: + +classes: + Object: + slots: + - attachment + - attachments + - attributedTo + - audience + - author + - bcc + - bto + - cc + - content + - context + - generator + - icon + - image + - inReplyTo + - location + - name + - preview + - provider + - replies + - summary + - tag + - tags + - to + - url + - downstreamDuplicates + - duration + - endTime + - id + - mediaType + - objectType + - published + - rating + - startTime + - updated + - upstreamDuplicates + class_uri: as:Object + + + Property: + class_uri: rdf:Property + Statement: + class_uri: rdf:Statement + Accept: + comments: + - Actor accepts the Object@en + is_a: Activity + class_uri: as:Accept + Activity: + comments: + - An Object representing some form of Action that has been taken@en + is_a: Object + slots: + - actor + - instrument + - object + - origin + - result + - target + - verb + class_uri: as:Activity + Add: + comments: + - To Add an Object or Link to Something@en + is_a: Activity + class_uri: as:Add + Announce: + comments: + - Actor announces the object to the target@en + is_a: Activity + class_uri: as:Announce + Application: + comments: + - Represents a software application of any sort@en + is_a: Object + class_uri: as:Application + Arrive: + comments: + - To Arrive Somewhere (can be used, for instance, to indicate that a particular + entity is currently located somewhere, e.g. a \"check-in\")@en + is_a: IntransitiveActivity + class_uri: as:Arrive + Article: + comments: + - A written work. Typically several paragraphs long. For example, a blog post + or a news article.@en + is_a: Object + class_uri: as:Article + Audio: + comments: + - An audio file@en + is_a: Document + class_uri: as:Audio + Block: + is_a: Ignore + class_uri: as:Block + Collection: + comments: + - An ordered or unordered collection of Objects or Links@en + is_a: Object + slots: + - current + - first + - items + - last + - totalItems + class_uri: as:Collection + CollectionPage: + comments: + - A subset of items from a Collection@en + is_a: Collection + slots: + - next + - partOf + - prev + class_uri: as:CollectionPage + Create: + comments: + - To Create Something@en + is_a: Activity + class_uri: as:Create + Delete: + comments: + - To Delete Something@en + is_a: Activity + class_uri: as:Delete + Dislike: + comments: + - The actor dislikes the object@en + is_a: Activity + class_uri: as:Dislike + Document: + comments: + - Represents a digital document/file of any sort@en + is_a: Object + class_uri: as:Document + Event: + comments: + - An Event of any kind@en + is_a: Object + class_uri: as:Event + Flag: + comments: + - To flag something (e.g. flag as inappropriate, flag as spam, etc)@en + is_a: Activity + class_uri: as:Flag + Follow: + comments: + - To Express Interest in Something@en + is_a: Activity + class_uri: as:Follow + Group: + comments: + - A Group of any kind.@en + is_a: Object + class_uri: as:Group + Ignore: + comments: + - Actor is ignoring the Object@en + is_a: Activity + class_uri: as:Ignore + Image: + comments: + - An Image file@en + is_a: Document + class_uri: as:Image + IntransitiveActivity: + comments: + - An Activity that has no direct object@en + is_a: Activity + class_uri: as:IntransitiveActivity + Invite: + comments: + - To invite someone or something to something@en + is_a: Offer + class_uri: as:Invite + Join: + comments: + - To Join Something@en + is_a: Activity + class_uri: as:Join + Leave: + comments: + - To Leave Something@en + is_a: Activity + class_uri: as:Leave + Like: + comments: + - To Like Something@en + is_a: Activity + class_uri: as:Like + Link: + comments: + - Represents a qualified reference to another resource. Patterned after the RFC5988 + Web Linking Model@en + slots: + - attributedTo + - name + - preview + - height + - href + - hreflang + - id + - mediaType + - rel + - width + class_uri: as:Link + Listen: + comments: + - The actor listened to the object@en + is_a: Activity + class_uri: as:Listen + Mention: + comments: + - A specialized Link that represents an @mention@en + is_a: Link + class_uri: as:Mention + Move: + comments: + - The actor is moving the object. The target specifies where the object is moving + to. The origin specifies where the object is moving from. + is_a: Activity + class_uri: as:Move + Note: + comments: + - A Short note, typically less than a single paragraph. A \"tweet\" is an example, + or a \"status update\"@en + is_a: Object + class_uri: as:Note + + Offer: + comments: + - To Offer something to someone or something@en + is_a: Activity + class_uri: as:Offer + OrderedItems: + class_uri: as:OrderedItems + Organization: + comments: + - An Organization@en + is_a: Object + class_uri: as:Organization + Page: + comments: + - A Web Page@en + is_a: Object + class_uri: as:Page + Person: + comments: + - A Person@en + is_a: Object + class_uri: as:Person + Place: + comments: + - A physical or logical location@en + is_a: Object + slots: + - accuracy + - altitude + - latitude + - longitude + - radius + - units + class_uri: as:Place + Profile: + comments: + - A Profile Document@en + is_a: Object + slots: + - describes + class_uri: as:Profile + Question: + comments: + - A question of any sort.@en + is_a: IntransitiveActivity + slots: + - anyOf + - oneOf + class_uri: as:Question + Read: + comments: + - The actor read the object@en + is_a: Activity + class_uri: as:Read + Reject: + comments: + - Actor rejects the Object@en + is_a: Activity + class_uri: as:Reject + Relationship: + comments: + - Represents a Social Graph relationship between two Individuals (indicated by + the 'a' and 'b' properties)@en + is_a: Object + slots: + - object + - relationship + - subject + class_uri: as:Relationship + Remove: + comments: + - To Remove Something@en + is_a: Activity + class_uri: as:Remove + Service: + comments: + - A service provided by some entity@en + is_a: Object + class_uri: as:Service + TentativeAccept: + comments: + - Actor tentatively accepts the Object@en + is_a: Accept + class_uri: as:TentativeAccept + TentativeReject: + comments: + - Actor tentatively rejects the object@en + is_a: Reject + class_uri: as:TentativeReject + Tombstone: + comments: + - A placeholder for a deleted object@en + is_a: Object + slots: + - formerType + - deleted + class_uri: as:Tombstone + Travel: + comments: + - The actor is traveling to the target. The origin specifies where the actor is + traveling from. + is_a: IntransitiveActivity + class_uri: as:Travel + Undo: + comments: + - To Undo Something. This would typically be used to indicate that a previous + Activity has been undone.@en + is_a: Activity + class_uri: as:Undo + Update: + comments: + - To Update/Modify Something@en + is_a: Activity + class_uri: as:Update + Video: + comments: + - A Video document of any kind.@en + is_a: Document + class_uri: as:Video + View: + comments: + - The actor viewed the object@en + is_a: Activity + class_uri: as:View + + +slots: + predicate: + slot_uri: rdf:predicate + multivalued: true + subject: + comments: + - On a Relationship object, identifies the subject. e.g. when saying \"John is + connected to Sally\", 'subject' refers to 'John'@en + is_a: subject + slot_uri: as:subject + multivalued: true + actor: + comments: + - Subproperty of as:attributedTo that identifies the primary actor@en + is_a: attributedTo + slot_uri: as:actor + multivalued: true + anyOf: + comments: + - Describes a possible inclusive answer or option for a question.@en + slot_uri: as:anyOf + multivalued: true + attachment: + slot_uri: as:attachment + multivalued: true + attachments: + slot_uri: as:attachments + multivalued: true + attributedTo: + comments: + - Identifies an entity to which an object is attributed@en + slot_uri: as:attributedTo + multivalued: true + audience: + slot_uri: as:audience + multivalued: true + author: + comments: + - Identifies the author of an object. Deprecated. Use as:attributedTo instead@en + is_a: attributedTo + slot_uri: as:author + multivalued: true + bcc: + slot_uri: as:bcc + multivalued: true + bto: + slot_uri: as:bto + multivalued: true + cc: + slot_uri: as:cc + multivalued: true + context: + comments: + - Specifies the context within which an object exists or an activity was performed@en + slot_uri: as:context + multivalued: true + current: + slot_uri: as:current + multivalued: true + describes: + comments: + - On a Profile object, describes the object described by the profile@en + slot_uri: as:describes + multivalued: true + range: Object + first: + slot_uri: as:first + multivalued: true + formerType: + comments: + - On a Tombstone object, describes the former type of the deleted object@en + slot_uri: as:formerType + multivalued: true + range: Object + generator: + slot_uri: as:generator + multivalued: true + icon: + slot_uri: as:icon + multivalued: true + image: + slot_uri: as:image + multivalued: true + inReplyTo: + slot_uri: as:inReplyTo + multivalued: true + instrument: + comments: + - Indentifies an object used (or to be used) to complete an activity@en + slot_uri: as:instrument + multivalued: true + items: + slot_uri: as:items + multivalued: true + last: + slot_uri: as:last + multivalued: true + location: + slot_uri: as:location + multivalued: true + next: + slot_uri: as:next + multivalued: true + object: + slot_uri: as:object + multivalued: true + oneOf: + comments: + - Describes a possible exclusive answer or option for a question.@en + slot_uri: as:oneOf + multivalued: true + origin: + comments: + - For certain activities, specifies the entity from which the action is directed.@en + slot_uri: as:origin + multivalued: true + partOf: + slot_uri: as:partOf + multivalued: true + prev: + slot_uri: as:prev + multivalued: true + preview: + slot_uri: as:preview + multivalued: true + provider: + slot_uri: as:provider + multivalued: true + relationship: + comments: + - On a Relationship object, describes the type of relationship@en + is_a: predicate + slot_uri: as:relationship + multivalued: true + range: Property + replies: + slot_uri: as:replies + multivalued: true + range: Collection + result: + slot_uri: as:result + multivalued: true + tag: + slot_uri: as:tag + multivalued: true + tags: + slot_uri: as:tags + multivalued: true + target: + slot_uri: as:target + multivalued: true + to: + slot_uri: as:to + multivalued: true + url: + comments: + - Specifies a link to a specific representation of the Object@en + slot_uri: as:url + multivalued: true + accuracy: + comments: + - Specifies the accuracy around the point established by the longitude and latitude@en + slot_uri: as:accuracy + multivalued: true + altitude: + comments: + - The altitude of a place@en + slot_uri: as:altitude + multivalued: true + content: + comments: + - The content of the object.@en + slot_uri: as:content + multivalued: true + deleted: + comments: + - Specifies the date and time the object was deleted@en + slot_uri: as:deleted + multivalued: true + downstreamDuplicates: + slot_uri: as:downstreamDuplicates + multivalued: true + duration: + comments: + - The duration of the object@en + slot_uri: as:duration + multivalued: true + endTime: + comments: + - The ending time of the object@en + slot_uri: as:endTime + multivalued: true + height: + comments: + - The display height expressed as device independent pixels@en + slot_uri: as:height + multivalued: true + href: + comments: + - The target URI of the Link@en + slot_uri: as:href + multivalued: true + hreflang: + comments: + - A hint about the language of the referenced resource@en + slot_uri: as:hreflang + multivalued: true + id: + slot_uri: as:id + multivalued: true + latitude: + comments: + - The latitude@en + slot_uri: as:latitude + multivalued: true + longitude: + comments: + - The longitude@en + slot_uri: as:longitude + multivalued: true + mediaType: + comments: + - The MIME Media Type@en + slot_uri: as:mediaType + multivalued: true + name: + slot_uri: rdfs:name + multivalued: true + objectType: + slot_uri: as:objectType + multivalued: true + published: + comments: + - Specifies the date and time the object was published@en + slot_uri: as:published + multivalued: true + radius: + comments: + - Specifies a radius around the point established by the longitude and latitude@en + slot_uri: as:radius + multivalued: true + rating: + comments: + - A numeric rating (>= 0.0, <= 5.0) for the object@en + slot_uri: as:rating + multivalued: true + rel: + comments: + - The RFC 5988 or HTML5 Link Relation associated with the Link@en + slot_uri: as:rel + multivalued: true + startTime: + comments: + - The starting time of the object@en + slot_uri: as:startTime + multivalued: true + summary: + comments: + - A short summary of the object@en + slot_uri: as:summary + multivalued: true + totalItems: + comments: + - The total number of items in a logical collection@en + slot_uri: as:totalItems + multivalued: true + units: + comments: + - Identifies the unit of measurement used by the radius, altitude and accuracy + properties. The value can be expressed either as one of a set of predefined + units or as a well-known common URI that identifies units.@en + slot_uri: as:units + multivalued: true + updated: + comments: + - Specifies when the object was last updated@en + slot_uri: as:updated + multivalued: true + upstreamDuplicates: + slot_uri: as:upstreamDuplicates + multivalued: true + verb: + slot_uri: as:verb + multivalued: true + width: + comments: + - Specifies the preferred display width of the content, expressed in terms of + device independent pixels.@en + slot_uri: as:width + multivalued: true diff --git a/linkml_activitypub/datamodel/__init__.py b/linkml_activitypub/datamodel/__init__.py new file mode 100644 index 0000000..4350d7a --- /dev/null +++ b/linkml_activitypub/datamodel/__init__.py @@ -0,0 +1 @@ +from .activitystreams import * diff --git a/linkml_activitypub/datamodel/activitypub.py b/linkml_activitypub/datamodel/activitypub.py new file mode 100644 index 0000000..52b2278 --- /dev/null +++ b/linkml_activitypub/datamodel/activitypub.py @@ -0,0 +1,632 @@ +# Auto generated from activitypub.yaml by pythongen.py version: 0.9.0 +# Generation date: 2022-09-06T10:01:50 +# Schema: my_datamodel +# +# id: https://w3id.org/my_org/my_datamodel +# description: Enter a detailed description of your project here +# license: https://creativecommons.org/publicdomain/zero/1.0/ + +import dataclasses +import re +from jsonasobj2 import as_dict +from typing import Optional, List, Union, Dict, ClassVar, Any +from dataclasses import dataclass +from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue + +from linkml_runtime.utils.slot import Slot +from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str +from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs +from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from rdflib import URIRef +from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.utils.metamodelcore import Bool, XSDDate + +metamodel_version = "1.7.0" +version = None + +# Overwrite dataclasses _init_fn to add **kwargs in __init__ +dataclasses._init_fn = dataclasses_init_fn_with_kwargs + +# Namespaces +PATO = CurieNamespace('PATO', + 'http://purl.obolibrary.org/obo/PATO_') +BIOLINK = CurieNamespace('biolink', + 'https://w3id.org/biolink/') +FAMREL = CurieNamespace('famrel', + 'http://example.org/famrel/') +LINKML = CurieNamespace('linkml', + 'https://w3id.org/linkml/') +MY_DATAMODEL = CurieNamespace('my_datamodel', + 'https://w3id.org/my_org/my_datamodel') +PROV = CurieNamespace('prov', + 'http://www.w3.org/ns/prov#') +SCHEMA = CurieNamespace('schema', + 'http://schema.org/') +DEFAULT_ = MY_DATAMODEL + +# Types + + +# Class references +class NamedThingId(extended_str): + pass + + +class PersonId(NamedThingId): + pass + + +class OrganizationId(NamedThingId): + pass + + +@dataclass +class Registry(YAMLRoot): + """ + Top level data container + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = MY_DATAMODEL.Registry + class_class_curie: ClassVar[str] = "my_datamodel:Registry" + class_name: ClassVar[str] = "Registry" + class_model_uri: ClassVar[URIRef] = MY_DATAMODEL.Registry + + persons: Optional[Union[ + Dict[Union[str, PersonId], Union[dict, "Person"]], + List[Union[dict, "Person"]] + ]] = empty_dict() + + organizations: Optional[Union[ + Dict[Union[str, OrganizationId], Union[dict, "Organization"]], + List[Union[dict, "Organization"]] + ]] = empty_dict() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + self._normalize_inlined_as_list( + slot_name="persons", + slot_type=Person, + key_name="id", + keyed=True + ) + + self._normalize_inlined_as_list( + slot_name="organizations", + slot_type=Organization, + key_name="id", + keyed=True + ) + + super().__post_init__(**kwargs) + + +@dataclass +class NamedThing(YAMLRoot): + """ + A generic grouping for any identifiable entity + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = MY_DATAMODEL.NamedThing + class_class_curie: ClassVar[str] = "my_datamodel:NamedThing" + class_name: ClassVar[str] = "NamedThing" + class_model_uri: ClassVar[URIRef] = MY_DATAMODEL.NamedThing + + id: Union[str, NamedThingId] = None + name: Optional[str] = None + description: Optional[str] = None + image: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, NamedThingId): + self.id = NamedThingId(self.id) + + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) + + if self.description is not None \ + and not isinstance(self.description, str): + self.description = str(self.description) + + if self.image is not None and not isinstance(self.image, str): + self.image = str(self.image) + + super().__post_init__(**kwargs) + + +@dataclass +class Person(NamedThing): + """ + A person (alive, dead, undead, or fictional). + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = SCHEMA.Person + class_class_curie: ClassVar[str] = "schema:Person" + class_name: ClassVar[str] = "Person" + class_model_uri: ClassVar[URIRef] = MY_DATAMODEL.Person + + id: Union[str, PersonId] = None + primary_email: Optional[str] = None + birth_date: Optional[str] = None + age_in_years: Optional[int] = None + current_address: Optional[Union[dict, "Address"]] = None + has_familial_relationships: Optional[Union[ + Union[dict, "FamilialRelationship"], + List[Union[dict, "FamilialRelationship"]] + ]] = empty_list() + aliases: Optional[Union[str, List[str]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, PersonId): + self.id = PersonId(self.id) + + if self.primary_email is not None \ + and not isinstance(self.primary_email, str): + self.primary_email = str(self.primary_email) + + if self.birth_date is not None \ + and not isinstance(self.birth_date, str): + self.birth_date = str(self.birth_date) + + if self.age_in_years is not None \ + and not isinstance(self.age_in_years, int): + self.age_in_years = int(self.age_in_years) + + if self.current_address is not None \ + and not isinstance(self.current_address, Address): + self.current_address = Address(**as_dict(self.current_address)) + + if not isinstance(self.has_familial_relationships, list): + self.has_familial_relationships = [self.has_familial_relationships] \ + if self.has_familial_relationships is not None \ + else [] + self.has_familial_relationships = [ + v if isinstance(v, FamilialRelationship) + else FamilialRelationship(**as_dict(v)) + for v in self.has_familial_relationships] + + if not isinstance(self.aliases, list): + self.aliases = [self.aliases] if self.aliases is not None else [] + self.aliases = [v if isinstance(v, str) else str(v) + for v in self.aliases] + + super().__post_init__(**kwargs) + + +@dataclass +class HasAliases(YAMLRoot): + """ + A mixin applied to any class that can have aliases/alternateNames + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = MY_DATAMODEL.HasAliases + class_class_curie: ClassVar[str] = "my_datamodel:HasAliases" + class_name: ClassVar[str] = "HasAliases" + class_model_uri: ClassVar[URIRef] = MY_DATAMODEL.HasAliases + + aliases: Optional[Union[str, List[str]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if not isinstance(self.aliases, list): + self.aliases = [self.aliases] if self.aliases is not None else [] + self.aliases = [v if isinstance(v, str) else str(v) + for v in self.aliases] + + super().__post_init__(**kwargs) + + +@dataclass +class Organization(NamedThing): + """ + An organization such as a company or university + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = SCHEMA.Organization + class_class_curie: ClassVar[str] = "schema:Organization" + class_name: ClassVar[str] = "Organization" + class_model_uri: ClassVar[URIRef] = MY_DATAMODEL.Organization + + id: Union[str, OrganizationId] = None + mission_statement: Optional[str] = None + founding_date: Optional[str] = None + aliases: Optional[Union[str, List[str]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.id): + self.MissingRequiredField("id") + if not isinstance(self.id, OrganizationId): + self.id = OrganizationId(self.id) + + if self.mission_statement is not None \ + and not isinstance(self.mission_statement, str): + self.mission_statement = str(self.mission_statement) + + if self.founding_date is not None \ + and not isinstance(self.founding_date, str): + self.founding_date = str(self.founding_date) + + if not isinstance(self.aliases, list): + self.aliases = [self.aliases] if self.aliases is not None else [] + self.aliases = [v if isinstance(v, str) else str(v) + for v in self.aliases] + + super().__post_init__(**kwargs) + + +@dataclass +class Address(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = SCHEMA.PostalAddress + class_class_curie: ClassVar[str] = "schema:PostalAddress" + class_name: ClassVar[str] = "Address" + class_model_uri: ClassVar[URIRef] = MY_DATAMODEL.Address + + street: Optional[str] = None + city: Optional[str] = None + postal_code: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.street is not None and not isinstance(self.street, str): + self.street = str(self.street) + + if self.city is not None and not isinstance(self.city, str): + self.city = str(self.city) + + if self.postal_code is not None \ + and not isinstance(self.postal_code, str): + self.postal_code = str(self.postal_code) + + super().__post_init__(**kwargs) + + +@dataclass +class Relationship(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = MY_DATAMODEL.Relationship + class_class_curie: ClassVar[str] = "my_datamodel:Relationship" + class_name: ClassVar[str] = "Relationship" + class_model_uri: ClassVar[URIRef] = MY_DATAMODEL.Relationship + + started_at_time: Optional[Union[str, XSDDate]] = None + ended_at_time: Optional[Union[str, XSDDate]] = None + related_to: Optional[str] = None + type: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.started_at_time is not None \ + and not isinstance(self.started_at_time, XSDDate): + self.started_at_time = XSDDate(self.started_at_time) + + if self.ended_at_time is not None \ + and not isinstance(self.ended_at_time, XSDDate): + self.ended_at_time = XSDDate(self.ended_at_time) + + if self.related_to is not None \ + and not isinstance(self.related_to, str): + self.related_to = str(self.related_to) + + if self.type is not None and not isinstance(self.type, str): + self.type = str(self.type) + + super().__post_init__(**kwargs) + + +@dataclass +class FamilialRelationship(Relationship): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = MY_DATAMODEL.FamilialRelationship + class_class_curie: ClassVar[str] = "my_datamodel:FamilialRelationship" + class_name: ClassVar[str] = "FamilialRelationship" + class_model_uri: ClassVar[URIRef] = MY_DATAMODEL.FamilialRelationship + + type: Union[str, "FamilialRelationshipType"] = None + related_to: Union[str, PersonId] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self._is_empty(self.type): + self.MissingRequiredField("type") + if not isinstance(self.type, FamilialRelationshipType): + self.type = FamilialRelationshipType(self.type) + + if self._is_empty(self.related_to): + self.MissingRequiredField("related_to") + if not isinstance(self.related_to, PersonId): + self.related_to = PersonId(self.related_to) + + super().__post_init__(**kwargs) + + +# Enumerations +class PersonStatus(EnumDefinitionImpl): + + ALIVE = PermissibleValue(text="ALIVE", + description="the person is living", + meaning=PATO["0001421"]) + DEAD = PermissibleValue(text="DEAD", + description="the person is deceased", + meaning=PATO["0001422"]) + UNKNOWN = PermissibleValue(text="UNKNOWN", + description="the vital status is not known") + + _defn = EnumDefinition( + name="PersonStatus", + ) + + +class FamilialRelationshipType(EnumDefinitionImpl): + + SIBLING_OF = PermissibleValue(text="SIBLING_OF", + meaning=FAMREL["01"]) + PARENT_OF = PermissibleValue(text="PARENT_OF", + meaning=FAMREL["02"]) + CHILD_OF = PermissibleValue(text="CHILD_OF", + meaning=FAMREL["01"]) + + _defn = EnumDefinition( + name="FamilialRelationshipType", + ) + + +# Slots +class slots: + pass + + +slots.id = Slot( + uri=SCHEMA.identifier, + name="id", + curie=SCHEMA.curie('identifier'), + model_uri=MY_DATAMODEL.id, + domain=None, + range=URIRef +) + +slots.name = Slot( + uri=SCHEMA.name, + name="name", + curie=SCHEMA.curie('name'), + model_uri=MY_DATAMODEL.name, + domain=None, + range=Optional[str] +) + +slots.description = Slot( + uri=SCHEMA.description, + name="description", + curie=SCHEMA.curie('description'), + model_uri=MY_DATAMODEL.description, + domain=None, + range=Optional[str] +) + +slots.image = Slot( + uri=SCHEMA.image, + name="image", + curie=SCHEMA.curie('image'), + model_uri=MY_DATAMODEL.image, + domain=None, + range=Optional[str] +) + +slots.primary_email = Slot( + uri=SCHEMA.email, + name="primary_email", + curie=SCHEMA.curie('email'), + model_uri=MY_DATAMODEL.primary_email, + domain=None, + range=Optional[str] +) + +slots.birth_date = Slot( + uri=SCHEMA.birthDate, + name="birth_date", + curie=SCHEMA.curie('birthDate'), + model_uri=MY_DATAMODEL.birth_date, + domain=None, + range=Optional[str] +) + +slots.employed_at = Slot( + uri=MY_DATAMODEL.employed_at, + name="employed_at", + curie=MY_DATAMODEL.curie('employed_at'), + model_uri=MY_DATAMODEL.employed_at, + domain=None, + range=Optional[Union[str, OrganizationId]] +) + +slots.is_current = Slot( + uri=MY_DATAMODEL.is_current, + name="is_current", + curie=MY_DATAMODEL.curie('is_current'), + model_uri=MY_DATAMODEL.is_current, + domain=None, + range=Optional[Union[bool, Bool]] +) + +slots.has_familial_relationships = Slot( + uri=MY_DATAMODEL.has_familial_relationships, + name="has_familial_relationships", + curie=MY_DATAMODEL.curie('has_familial_relationships'), + model_uri=MY_DATAMODEL.has_familial_relationships, + domain=None, + range=Optional[Union[ + Union[dict, FamilialRelationship], + List[Union[dict, FamilialRelationship]] + ]] +) + +slots.current_address = Slot( + uri=MY_DATAMODEL.current_address, name="current_address", + curie=MY_DATAMODEL.curie('current_address'), + model_uri=MY_DATAMODEL.current_address, domain=None, + range=Optional[Union[dict, Address]] +) + +slots.age_in_years = Slot( + uri=MY_DATAMODEL.age_in_years, name="age_in_years", + curie=MY_DATAMODEL.curie('age_in_years'), + model_uri=MY_DATAMODEL.age_in_years, domain=None, range=Optional[int] +) + +slots.related_to = Slot( + uri=MY_DATAMODEL.related_to, + name="related_to", + curie=MY_DATAMODEL.curie('related_to'), + model_uri=MY_DATAMODEL.related_to, + domain=None, + range=Optional[str] +) + +slots.type = Slot( + uri=MY_DATAMODEL.type, + name="type", + curie=MY_DATAMODEL.curie('type'), + model_uri=MY_DATAMODEL.type, + domain=None, + range=Optional[str] +) + +slots.street = Slot( + uri=MY_DATAMODEL.street, + name="street", + curie=MY_DATAMODEL.curie('street'), + model_uri=MY_DATAMODEL.street, + domain=None, + range=Optional[str] +) + +slots.city = Slot( + uri=MY_DATAMODEL.city, + name="city", + curie=MY_DATAMODEL.curie('city'), + model_uri=MY_DATAMODEL.city, + domain=None, + range=Optional[str] +) + +slots.mission_statement = Slot( + uri=MY_DATAMODEL.mission_statement, + name="mission_statement", + curie=MY_DATAMODEL.curie('mission_statement'), + model_uri=MY_DATAMODEL.mission_statement, + domain=None, + range=Optional[str] +) + +slots.founding_date = Slot( + uri=MY_DATAMODEL.founding_date, + name="founding_date", + curie=MY_DATAMODEL.curie('founding_date'), + model_uri=MY_DATAMODEL.founding_date, + domain=None, + range=Optional[str] +) + +slots.postal_code = Slot( + uri=MY_DATAMODEL.postal_code, + name="postal_code", + curie=MY_DATAMODEL.curie('postal_code'), + model_uri=MY_DATAMODEL.postal_code, + domain=None, + range=Optional[str] +) + +slots.started_at_time = Slot( + uri=PROV.startedAtTime, + name="started_at_time", + curie=PROV.curie('startedAtTime'), + model_uri=MY_DATAMODEL.started_at_time, + domain=None, + range=Optional[Union[str, XSDDate]] +) + +slots.ended_at_time = Slot( + uri=PROV.endedAtTime, + name="ended_at_time", + curie=PROV.curie('endedAtTime'), + model_uri=MY_DATAMODEL.ended_at_time, + domain=None, + range=Optional[Union[str, XSDDate]] +) + +slots.registry__persons = Slot( + uri=MY_DATAMODEL.persons, + name="registry__persons", + curie=MY_DATAMODEL.curie('persons'), + model_uri=MY_DATAMODEL.registry__persons, + domain=None, + range=Optional[Union[ + Dict[Union[str, PersonId], Union[dict, Person]], + List[Union[dict, Person]] + ]] +) + +slots.registry__organizations = Slot( + uri=MY_DATAMODEL.organizations, + name="registry__organizations", + curie=MY_DATAMODEL.curie('organizations'), + model_uri=MY_DATAMODEL.registry__organizations, + domain=None, + range=Optional[Union[ + Dict[Union[str, OrganizationId], Union[dict, Organization]], + List[Union[dict, Organization]] + ]] +) + +slots.hasAliases__aliases = Slot( + uri=MY_DATAMODEL.aliases, + name="hasAliases__aliases", + curie=MY_DATAMODEL.curie('aliases'), + model_uri=MY_DATAMODEL.hasAliases__aliases, + domain=None, + range=Optional[Union[str, List[str]]] +) + +slots.related_to = Slot( + uri=MY_DATAMODEL.related_to, + name="related to", + curie=MY_DATAMODEL.curie('related_to'), + model_uri=MY_DATAMODEL.related_to, + domain=None, + range=Union[str, PersonId] +) + +slots.Person_primary_email = Slot( + uri=SCHEMA.email, + name="Person_primary_email", + curie=SCHEMA.curie('email'), + model_uri=MY_DATAMODEL.Person_primary_email, + domain=Person, + range=Optional[str], + pattern=re.compile(r'^\S+@[\S+\.]+\S+') +) + +slots.FamilialRelationship_type = Slot( + uri=MY_DATAMODEL.type, + name="FamilialRelationship_type", + curie=MY_DATAMODEL.curie('type'), + model_uri=MY_DATAMODEL.FamilialRelationship_type, + domain=FamilialRelationship, + range=Union[str, "FamilialRelationshipType"] +) + +slots.FamilialRelationship_related_to = Slot( + uri=MY_DATAMODEL.related_to, + name="FamilialRelationship_related to", + curie=MY_DATAMODEL.curie('related_to'), + model_uri=MY_DATAMODEL.FamilialRelationship_related_to, + domain=FamilialRelationship, + range=Union[str, PersonId] +) diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..e095e56 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,25 @@ +--- +site_name: "linkml_activitypub" +theme: + name: material + # palette: + # scheme: slate + # primary: cyan + features: + - content.tabs.link +plugins: + - search + - mermaid2 +nav: + # - Home: home.md + - Index: index.md + - About: about.md +site_url: https://linkml-activitypub.readthedocs.io/ +repo_url: https://github.com/p2p_ld/linkml-activitypub + +# Uncomment this block to enable use of Google Analytics. +# Replace the property value with your own ID. +# extra: +# analytics: +# provider: google +# property: G-XXXXXXXXXX diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8491abf --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,30 @@ +[tool.poetry] +name = "linkml-activitypub" +version = "0.1.0" +description = "LinkML representation of ActivityStreams Schema" +authors = ["Jonny Saunders "] +license = "GNU GPL v3.0" +readme = "README.md" +include = ["README.md", "linkml_activitypub/activitypub.yaml", "generated"] + +[tool.poetry.dependencies] +python = "^3.9" +linkml-runtime = "^1.1.24" + +[tool.poetry-dynamic-versioning] +enable = true +vcs = "git" +style = "pep440" + +[tool.poetry.dev-dependencies] +linkml = "^1.3.5" +mkdocs-material = "^8.2.8" +mkdocs-mermaid2-plugin = "^0.6.0" +schemasheets = "^0.1.14" + +[build-system] +requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning"] +build-backend = "poetry_dynamic_versioning.backend" + +[tool.poetry.extras] +docs = ["linkml", "mkdocs-material"] \ No newline at end of file