Old Release

This documentation relates to an old version of DSpace, version 5.x. Looking for another version? See all documentation.

Support for DSpace 5 ended on January 1, 2023.  See Support for DSpace 5 and 6 is ending in 2023

SWORD (Simple Web-service Offering Repository Deposit) is a protocol that allows the remote deposit of items into repositories. DSpace implements the SWORD protocol via the 'sword' web application. The specification and further information can be found at http://swordapp.org/.

SWORD is based on the Atom Publish Protocol and allows service documents to be requested which describe the structure of the repository, and packages to be deposited.

Enabling SWORD v2 Server

To enable DSpace's SWORD v2 server, just make sure the [dspace]/webapps/swordv2/ web application is available from your Servlet Container (usually Tomcat).

Configuring SWORD v2 Server

Configuration File:

[dspace]/config/modules/swordv2-server.cfg

Property:

url

Example Value:

url = http://www.myu.ac.uk/swordv2

Informational Note:

The base url of the SWORD 2.0 system. This defaults to ${dspace.baseUrl}/swordv2 (where dspace.baseUrl is defined in your dspace.cfg file).

Property:

collection.url

Example Value:

collection.url = http://www.myu.ac.uk/swordv2/collection

Informational Note:

The base URL of the SWORD collection. This is the URL from which DSpace will construct the deposit location URLs for collections. This defaults to ${dspace.baseUrl}/swordv2/collection (where dspace.baseUrl is defined in your dspace.cfg file).

Property:

servicedocument.url

Example Value:

servicedocument.url = http://www.myu.ac.uk/swordv2/servicedocument

Informational Note:

The service document URL of the SWORD collection. The base URL of the SWORD service document. This is the URL from which DSpace will construct the service document location urls for the site, and for individual collections. This defaults to ${dspace.baseUrl}/swordv2/servicedocument (where dspace.baseUrl is defined in your dspace.cfg file).

Property:

accept-packaging.collection

Example Value:

accept-packaging.collection.METSDSpaceSIP = http://purl.org/net/sword/package/METSDSpaceSIP
accept-packaging.collection.SimpleZip = http://purl.org/net/sword/package/SimpleZip
accept-packaging.collection.Binary = http://purl.org/net/sword/package/Binary

Informational Note:

The accept packaging properties, along with their associated quality values where appropriate.

Package format information

  • METSDSpaceSIP: zipfile containing mets.xml file describing the resources packed together with it in the root of the zipfile.
  • Binary: Binary resource that should be taken in as-is, not unpacked
  • SimpleZip: Zip file that should be unpacked and each file in the zip should be ingested separately. No metadata provided/ingested.

Property:

accept-packaging.item

Example Value:

accept-packaging.item.METSDSpaceSIP = http://purl.org/net/sword/package/METSDSpaceSIP
accept-packaging.item.SimpleZip = http://purl.org/net/sword/package/SimpleZip
accept-packaging.item.Binary = http://purl.org/net/sword/package/Binary

Informational Note:

The accept packaging properties for items.   It is possible to configure this for specific collections by adding the handle of the collection to the setting, for example accept-packaging.collection.[handle].METSDSpaceSIP = http://purl.org/net/sword-types/METSDSpaceSIP

Package format information

  • METSDSpaceSIP: zipfile containing mets.xml file describing the resources packed together with it in the root of the zipfile.
  • Binary: Binary resource that should be taken in as-is, not unpacked
  • SimpleZip: Zip file that should be unpacked and each file in the zip should be ingested separately. No metadata provided/ingested.

Property:

accepts

Example Value:

accepts = application/zip, image/jpeg

Informational Note:

A comma-separated list of MIME types that SWORD will accept.  To accept all mimetypes, the value can be set to "*/*"

Property:

expose-communities

Example Value:

expose-communities = false

Informational Note:

Whether or not the server should expose a list of all the communities to a service document request.   As deposits can only be made into a collection, it is recommended to leave this set to false.

Property:

max-upload-size

Example Value:

max-upload-size = 0

Informational Note:

The maximum upload size of a package through the SWORD interface (measured in bytes).  This will be the combined size of all the files, metadata, and manifest file in a package - this is different to the maximum size of a single bitstream.

If this is set to 0, no maximum file size will be enforced. 

Property:

keep-original-package

Example Value:

keep-original-package = true

Informational Note:

Should DSpace store a copy of the orignal SWORD deposit package?

This will cause the deposit process to be slightly slower and for more disk to be used, however original files will be preserved.  It is recommended to leave this option enabled. 

Property:

bundle.name

Example Value:

bundle.name = SWORD

Informational Note:

The bundle name that SWORD should store incoming packages within if keep-original-package is set to true. 

Property:

bundle.deleted
Example Value:
bundle.deleted = DELETED

Informational Note:

The bundle name that SWORD should use to store deleted bitstreams if versions.keep is set to true. This will be used in the case that individual files are updated or removed via SWORD. If the entire Media Resource (files in the ORIGINAL bundle) is removed this will be backed up in its entirety in a bundle of its own

Property:

keep-package-on-fail

Example Value:

keep-package-on-fail = false

Informational Note:

In the event of package ingest failure, provide an option to store the package on the file system.  The default is false.  The location can be set using the failed-package-dir setting.

Property:

failed-package-dir

Example Value:

failed-package-dir = /dspace/upload

Informational Note:

If keep-package-on-fail is set to true, this is the location where the package would be stored. 

Property:

on-behalf-of.enable

Example Value:

on-behalf-of.enable = true

Informational Note:

Should DSpace accept mediated deposits?  See the SWORD specification for a detailed explanation of deposit On-Behalf-Of another user. 

Property:

on-behalf-of.update.mediators
Example Value:
on-behalf-of.update.mediators = admin@mydspace.edu, mediator@mydspace.edu
Informational Note:

Which user accounts are allowed to do updates on items which already exist in DSpace, on-behalf-of other users?

If this is left blank, or omitted, then all accounts can mediate updates to items, which could be a security risk, as there is no implicit checking that the authenticated user is a "legitimate" mediator

Property:

verbose-description.receipt.enable
Example Value:
verbose-description.receipt.enable = false
Informational Note:Should the deposit receipt include a verbose description of the deposit? For use by developers - recommend to set to "false" for production systems

Property:

verbose-description.error.enable
Example Value:
verbose-description.error.enable = true
Informational Note:should the error document include a verbose description of the error? For use by developers, although you may also wish to leave this set to "true" for production systems

Property:

error.alternate.url
Example Value:
error.alternate.url = http://mydspace.edu/xmlui/contact
Informational Note:

The error document can contain an alternate url, which the client can use to follow up any issues. For example, this could point to the Contact-Us page on the XMLUI

Property:

error.alternate.content-type
Example Value:
error.alternate.content-type = text/html
Informational Note:

The error.alternate.url may have an associated content type, such as text/html if it points to a web page. This is used to indicate to the client what content type it can expect if it follows that url.

Property:

generator.url

Example Value:

generator.url = http://www.dspace.org/ns/sword/2.0/

Informational Note:

The URL which identifies DSpace as the software that is providing the SWORD interface. 

Property:

generator.version

Example Value:

generator.version = 2.0

Informational Note:

The version of the SWORD interface. 

Property:

auth-type

Example Value:

auth-type = Basic

Informational Note:

Which form of authentication to use.  Normally this is set to Basic in order to use HTTP Basic. 

Property:

upload.tempdir

Example Value:

upload.tempd = /dspace/upload

Informational Note:

The location where uploaded files and packages are stored while being processed.

Property:

updated.field

Example Value:

updated.field = dc.date.updated

Informational Note:

The metadata field in which to store the updated date for items deposited via SWORD. 

Property:

slug.field

Example Value:

slug.field = dc.identifier.slug

Informational Note:

The metadata field in which to store the value of the slug header if it is supplied. 

Property:

author.field

Example Value:

author.field = dc.contributor.author

Informational Note:

The metadata field in which to store the value of the atom entry author if it supplied.

Property:

title.field

Example Value:

dc.title

Informational Note:

The metadata field in which to store the value of the atom entry title if it supplied.

Property:

disseminate-packaging

Example Value:

disseminate-packaging.METSDSpaceSIP = http://purl.org/net/sword/package/METSDSpaceSIP
disseminate-packaging.SimpleZip = http://purl.org/net/sword/package/SimpleZip

Informational Note:

Supported packaging formats for the dissemination of packages. 

Property:

statement.bundles
Example Value:
statement.bundles = ORIGINAL, SWORD, LICENSE
Informational Note:

Which bundles should the Statement include in its list of aggregated resources? The Statement will automatically mark any bitstreams which are in the bundle identified by the ${bundle.name} property, provided that bundle is also listed here (i.e. if you want Original Deposits to be listed in the Statement then you should add the SWORD bundle to this list)

Property:

plugin.single.org.dspace.sword2.WorkflowManager

Example Value:

plugin.single.org.dspace.sword2.WorkflowManager = org.dspace.sword2.WorkflowManagerDefault

Informational Note:

Which workflow manager to use.

Property:

workflowmanagerdefault.always-update-metadata
Example Value
workflowmanagerdefault.always-update-metadata = true
Informational Note

Should the WorkflowManagerDefault plugin allow updates to the item's metadata to take place on items which are in states other than the workspace (e.g. in the workflow, archive, or withdrawn) ?

Property:

workflowmanagerdefault.file-replace.enable
Example Value
workflowmanagerdefault.file-replace.enable = false
Informational Note

Should the server allow PUT to individual files?

If this is enabled, then DSpace may be used with the DepositMO SWORD extensions, BUT the caveat is that DSpace does not formally support Bitstream replace, so this is equivalent to a DELETE and then a POST, which violates the RESTfulness of the server. The resulting file DOES NOT have the same identifier as the file it was replacing. As such it is STRONGLY RECOMMENDED to leave this option turned off unless working explicitly with DepositMO enabled client environments

Property:

mets-ingester.package-ingester

Example Value:

mets-ingester.package-ingester = METS

Informational Note:

Which package ingester to use for METS packages. 

Property:

restore-mode.enable

Example Value:

restore-mode.enable = false

Informational Note:

Should the SWORD server enable restore-mode when ingesting new packages.  If this is enabled the item will be treated as a previously deleted item from the repository.  If the item has previously been assigned a handle then that same handle will be restored to activity.

Property:

simpledc.*

Example Value:

simpledc.abstract = dc.description.abstractsimpledc.date = dc.datesimpledc.rights = dc.rights

Informational Note:

Configuration of metadata field mapping used by the SimpleDCEntryIngester, SimpleDCEntryDisseminator and FeedContentDisseminator

Property:

atom.*

Example Value
atom.author = dc.contributor.author
Informational Note:Configuration of metadata field mapping used by the SimpleDCEntryIngester, SimpleDCEntryDisseminator and FeedContentDisseminator

Property:

metadata.replaceable
Example Value
metadata.replaceable = dc.description.abstract, dc.rights, dc.title.alternative, dc.identifier.citation
Informational Note

Used by SimpleDCEntryIngester: Which metadata fields can be replaced during a PUT to the Item of an Atom Entry document? Fields listed here are the ones which will be removed when a new PUT comes through (irrespective of whether there is a new incoming value to replace them)

Property:

multipart.entry-first

Example Value:

multipart.entry-first = false

Informational Note:

The order of precedence for importing multipart content.  If this is set to true then metadata in the package will override metadata in the atom entry, otherwise the metadata in the atom entry will override that from the package.

Property:

workflow.notify

Example Value:

workflow.notify = true

Informational Note:

If the workflow gets started (the collection being deposited into has a workflow configured), should a notification get sent?

Property:

versions.keep

Example Value:

versions.keep = true

Informational Note:

When content is replaced, should the old version be kept?  This creates a copy of the ORIGINAL bundle with the name V_YYYY-MM-DD.X where YYYY-MM-DD is the date the copy was created, and X is an integer from 0 upwards.

Property:

state.*

Example Value:

state.workspace.uri = http://localhost:8080/xmlui/state/inprogress
state.workspace.description = The item is in the user workspace
state.workflow.uri = http://localhost:8080/xmlui/state/inreview
state.workflow.description = The item is undergoing review prior to acceptance in the archive

Informational Note:

Pairs of states (URI and description) than items can be in.  Typical states are workspace, workflow, archive, and withdrawn.

Property:

workspace.url-template
Example Value
workspace.url-template = http://mydspace.edu/xmlui/submit?workspaceID=#wsid#
Informational Note

URL template for links to items in the workspace (items in the archive will use the handle). The #wsid# url parameter will be replaced with the workspace id of the item. The example above shows how to construct this URL for XMLUI.

Other configuration options exist that define the mapping between mime types, ingesters, and disseminators.  A typical configuration looks like this:

plugin.named.org.dspace.sword2.SwordContentIngester = \
  org.dspace.sword2.SimpleZipContentIngester = http://purl.org/net/sword/package/SimpleZip, \
  org.dspace.sword2.SwordMETSIngester = http://purl.org/net/sword/package/METSDSpaceSIP, \
  org.dspace.sword2.BinaryContentIngester = http://purl.org/net/sword/package/Binary

plugin.single.org.dspace.sword2.SwordEntryIngester = \
  org.dspace.sword2.SimpleDCEntryIngester

plugin.single.org.dspace.sword2.SwordEntryDisseminator = \
  org.dspace.sword2.SimpleDCEntryDisseminator

# note that we replace ";" with "_" as ";" is not permitted in the PluginManager names
plugin.named.org.dspace.sword2.SwordContentDisseminator = \
  org.dspace.sword2.SimpleZipContentDisseminator = http://purl.org/net/sword/package/SimpleZip, \
  org.dspace.sword2.FeedContentDisseminator = application/atom+xml, \
  org.dspace.sword2.FeedContentDisseminator = application/atom+xml_type_feed

# note that we replace ";" with "_" as ";" is not permitted in the PluginManager names
plugin.named.org.dspace.sword2.SwordStatementDisseminator = \
  org.dspace.sword2.AtomStatementDisseminator = atom, \
  org.dspace.sword2.OreStatementDisseminator = rdf, \
  org.dspace.sword2.AtomStatementDisseminator = application/atom+xml_type_feed, \
  org.dspace.sword2.OreStatementDisseminator = application/rdf+xml

Troubleshooting

Missing expression of encoding in XML header

If your SWORD Deposit requests are unsuccesful, please check that the XML in your initial metadata deposit correctly specifies the encoding.

If you use: 

<?xml version="1.0"?>

DSpace will default to UTF-32.

So to successfully deposit an XML in UTF-8, make sure you use:

<?xml version="1.0" encoding="utf-8" ?>
  • No labels