diff --git a/index.html b/index.html index b6053bc..413e869 100644 --- a/index.html +++ b/index.html @@ -108,7 +108,7 @@

A conforming Fedora server is a conforming [[!LDP]] 1.0 server except where described in this document that also follows the rules defined by Fedora in , - , , , and . + , , , and .

@@ -712,101 +712,79 @@

Inheritance

-
-

Messaging

+
+

Notifications

Introduction

- This section defines when messages are emitted by a Fedora - implementation, the minimal set of data contained in those messages and how - those data are serialized. These messages may occur synchronously or asynchronously - with the API operations that cause them to be emitted. They are typically used to - support external integrations. The structure of these messages draws upon the + This section defines when notifications are made available by a Fedora + implementation, the minimal set of data contained in these notifications and how + the data are serialized. Notifications may be emitted synchronously or asynchronously + with the API operations that cause them to be emitted. These notifications are typically + used to support external integrations. The structure of these notifications draws upon the existing [[activitystreams-core]] and [[ldn]] specifications. - An implementation is free to choose from any messaging technology so long as - the messages conform to what is described in the following sections. -

-
- -
-

Emitting Messages

-

- Any operation that causes the state of a resource to durably change MUST cause a - message to be emitted with a corresponding resource identifier. -

-

- A failed operation (HTTP 4xx or 5xx) MUST NOT emit any messages. -

-

- Messages MUST NOT be emitted until after any changes have been persisted to durable storage. + An implementation is free to choose from any transport technology so long as + the notifications conform to what is described in the following sections.

- Repository start, stop and configuration change operations MAY cause a message to be emitted. + Implementers should be aware that some operations cause multiple resources to change. + In these cases, there will be a corresponding notification describing each of the changes. + This is especially true for changes to containment or membership triples. This is also true + if a DELETE operation triggers changes in any contained resources.

- Any operation on an LDPR that results in a change to the containment or membership - triples of a distinct other LDPR MUST also trigger an event for that other LDPR. + Consumers of these notifications should not expect a strict ordering of + the events reported therein: the fact that a notification for Event A is received before + a notification for Event B should not imply that Event A occurred before Event B. + Implementations may choose to make further guarantees about ordering.

- Any operation that causes contained resources to change MUST trigger corresponding - events for those resources. For example, deleting a parent resource and thereby - changing the state of its child resources MUST result in corresponding events for - each of the contained child resources. -

-

- Non-normative: consumers of these messages should not expect a strict ordering of - the events reported therein: the fact that a message for Event A is received before - a message for Event B should not imply that Event A occurred before Event B. - Implementations may choose to make further guarantees about ordering. + According to the [[activitystreams-core]] specification, it is possible to collect multiple + events into a single notification. This specification makes no restriction on the use of + activity stream collections.

-
-

Message Data

-

- Emitted events MUST contain exactly one value for each of the following elements: -

-
    -
  • Resource Identifier: the IRI of the LDPR that was added, changed or removed.
  • -
  • Event identifier: a unique identifier for this event.
  • -
+
+

Notification Events

- A message MUST contain at least one value for the event type. Event types SHOULD be drawn - from the [[!activitystreams-vocabulary]]. -

-

- A message SHOULD contain at least one value for the agent operating on the resource. -

-

- A message SHOULD contain a collection of RDF types corresponding to the resource that - was changed. + For every resource whose state is changed as a result of an HTTP operation, + there MUST be a corresponding notification made available describing that change.

+
+ +
+

Notification Serialization

- If the corresponding LDPR includes an ldp:inbox, the location of - that inbox SHOULD be included in the message. + The notification serialization MUST conform to the [[!activitystreams-core]] specification.

- Messages MAY contain a timestamp marking the time the resource was added/modified/deleted. + Wherever possible, data SHOULD be expressed using the [[!activitystreams-vocabulary]].

- Messages SHOULD NOT contain the entire content of repository resources. + Each event described by a notification MUST contain:

-
- -
-

Message Serialization

+
    +
  • The IRI of the resource that was created, modified or deleted
  • +
  • The event type(s), corresponding to the HTTP operation
  • +

- The message body serialization MUST conform to the [[!activitystreams-core]] specification. + Each event described by a notification SHOULD contain:

+
    +
  • The agent(s) that caused the change to occur
  • +
  • The RDF type(s) of the resource that was changed
  • +
  • The location of the ldp:inbox for the resource that was changed, if such an inbox link exists
  • +

- Wherever possible, data SHOULD be expressed using the [[!activitystreams-vocabulary]]. + Notifications SHOULD NOT contain the entire content of repository resources.

-
+

Examples

-
-

A minimal message

+
+

A minimal notification

 {
@@ -827,8 +805,8 @@ 

A minimal message

-
-

A basic event with some additional detail

+
+

A basic notification with some additional detail

 {