ResourceStore which uses a DataAccessor for backend access.

The DataAccessor interface provides elementary store operations such as read and write. This DataAccessorBasedStore uses those elementary store operations to implement the more high-level ResourceStore contact, abstracting all common functionality such that new stores can be added by implementing the more simple DataAccessor contract. DataAccessorBasedStore thereby provides behaviours for reuse across different stores, such as:

  • Converting container metadata to data
  • Converting slug to URI
  • Checking if addResource target is a container
  • Checking if no containment triples are written to a container
  • etc.

Currently "metadata" is seen as something that is not directly accessible. That means that a consumer can't write directly to the metadata of a resource, only indirectly through headers. (Except for containers where data and metadata overlap).

The one thing this store does not take care of (yet?) are containment triples for containers

Work has been done to minimize the number of required calls to the DataAccessor, but the main disadvantage is that sometimes multiple calls are required where a specific store might only need one.


  • DataAccessorBasedStore




accessor: DataAccessor
auxiliaryStrategy: AuxiliaryStrategy
identifierStrategy: IdentifierStrategy
logger: Logger = ...
metadataStrategy: AuxiliaryStrategy


  • Clean http Slug to be compatible with the server. Makes sure there are no unwanted characters e.g.: cleanslug('&%26') returns '%26%26'


    • slug: string

      the slug to clean

    Returns string

  • Checks in a list of types if any of them match a Container type.


    • rdfTypes: Term[]

    Returns boolean

  • Validates if the slug and headers are valid. Errors if slug exists, ends on slash, but ContainerType Link header is NOT present


    • isContainer: boolean

      Is the slug supposed to represent a container?

    • Optional slug: string

      Is the requested slug (if any).

    Returns void

  • Write the given resource to the DataAccessor. Metadata will be updated with necessary triples. In case of containers handleContainerData will be used to verify the data.


    Identifiers of resources that were possibly modified.


    • identifier: ResourceIdentifier

      Identifier of the resource.

    • representation: Representation

      Corresponding Representation.

    • isContainer: boolean

      Is the incoming resource a container?

    • createContainers: boolean

      Should parent containers (potentially) be created?

    • exists: boolean

      If the resource already exists.

    Returns Promise<ChangeMap>