ldp-ucr.html
author Steve Speicher <sspeiche@gmail.com>
Mon, 26 Jan 2015 11:51:28 -0500
changeset 938 859f98c26867
parent 446 54e29dfbcbaa
permissions -rw-r--r--
AC rep comment #2 on clarity on types in examples
<!DOCTYPE html>
<html>
  <head>
    <title>Linked Data Platform Use Cases and Requirements</title>
    <meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>
    <!-- 
      === NOTA BENE ===
      For the three scripts below, if your spec resides on dev.w3 you can check them
      out in the same tree and use relative links so that they'll work offline,
     -->
    <script src='https://www.w3.org/Tools/respec/respec-w3c-common' class='remove' async></script> 
    <script class='remove'>
      var respecConfig = {
          // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
          specStatus:           "ED",
          
          // the specification's short name, as in http://www.w3.org/TR/short-name/
          shortName:            "ldp-ucr",
          // TODO: Confirm short name

          // if your specification has a subtitle that goes below the main
          // formal title, define it here
          // subtitle   :  "an excellent document",

          // if you wish the publication date to be other than today, set this
          // publishDate:  "2009-08-06",

          // if the specification's copyright date is a range of years, specify
          // the start date here:
          // copyrightStart: "2005"

          // if there is a previously published draft, uncomment this and set its YYYY-MM-DD date
          // and its maturity status
          previousPublishDate:  "2013-01-31",
          previousMaturity:  	"WD",
          previousURI: 			"http://www.w3.org/TR/2013/WD-ldp-ucr-20130131/",

          // if there a publicly available Editor's Draft, this is the link
          edDraftURI:           "http://www.w3.org/2012/ldp/hg/ldp-ucr.html",

          // if this is a LCWD, uncomment and set the end of its review period
          // lcEnd: "2009-08-05",

          // if you want to have extra CSS, append them to this list
          // it is recommended that the respec.css stylesheet be kept
          //extraCSS:             ["https://dvcs.w3.org/hg/ldpwg/css/respec.css"],

          // editors, add as many as you like
          // only "name" is required
          editors:  [
              { name:"Steve Battle", url: "http://stevebattle.me",
                company: "Sysemia Limited", companyURL: "http://www.sysemia.com" },
              { name:"Steve Speicher", url: "http://stevespeicher.me",
                company: "IBM Corporation", companyURL: "http://ibm.com/" }
          ],

          // authors, add as many as you like. 
          // This is optional, uncomment if you have authors as well as editors.
          // only "name" is required. Same format as editors.

          //authors:  [
          //    { name: "Your Name", url: "http://example.org/",
          //      company: "Your Company", companyURL: "http://example.com/" },
          //],
          
          // name of the WG
          wg:           "Linked Data Platform Working Group",
          
          // URI of the public WG page
          wgURI:        "http://www.w3.org/2012/ldp",
          
          // name (without the @w3c.org) of the public mailing to which comments are due
          wgPublicList: "public-ldp",
          
          // URI of the patent status for this WG, for Rec-track documents
          // !!!! IMPORTANT !!!!
          // This is important for Rec-track documents, do not copy a patent URI from a random
          // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
          // Team Contact.
          wgPatentURI:  "http://www.w3.org/2004/01/pp-impl/55082/status",
          doRDFa: "1.1",
		  localBiblio:  {
			"OSLC": {
				title:    "Open Services for Lifecycle Collaboration",
				href:     "http://open-services.net/"
		    },
			"XO": {
				title:    "SemanticXO",
				href:     "http://worldwidesemanticweb.org/projects/semanticxo/"
		    },
			"ADMS": {
				title:    "Asset Description Metadata Schema",
				href:     "http://joinup.ec.europa.eu/asset/adms/home",
				publisher:  "European Commission"
		    },
			"WOT": {
				title:    "Web of Things Community Group",
				href:     "http://www.w3.org/community/wot/",
				publisher:  "W3C"
			},
			"6LOWPAN": {
				title:    "IPv6 over Low power WPAN",
				href:     "http://datatracker.ietf.org/wg/6lowpan/",
				publisher:  "IETF"
			},
			"COAP": {
				title:    "Constrained Application Protocol",
				href:     "http://tools.ietf.org/html/draft-ietf-core-coap-18",
				publisher:  "IETF"
			},
			"COAP-MAP": {
				title:    "Best Practices for HTTP-CoAP Mapping Implementation",
				href:     "http://tools.ietf.org/html/draft-castellani-core-http-mapping-07",
				publisher:  "IETF"
			},
			"CHANGESET": {
				title:    "Changeset",
				href:     "http://vocab.org/changeset/schema.html",
				"authors": [
					"S. Tunnicliffe",
					"I. Davis"
				]
			},
			"SSN": {
				title:	"Semantic Sensor Network XG Final Report",
				href:	"http://www.w3.org/2005/Incubator/ssn/XGR-ssn/",
				publisher: "W3C"
			},
			"SNOMED": {
				title: "SNOMED CT",
				href: "http://www.ihtsdo.org/snomed-ct/",
				publisher: "International Health Terminology Standards Development Organisation (IHTSDO)"
			},
			"DC-COLLECTIONS": {
				title: "Dublin Core Collections Application Profile",
				href: "http://dublincore.org/groups/collections/collection-application-profile/"
			},
			"FRBR": {
				title: "Functional Requirements for Bibliographic Records",
				href: "http://www.ifla.org/publications/functional-requirements-for-bibliographic-records",
				publisher: "International Federation of Library Associations (IFLA)"
			},
			"FRBR-CORE": {
				title: "Expression of Core FRBR Concepts in RDF",
				href: "http://vocab.org/frbr/core.html",
				"authors": [
					"I. Davis",
					"R. Newman"
				]				
			},
			"BBC-SPORT": {
				title: "Sport Ontology",
				href: "http://www.bbc.co.uk/ontologies/sport/2011-02-17.shtml",
				"authors": [
					"J. Rayfield",
					"P. Wilton",
					"S. Oliver"
				]					
			},
			"ORG-ONT": {
				title: "An organization ontology",
				href: "http://www.epimorphics.com/public/vocabulary/org.html",
				"authors": [
					"D. Reynolds"
				]				
			},
			"RESEARCH-OBJECTS": {
				title: "Workflow-Centric Research Objects: First Class Citizens in Scholarly Discourse",
				href: "http://ceur-ws.org/Vol-903/paper-01.pdf",
				"authors": [
					"K Belhajjame et al"
				]				
			}
		  }
      };
    </script>
    <style type="text/css">
    	div.rule {padding-top: 1em;}
    	div.ldp-issue {
	    	border-color: #E05252;
			background: #FBE9E9;
			padding: 0.5em;
			margin: 1em 0;
			position: relative;
			clear: both;
			border-left-width: .5em;
			border-left-style: solid;
    	}
    	div.ldp-issue-title {
    	    color: #E05252;
    	    padding-right: 1em;
            min-width: 7.5em;
    	}
    </style>
  </head>
<body>
<section id='abstract'>
<p>
To foster the development of the Linked Data Platform specification, this document includes a set of user stories, use cases, scenarios and requirements that motivate a simple read-write Linked Data architecture, based on HTTP access to web resources that describe their state using RDF.
 The starting point for the development of these use cases is a collection of user stories that provide realistic examples describing how people may use read-write Linked Data. The use cases themselves are captured in a narrative style that describes a
 behavior, or set of behaviors based on, and using scenarios from, these user stories. The aim throughout has been to avoid details of protocol (specifically 
 the HTTP protocol), and use of any specific vocabulary that might be introduced by the 
 <abbr title="Linked Data Platform">LDP</abbr> specification.
</p>
</section>

<section id='sotd'>
</section>
 
<section>
<h1 id="scope">Scope and Motivation</h1>
	<p>
		Linked Data was defined by Tim Berners-Lee with the following
		guidelines [[LINKED-DATA]]:
	</p>
	<ol>
		<li>Use URIs as names for things</li>
		<li>Use HTTP URIs so that people can look up those names</li>
		<li>When someone looks up a URI, provide useful information,
			using the standards (RDF*, SPARQL)</li>
		<li>Include links to other URIs. so that they can discover
			more things</li>
	</ol>
	<p>These four rules have proven very effective in guiding and
		inspiring people to publish Linked Data on the web. The amount of
		data, especially public data, available on the web has grown
		rapidly, and an impressive number of extremely creative and useful
		“mashups” have been created using this data as result.</p>
	
	<p>The goal for the [[LINKED-DATA-PLATFORM]] is
		to define a specification required to allow the definition of a
		writable Linked Data API equivalent to the simple application APIs
		that are often written on the web today using the Atom Publishing
		Protocol (APP), which shares some characteristics with Linked Data
		such as the use of HTTP and URLs but relying on a flexible data model based on RDF that allows for
		multiple representations.</p>

</section>

<section>
<h1 id="org">Organization of this Document</h1>
	<p>This document is organized as follows:</p>
	<ul>
		<li><b><a href="#userstories" title="User Stories">User Stories</a></b>
			capture statements about system requirements written from a user
			or application perspective. They are typically lightweight and
			informal and can run from one line to a paragraph or two
			(sometimes described as an 'epic') [[COHN-2004]]. 
			This document redacts a number of user stories around the theme of read/writeable linked data.
			Analysis of each user story reveals a
			number of (functional) use cases and other non-functional
			requirements. See <em>Device API Access Control Use Cases and Requirements</em> [[DAP-REQS]] for a good example
			of user stories and their analysis.</li>
	</ul>
	<ul>
		<li><b><a href="#usecases" title="Use Cases">Use Cases</a></b> are
			used to capture and model functional requirements. Use cases
			describe the system’s behavior under various conditions [[COCKBURN-2000]],
			cataloging who does what with the system, for what purpose, but
			without concern for system design or implementation. Each use case is identified by a
			reference number to aid cross-reference from other documentation;
			use case indexing in this document is based on rdb2rdf
			use cases [[RDB2RDF-UC]]. A variety of styles may be used to capture use cases,
			from a simple narrative to a structured description with actors,
			pre/post conditions, step-by-step behaviors (as in <em>POWDER:
			Use Cases and Requirements</em> [[POWDER-USE-CASES]]), and non-functional requirements
			raised by the use case.</li>
	</ul>
	<ul>
		<li><b>Scenarios</b> are used to model the functional requirements of a use case and focus on a use case in action. Scenarios may range from
			lightweight narratives as seen in <em>Use
			cases and requirements for Media Fragments</em> [[MEDIA-FRAGMENTS-REQS]], to being formally
			modeled as interaction diagrams. Each use case includes at
			least a primary scenario, and possibly other alternative
			scenarios.</li>
	</ul>
	<ul>
		<li><b><a href="#reqs" title="Requirements">Requirements</a></b>
			list functional and non-functional or quality requirements, and the use cases
			they may be derived from. This approach is exemplified in the <em>Use Cases and Requirements for the Data
			Catalog Vocabulary</em> [[DCAT-UCR]].</li>
	</ul>
</section>
	
<section>
<h1 id="userstories">User Stories</h1>

	<section>
	<h2 id="story-social"><dfn>Maintaining Social Contact Information</dfn></h2>
	<p>Many of us have multiple email accounts that include
		information about the people and organizations we interact with –
		names, email addresses, telephone numbers, instant messenger
		identities and so on. When someone’s email address or telephone
		number changes (or they acquire a new one), our lives would be
		much simpler if we could update that information in one spot and
		all copies of it would automatically be updated. In other words,
		those copies would all be linked to some definition of “the
		contact.” There might also be good reasons (like off-line email
		addressing) to maintain a local copy of the contact, but ideally
		any copies would still be linked to some central “master.”</p>
	<p>Agreeing on a format for “the contact” is not enough,
		however. Even if all our email providers agreed on the format of a
		contact, we would still need to use each provider’s custom
		interface to update or replace the provider’s copy, or we would
		have to agree on a way for each email provider to link to the
		“master”. If we look outside our own personal interests, it would
		be even more useful if the person or organization exposed their
		own contact information so we could link to it.</p>
	<p>
		What would work in either case is a common understanding of the
		resource, a few formats needed, and access guidance for these
		resources. This would support how to acquire a link to a contact,
		how to use those links to interact with a contact (including <a
			href="#uc3" title="">reading</a>,
		<a href="#uc4" title="">updating</a>,
		and <a href="#s2.2" title="">deleting</a>
		it), as well as how to easily <a
			href="#s2.1" title="">create a
			new contact</a>, add it to my contacts, and when deleting a
		contact, how it would be removed from my list of contacts. It
		would also be good to be able to add some application-specific
		data about my contacts that the original design didn’t consider.
		Ideally we’d like to eliminate multiple copies of contacts, there
		would be additional valuable information about my contacts that
		may be stored on separate servers and need a simple way to link
		this information back to the contacts. Regardless of whether a
		contact collection is my own, shared by an organization, or all
		contacts known to an email provider (or to a single email account
		at an email provider), it would be nice if they all worked pretty
		much the same way.
	</p>
	</section>
	
	<section>
	<h2 id="story-tracking_relationships"><dfn>Keeping Track of Personal and Business Relationships</dfn></h2>
	<p>In our daily lives, we deal with many different
		organizations in many different relationships, and they each have
		data about us. However, it is unlikely that any one organization
		has all the information about us. Each of them typically gives us
		access to the information (at least some of it), many through
		websites where we are uniquely identified by some string – an
		account number, user ID, and so on. We have to use their
		applications to interact with the data about us, and we
		have to use their identifier(s) for us.</p>
	<p>
		Would it not be simpler if at least the Web-addressable portion of
		that data could be linked to consistently, so that instead of
		maintaining various identifiers in different formats and instead
		of having to manually supply those identifiers to each one’s
		corresponding custom application, we could essentially build a set
		of bookmarks to it all? When we want to <a
			href="#uc3" title="">examine</a>
		or <a href="#uc4" title="">change</a>
		their contents, would it not be simpler if there were a single
		consistent application interface that they all supported? 
	</p>
	<p>
		The information held by any single organization might be a mix of
		simple data and <a href="#uc6" title="">collections
			of other data</a>, for example, a bank account balance and a
		collection of historical transactions. Our bank might easily have
		<a href="#s1.2"
			title="">a collection of accounts for each member of its collection
			of customers</a>.
	</p>
	</section>
	
	<section>
	<h2 id="story-oslc"><dfn>System and Software Development Tool Integration</dfn></h2>
	<p>System and software development tools typically come from a
		diverse set of vendors and are built on various architectures and
		technologies. These tools are purpose built to meet the needs for
		a specific domain scenario (modeling, design, requirements and so
		on.) Often tool vendors view integrations with other tools as a
		necessary evil rather than providing additional value to their
		end-users. Even more of an afterthought is how these tools’ data
		-- such as people, projects, customer-reported problems and needs
		-- integrate and relate to corporate and external applications
		that manage data such as customers, business priorities and market
		trends. The problem can be isolated by standardizing on a small
		set of tools or a set of tools from a single vendor, but this
		rarely occurs and if does it usually does so only within small
		organizations. As these organizations grow both in size and
		complexity, they have needs to work with outsourced development
		and diverse internal other organizations with their own set of
		tools and processes. There is a need for better support of more
		complete business processes (system and software development
		processes) that span the roles, tasks, and data addressed by
		multiple tools. This demand has existed for many years, and the
		tools vendor industry has tried several different architectural
		approaches to address the problem. Here are a few:</p>
	<ul>
		<li>Implement an API for each application, and then, in each
			application, implement “glue code” that exploits the APIs of
			other applications to link them together.</li>
		<li>Design a single database to store the data of multiple
			applications, and implement each of the applications against this
			database. In the software development tools business, these
			databases are often called “repositories.”</li>
		<li>Implement a central “hub” or “bus” that orchestrates the
			broader business process by exploiting the APIs described
			previously.</li>
	</ul>
	<p>
		It is fair to say that although each of those approaches has its
		adherents and can point to some successes, none of them is wholly
		satisfactory. The use of Linked Data as an application integration
		technology has a strong appeal [[OSLC]].
	</p>
	</section>
	
	<section>
	<h2 id="story-lld"><dfn>Library Linked Data</dfn></h2>
	<p>
		The W3C Library Linked Data Working Group has a number of use
		cases cited in their <em>Use Case Report</em> [[LLD-UC]]. These referenced use cases focus on the
		need to extract and correlate library data from disparate sources.
		Variants of these use cases that can provide consistent formats,
		as well as ways to improve or update the data, would enable
		simplified methods for both efficiently sharing this data as well
		as producing incremental updates without the need for repeated
		full extractions and import of data.
	</p>
	<p>The 'Digital Objects Cluster' contains a number of relevant
		use cases:</p>
	<ul>
		<li>Grouping: This should "Allow the end-users to define <a
			href="#uc6" title="">groups of resources</a>
			on the web that for some reason belong together. The relationship
			that exists between the resources is often left unspecified. Some
			of the resources in a group may not be under control of the
			institution that defines the groups."
		</li>
	</ul>
	<ul>
		<li>Enrichment: "Enable end-users to <a
			href="#uc4" title="">link resources
				together</a>."
		</li>
	</ul>
	<ul>
		<li>Browsing: "<a href="#uc7"
			title="">Support end-user browsing through groups</a> and
			resources that belong to the groups."
		</li>
	</ul>
	<ul>
		<li>Re-use: "Users should have the capability to re-use all
			or parts of a collection, with all or part of its metadata,
			elsewhere on the linked Web."</li>
	</ul>
	<p>The 'Collections' cluster also contains a number of relevant
		use cases:</p>
	<ul>
		<li>Collection-level description: "Provide <a
			href="#uc7" title="">metadata
				pertaining to a collection as a whole</a>, in contrast to item-level
			description."
		</li>
	</ul>
	<ul>
		<li>Collections discovery: "Enable innovative collection
			discovery such as identification of nearest location of a
			physical collection where a specific information resource is
			found or mobile device applications ... based on collection-level
			descriptions."</li>
	</ul>
	<ul>
		<li>Community information services: Identify and classify
			collections of special interest to the community.</li>
	</ul>
	</section>
	
	<section>
	<h2 id="story-meter_monitoring"><dfn>Municipality Operational Monitoring</dfn></h2>
	<p>
		Across various cities, towns, counties, and various municipalities
		there is a growing number of services managed and run by
		municipalities that produce and consume a vast amount of
		information. This information is used to help monitor services,
		predict problems, and handle logistics. In order to effectively
		and efficiently collect, produce, and analyze all this data, a
		fundamental set of loosely coupled standard data sources are
		needed. A simple, low-cost way to <a
			href="#uc3" title="">expose
			data</a> from the diverse set of monitored services is needed, one
		that can easily integrate into the municipalities of other systems
		that inspect and analyze the data. All these services have links
		and dependencies on other data and services, so having a simple
		and scalable linking model is key.
	</p>
	</section>
	
	<section>
	<h2 id="story-healthcare"><dfn>Healthcare</dfn></h2>
	<p>For physicians to analyze, diagnose, and propose treatment
		for patients requires a vast amount of complex, changing and
		growing knowledge. This knowledge needs to come from a number of
		sources, including physicians’ own subject knowledge, consultation
		with their network of other healthcare professionals, public
		health sources, food and drug regulators, and other repositories
		of medical research and recommendations.</p>
	<p>To diagnose a patient’s condition requires current data on
		the patient’s medications and medical history. In addition, recent
		pharmaceutical advisories about these medications are linked into
		the patient’s data. If the patient experiences adverse effects
		from medications, these physicians need to publish information
		about this to an appropriate regulatory source. Other medical
		professionals require access to both validated and emerging
		effects of the medication. Similarly, if there are geographical
		patterns around outbreaks that allow both the awareness of new
		symptoms and treatments, this information needs to quickly reach a
		very distributed and diverse set of medical information systems.
		Also, reporting back to these regulatory agencies regarding new
		occurrences of an outbreak, including additional details of
		symptoms and causes, is critical in producing the most effective
		treatment for future incidents.</p>
	</section>	
	
	<section>
	<h2 id="story-media"><dfn>Metadata Enrichment in Broadcasting</dfn></h2>
	<p>
		There are many different use cases when broadcasters show interest
		in metadata <a href="#uc4" title="">
			enrichment</a>:
	</p>
	<ul>
		<li>enrich archive or news metadata by linking facts, events,
			locations and personalities</li>
		<li>enrich metadata generated by automatic extraction tools
			such as person identification, etc.</li>
		<li>enrich definitions of terms in classification schemes or
			enumeration lists</li>
	</ul>
	<p>This comes in support of more effective information
		management and data/content mining (if you can't find your
		content, it's like you don't have it and must either recreate or
		acquire it again, which is not financially effective).</p>
	<p>However, there is a need for solutions facilitating linkage
		to other data sources and taking care of the issues such as
		discovery, automation, disambiguation, etc. Other important issues
		that broadcasters would face are the editorial quality of the
		linked data, its persistence, and usage rights.</p>
	</section>
		
	<section>
	<h2 id="story-mashup"><dfn>Aggregation and Mashups of Infrastructure Data</dfn></h2>
	<p>
		For infrastructure management (such as storage systems, virtual
		machine environments, and similar IaaS and PaaS concepts), it is
		important to provide an environment in which information from
		different sources can be <a href="#uc6"
			title="">aggregated</a>, <a
			href="#uc7" title="">filtered</a>,
		and visualized effectively. Specifically, the following use cases
		need to be taken into account:
	</p>
	<ul>
		<li>While some data sources are based on Linked Data, others
			are not, and aggregation and mashups must work across these
			different sources.</li>
		<li>Consumers of the data sources and aggregated/filtered
			data streams are not necessarily implementing Linked Data
			themselves, they may be off-the-shelf components such as
			dashboard frameworks for composing visualizations.</li>
		<li>Simple versions of this scenario are pull-based, where
			the data is requested from data sources. In more advanced
			settings, without a major change in architecture it should be
			possible to move to a push-based interaction model, where data
			sources push notifications to subscribers, and data sources
			provide different services that consumers can subscribe to (such
			as "informational messages" or "critical alerts only").</li>
	</ul>
	<p>In this scenario, the important factors are to have
		abstractions that allow easy aggregation and filtering, are
		independent from the internal data model of the sources that are
		being combined, and can be used for pull-based interactions as
		well as for push-based interactions.</p>
	</section>
	
	<section>
	<h2 id="story-low-end_devices"><dfn>Sharing Payload of RDF Data Among Low-End Devices</dfn></h2>
	<p>
		Several projects around the idea of <em>downscaling the Semantic Web</em> need to be able to ship payloads of RDF across
		the nodes member of a given network. The transfers are done in a
		constrained context in terms of bandwidth, scope of the local
		semantics employed by the nodes and computing capabilities of the
		nodes. In a P2P style, every node has the capability to act either
		as a data consumer or a data provider, serving its own data or
		acting as a relay to pass other's data along (typically in mesh
		networks).
	</p>
	<p>The transfer of an arbitrary payload of RDF data could be
		implemented through a container mechanism, adding and removing
		sets of RDF triples to it. Currently, the 
		SemanticXO [[XO]] project uses named graphs and the graph store protocol to
		create/delete/copy graphs across the nodes but this (almost)
		imposes the usage of a triple store. Unfortunately, triple stores
		are rather demanding pieces of software that are not always usable
		on limited hardware. Some generic REST-like interaction backed up
		with a lightweight column store would be a better approach.</p>
	</section>
	
	<section>
	<h2 id="story-binary_and_metadata"><dfn>Sharing Binary Resources and Metadata</dfn></h2>
	<p>When publishing datasets about stars one may want to publish
		links to the pictures in which those stars appear, and this may
		well require publishing the pictures themselves. Vice versa: when
		publishing a picture of space we need to know which telescope took
		the picture, which part of the sky it was pointing at, what
		filters were used, which identified stars are visible, who can
		read it, who can write to it.</p>
	<p>If Linked Data contains information about resources that are
		most naturally expressed in non-RDF formats (be they binary such
		as pictures or videos, or human readable documents in XML
		formats), those non-RDF formats should be just as easy to publish
		to the LinkedData server as the RDF relations that link those
		resources up. A LinkedData server should therefore allow
		publishing of non-linked data resources too, and make it easy to
		publish and edit metadata about those resources.</p>
	<p>The resource comes in two parts - the image and information
		about the image (which may be in the image file but is better kept external
		to it as it's more general). The information about the image is
		vital. It's a compound item of image data and other data (application 
		metadata about the image) that are not distinguished from the
		platform's point-of-view.</p>
	</section>
	
	<section>
	<h2 id="story-data_catalogs"><dfn>Data Catalogs</dfn></h2>
	<p>
		The <em>Asset Description Metadata Schema</em> [[ADMS]]
		provides the data model to describe semantic asset repository
		contents, but this leaves many open challenges when building a
		federation of these repositories to serve the need of asset
		reuse. These include accessing and querying individual
		repositories and efficiently retrieving <a
			href="#uc5" title="">
			updated content</a> without having to retrieve the whole content.
		The Data Warehousing integration approach allows us to cope
		with heterogeneity of sources technologies and to benefit from the
		optimized performance it offers, given that individual
		repositories do not usually change frequently. With Data
		Warehousing, the federation requires one to:
	</p>
	<ul>
		<li>understand the data, i.e. understand their semantic
			descriptions, and other systems.</li>
		<li>seamlessly exchange the semantic assets metadata from
			different repositories</li>
		<li>keep itself up-to-date.</li>
	</ul>
	<p>Repository owners can maintain de-referenceable URIs for
		their repository descriptions and contained assets in a Linked Data
		compatible manner. ADMS provides the necessary data model to
		enable meaningful exchange of data. However, this leaves the
		challenge of efficient access to the data not fully addressed.</p>
	</section>
	
	<section>
	<h2 id="story-constrained_devices"><dfn>Constrained Devices and Networks</dfn></h2>
	<p>
		Information coming from resource constrained devices in the Web of
		Things [[WOT]]
		has been identified as a major driver in many domains, from smart
		cities to environmental monitoring to real-time tracking. The
		amount of information produced by these devices is growing
		exponentially and needs to be accessed and integrated in a
		systematic, standardized and cost efficient way. By using the same
		standards as on the Web, integration with applications will be
		simplified and higher-level interactions among resource
		constrained devices, abstracting away heterogeneities, will become
		possible. Up-coming IoT/WoT standards such as '6LowPAN' [[6LOWPAN]]
		- IPv6 for resource constrained devices - and the <em>Constrained
		Application Protocol</em> [[COAP]], which provides a downscaled version of
		HTTP on top of UDP for the use on constrained devices, are already
		at a mature stage. The next step now is to support RESTful
		interfaces also on resource constrained devices, adhering to the
		Linked Data principles. Due to the limited resources available,
		both on the device and in the network (such as bandwidth, energy,
		and memory) a solution based on <em>SPARQL Update</em> [[RDF-SPARQL-UPDATE]] is at the current point
		in time considered not to be useful and/or feasible. An approach
		based on the HTTP-CoAP Mapping [[COAP-MAP]] would enable constrained
		devices to directly participate in a Linked Data-based
		environment.
	</p>
	</section>
	
	<section>
	<h2 id="story-process_of_science"><dfn>Services Supporting the Process of Science</dfn></h2>
	<p>Many fields of science now include branches with in silico
		data-intensive methods, e.g. bioinformatics, astronomy. To support
		these new methods we look to move beyond the established platforms
		provided by scientific workflow systems to capture, assist, and
		preserve the complete lifecycle from record of the experiment,
		through local trusted sharing, analysis, dissemination (including
		publishing of experimental data "beyond the PDF"), and re-use.</p>
	<ul>
		<li><a href="#uc6" title="">Aggregations</a>,
			specifically <em>Research Objects (ROs)</em> are exchanged
			between services and clients bringing together workflows, data
			sets, annotations, and provenance.
		</li>
		<li>We need lightweight services that can be simply and easily
			integrated into, and scale across the wide variety of softwares
			and data used in science.
			<ul>
				<li>Foundation services collect and expose ROs for
					storage, modification, exploration, and reuse.</li>
				<li>Services that provide added-value to ROs such as
					seamless import/export from scientific workflow systems,
					automated stability evaluation, or recommendation.</li>
			</ul>
		</li>
	</ul>
	</section>
	
	<section>
	<h2 id="story-project_data"><dfn>Project Membership Information</dfn></h2>
	<p>Information about people and projects changes as roles
		change, as organisations change and as contact details change.
		Finding the current state of a project is important in enabling
		people to contact the right person in the right role. It can also
		be useful to look back and see who was performing what role in the
		past.</p>
	<p>A use of a Linked Data Platform could be to give
		responsibility for managing such information to the project team
		itself, instead of requiring updates to be requested from a centralised
		website administrator.</p>
	<p>This could be achieved with:</p>
	<ul>
		<li>Resource descriptions for each person and project</li>
		<li>A container resource to describe roles/membership in the
			project.</li>
	</ul>
	<p>To retain the history of the project, the old version of a
		resources, including container resources, should be retained so
		there is a need to address both specific items and also have a
		notion of "current".</p>
	<p>Access to information has two aspects:</p>
	<ul>
		<li>Access to the "current" state, regardless of the version
			of the resource description</li>
		<li>Access to historical state, via access to a specific
			version of the resource description</li>
	</ul>
	</section>
	
	<section>
	<h2 id="story-cloud"><dfn>Cloud Infrastructure Management</dfn></h2>
	<p>Cloud operators offer API support to provide customers with
		remote access for the management of Cloud infrastructure (IaaS).
		Infrastructure consists of Systems, Computers, Networks, Discs,
		etc. The overall structure can be seen as mostly hierarchical,
		(Cloud contains Systems, Systems contain Machines, etc),
		complemented with crossing links (e.g. multiple Machines connected
		to a Network).</p>
	<p>The IaaS scenario makes specific requirements on lifecycle
		management and discovery, handling non-instant changes, history
		capture and query:</p>
	<ul>
		<li>Many aspects of Cloud infrastructure have associated
			lifecycle, e.g. a Computer can be transitioned between Running
			and Shutdown. This should be manageable through the API, which
			should include how a client discovers dynamic lifecycle options
			and thus help steering through an application.</li>
		<li>It is often the case that attaining a new lifecycle state
			is not instantaneous. Clients require a universal mechanism for
			monitoring such changes.</li>
		<li>A facility to retrieve all events in the lifecycle of a
			resource can be useful.</li>
		<li>Query provides the means to interrogate the resources
			behind the API, as well as finding new entry points into the
			application.</li>
	</ul>
	<p>Infrastructure management may be viewed as the manipulation
		of the underlying graph of resources.</p>
	</section>

</section>

<section>
<h1 id="usecases">Use Cases</h1>

	<p>The following use cases are each derived from one or more of
		the user stories above. These use cases are explored in detail
		through the development of scenarios, each motivated by some key
		aspect exemplified by a single user story. The examples they
		contain are included purely for illustrative purposes, and should
		not be interpreted normatively.</p>
		
	<section id="uc1">
	<h2><dfn>UC1</dfn>: Compose resources</h2>
	<p>
		A number of user stories introduce the idea of a <em>container</em>
		as a mechanism for composing resources within the
		context of an application. A
		composition would be identified by URI being a linked resource in its own
		right. Its properties may represent the <em>affordances</em>
		of the application, enabling clients to determine what other
		operations they can do. These operations may
		include descriptions of application specific services that can be
		invoked by exchanging RDF documents.
	</p>
	<ul>
		<li><a>NF1.1</a>: Provide "access guidance" (affordances) from user story, <a>Maintaining Social Contact Information</a>.</li>
	</ul>
	
	<section id="s1.1">
	<h3>Primary scenario: create a container</h3>
	<p>
		Create a new container resource within the LDP server. In <a>Services Supporting the Process of Science</a>, 
			<a
			href="http://www.wf4ever-project.org/" 
			title="http://www.wf4ever-project.org/" rel="nofollow">Research
			Objects</a> are semantically rich aggregations of resources that
		bring together data, methods and people in scientific
		investigations. A basic workflow research object will be created
		to aggregate scientific workflows and their artefacts [[RESEARCH-OBJECTS]]. 		
		These artefacts will be added to the research object throughout the project lifecycle of the project.
	</p>
	<p>
		The RDF description below captures the initial state of the research object. For the purposes of the example, we have included the time of creation. It is a linked data resource addressed via URL from which the following RDF can be retrieved. The null-relative URL <code>&lt;&gt;</code> should be understood as a self-reference to the research object itself.
	</p>
	<pre class='example'><code>
@prefix ro:  &lt;http://purl.org/wf4ever/ro#&gt; .
@prefix dct: &lt;http://purl.org/dc/terms/&gt; .
@prefix ore: &lt;http://www.openarchives.org/ore/&gt; .
@prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; .

&lt;&gt; a ro:ResearchObject, ore:Aggregation ;
    dct:created &quot;2012-12-01&quot;^^xsd:dateTime .
</code></pre>
	<div>(see functional requirement <a>F1.1</a>)</div>
	</section>
	
	<section id="s1.2">
	<h3>Alternative scenario: create a nested container</h3>
	<p>
		The motivation for nested containers comes from the <a>System and Software Development Tool Integration</a> user story. The
		OSLC Change Management vocabulary allows bug reports to have
		attachments referenced by the membership predicate
		<code>oslc_cm:attachment</code>. This may be viewed as nested containment. The <em>top-level-container</em> contains issues, and
		each issue is itself a container of attachments.
		In the example, <code>issue1234</code> is a member of the container <code>top-level-container</code>. In turn, <code>attachment324</code> and <code>attachment251</code> are attachments within <code>issue1234</code>. Treating these as containers makes it easier to manage them as self-contained units.
	</p>
	<pre class='example'><code>
@prefix dcterms: &lt;http://purl.org/dc/terms/&gt;.
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;.
@prefix oslc_cm: &lt;http://open-services.net/ns/cm#&gt;.
@prefix : &lt;http://example.org/&gt;.

:top-level-container rdfs:member :issue1234 .

:issue1234 a oslc_cm:ChangeRequest;
      dcterms:identifier &quot;1234&quot;;
      dcterms:type &quot;a bug&quot;;
      oslc_cm:attachments :attachments.

:attachments a oslc_cm:AttachmentList;
      oslc_cm:attachment :attachment324, :attachment251.
</code></pre>
	<div>(see functional requirement <a>F1.2</a>)</div>
	</section>
	<section id="s1.3">
		<h3>Alternative scenario: Delete a container</h3>
		If a container can be deleted, it seems natural that any contained resources and nested containers should also be deleted.
		<div>(see functional requirement <a>F1.3</a>).</div>
	</section>
	</section>
	
	<section id="uc2">
	<h2><dfn>UC2</dfn>: Manage resource lifecycle</h2>
	<p>
		This use case addresses the managed lifecycle of a resource and is
		concerned with resource <em>ownership</em>. The responsibility for
		managing resources belongs to their container. For example, a
		container may accept a request from a client to make a new
		resource. This use case focuses on creation and deletion of
		resources in the context of a container, and the potential for
		transfer of ownership by moving resources between containers. The
		ownership of a resource should always be clear; no resource
		managed in this way should ever be owned by more than one
		container.
	</p>
	<ul>
		<li><a>NF2.1</a>: Non-duplication of resources: "Eliminate multiple
			copies", representing resources in a single place from <a>Maintaining Social Contact Information</a>.
		</li>
		<li><a>NF2.2</a>: Distribution of resources: Linked data "may be stored on
			separate servers" from <a>Maintaining Social Contact Information</a>.
		</li>
		<li><a>NF2.3</a>: Consistent, global naming: Resources should be "linked to
			consistently, ... instead of maintaining various identifiers in
			different formats" from <a>Keeping Track of Personal and Business Relationships</a>.
		</li>
	</ul>
	
	<section id="s2.1">
	<h3>Primary scenario: create resource</h3>
	<p>
		Resources begin life by being created within a container. From
		user story, <a>Maintaining Social Contact Information</a>, It should be
		possible to "easily create a new contact and add it to my
		contacts." This suggests that resource creation is closely linked
		to the application context. The new resource is created in a
		container representing "my contacts." The lifecycle of the
		resource is linked to the lifecycle of it's container. So, for
		example, if "my contacts" is deleted then a user would also
		reasonably expect that all contacts within it would also be
		deleted.
	</p>
	<p>
		Contact details are captured as an RDF description and it's
		properties, including "names, email addresses, telephone numbers,
		instant messenger identities and so on." The description may
		include non-standard RDF; "data about my contacts that the
		original design didn’t consider." The following RDF could be used
		to describe contact information using the FOAF
		vocabulary [[FOAF]]. A contact is represented here by a
		<code>foaf:PersonalProfileDocument</code> defining a resource that can be
		created and updated as a single-unit, even though it may describe
		ancillary resources, such as a <code>foaf:Person</code>, below.
	</p>
	<pre class='example'><code>
@prefix foaf:  &lt;http://xmlns.com/foaf/0.1/&gt; .

&lt;&gt; a foaf:PersonalProfileDocument;
	foaf:PrimaryTopic [ 
		a foaf:Person;
		foaf:name &quot;Timothy Berners-Lee&quot;;
		foaf:title &quot;Sir&quot;;
		foaf:firstName &quot;Timothy&quot;;
		foaf:surname &quot;Berners-Lee&quot;;
		foaf:nick &quot;TimBL&quot;, &quot;timbl&quot;;
		foaf:homepage &lt;http://www.w3.org/People/Berners-Lee/&gt;;
		foaf:weblog &lt;http://dig.csail.mit.edu/breadcrumbs/blog/4&gt;;
		foaf:mbox &lt;mailto:timbl@w3.org&gt;;
		foaf:workplaceHomepage &lt;http://www.w3.org/&gt;.
	]
</code></pre>
		<div>(see functional requirement <a>F2.1</a>)</div>
	</section>
	
	<section id="s2.2">
	<h3>Alternative scenario: delete resource</h3>
	<p>
		Delete a resource and all it's properties. If the resource resides
		within a container it will be removed from that container, however
		other links to the deleted resource may be left as dangling
		references. In the case where the resource is a container, the
		server may also delete any or all contained resources. In normal
		practice, a deleted resource cannot be reinstated. There are
		however, edge-cases where limited undelete may be desirable. Best
		practice states that "Cool URIs don't change" [[COOLURIS]], which implies that
		deleted URIs shouldn't be recycled.
	</p>
		<div>(see functional requirement <a>F2.2</a>)</div>
	</section>
	
	<section id="s2.3">
	<h3>Alternative scenario: moving contained resources</h3>
	<p>
		Resources may have value beyond the life of their membership
		in a container. This implies methods to add references to revise
		container membership. 
		A change of ownership may or may not imply a change of URI,
		depending upon the naming policy. While assigning a
		new URI to a resource is discouraged [[WEBARCH]], it is possible to indicate that a
		resource has moved with an appropriate HTTP response.
	</p>
		<div>(see functional requirement <a>F2.3</a>)</div>
	</section>
	</section>
	
	<section id="uc3">
	<h2><dfn>UC3</dfn>: Retrieve resource description</h2>
	<p>Access the current description of a resource, containing
		properties of that resource and links to related resources. The
		representation may include descriptions of related resources that
		cannot be accessed directly. Depending upon the application, an
		server may enrich the retrieved RDF with additional triples. Examples
		include adding incoming links, <code>owl:sameAs</code> closure and <code>rdf:type</code> closure.
		The HTTP response should also include versioning information (i.e.
		last update or entity tag) so that subsequent updates can ensure
		they are being applied to the correct version.</p>
	<ul>
		<li><a>NF3.1</a>: Use standard vocabularies as appropriate to enable a
			"common understanding of the resource" from <a>Maintaining Social Contact Information</a>.
		</li>
		<li><a>NF3.2</a>: A "scalable linking model is key" from <a>Municipality Operational Monitoring</a>.
		</li>
	</ul>
	
	<section id="s3.1">
	<h3>Primary scenario: retrieve resource description</h3>
	<p>
		The user story <a
			href="#story-project_data"
			title=""> Project Membership Information</a> discusses the
		representation of information about people and projects. It calls
		for "Resource descriptions for each person and project" allowing
		project teams to review information held about these resources.
		The example below illustrates the kinds of information that might
		be held about organizational structures based on the <a
			href="http://www.epimorphics.com/web/"
			title="http://www.epimorphics.com" rel="nofollow">Epimorphics</a>
		organizational ontology [[ORG-ONT]].
	</p>
	<p>Examples 4 and 5 below define two resources that would be hosted on an LDP server based at
		&lt;http://example.com/&gt;. The representation in Example 4 describes &lt;http://example.com/member1&gt;, while that of Example 5 describes &lt;http://example.com/role&gt;.
		A client reading Example 4 would have to separately retrieve Example 5 in order to get role information such as its descriptive label.
	</p>
	<p>
		Note that the representations of these resources may
		include descriptions of related resources, such as
		&lt;http://www.w3.org/&gt;, that that fall under a completely different authority and
		therefore can't be served directly from the LDP server at this location.</p>
	<div>
	<pre class='example'><code>
@prefix org: &lt;http://www.w3.org/ns/org#&gt; .
@prefix owltime: &lt;http://www.w3.org/2006/time&gt; .
@prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; .
@base &lt;http://example.com/&gt; .
     
&lt;member1&gt; a org:Membership ;
	org:member &lt;http://www.w3.org/People/Berners-Lee/card#i&gt; ;
	org:organization http://www.w3.org/&gt; ;
	org:role &lt;director&gt; ;
	org:memberDuring [a owltime:Interval; owltime:hasBeginning [
		owltime:inXSDDateTime &quot;1994-10-01T00:00:00Z&quot;^^xsd:dateTime]] .

&lt;http://www.w3.org/&gt; a org:FormalOrganization ;
	skos:prefLabel &quot;The World Wide Web Consortium&quot;@en ;
	skos:altLabel &quot;W3C&quot; .
</code></pre>
</div>
<div>
<pre class='example'><code>
@prefix org: &lt;http://www.w3.org/ns/org#&gt; .
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
@base &lt;http://example.com/&gt; .

&lt;director&gt; a org:Role ;
	rdfs:label &quot;Director&quot; .
 
</code></pre>
</div>
		<div>(see functional requirement <a>F3.1</a>)</div>
	</section>
	
	<section id="s3.2">
	<h3>Alternative scenario: retrieve description of a non-document resource (hash URI)</h3>
	<p>In many cases, the things that are of interest are not
		always the things that are resolvable. The example below
		demonstrates how a FOAF profile may be used to distinguish between
		the person and the profile; the former being the topic of the
		latter. Where the fragment is defined relative to the base, as in this example, the URL including the fragment may be used to access the resource representing the containing document. The HTTP protocol
		requires that the fragment part be stripped off before requesting
		the URI from the server. The client can then read properties of the hash URI <code>&lt;#i&gt;</code> from the retrieved description.
	</p>
	<pre class='example'><code>
@base &lt;http://www.w3.org/People/Berners-Lee/card&gt;
@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt;.
@prefix dc: &lt;http://purl.org/dc/elements/1.1/&gt;.

&lt;&gt; a foaf:PersonalProfileDocument ;
	dc:title &quot;Tim Berners-Lee's FOAF file&quot; ;
	foaf:homepage &lt;http://www.w3.org/People/Berners-Lee/&gt; ;
	foaf:primaryTopic &lt;#i&gt; .
</code></pre>
		<div>(see functional requirement <a>F3.2</a>)</div>
	</section>
	</section>
	
	<section id="uc4">
	<h2><dfn>UC4</dfn>: Update existing resource</h2>
	<p>
		Change the RDF description of a LDP resource, potentially removing
		or overwriting existing data. This allows applications to <em>enrich</em>
		the representation of a resource by addling additional links to
		other resources.
	</p>
	<ul>
		<li><a>NF4.1</a>: Unrestricted vocabulary: It should be possible be "able
			to add ... application-specific data" to resources from <a>Maintaining Social Contact Information</a>.
		</li>
	</ul>
	
	<section id="s4.1">
	<h3>Primary scenario: enrichment</h3>
	<p>
		This relates to user story <a>Metadata Enrichment in Broadcasting</a> and is based on the BBC
		Sports Ontology [[BBC-SPORT]]. The <em>resource-centric</em> view of linked-data
		provides a natural granularity for substituting, or overwriting a
		resource and its data. The simplest kind of update would simply
		replace what is currently known about a resource with a new
		representation. 
	</p>
	<p>
		There are two distinct resources in the example
		below; a sporting event and an associated award. The granularity
		of the resource would allow a user to replace the information about the
		award without disturbing the information about the event.
	</p>
	<pre class='example'><code>
@prefix : &lt;http://example.com/&gt;.
@prefix sport: &lt;http://www.bbc.co.uk/ontologies/sport/&gt; .
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
 
 :mens_sprint a sport:MultiStageCompetition;
    rdfs:label &quot;Men's Sprint&quot;;
    sport:award &lt;#gold_medal&gt; .

&lt;#gold_medal&gt; a sport:Award .
</code></pre>
	<p>The description can be enriched as events unfold, adding a link to
		the winner of the gold medal by substituting the above description
		with the following.</p>
	<pre class='example'><code>
@prefix : &lt;http://example.com/&gt;.
@prefix sport: &lt;http://www.bbc.co.uk/ontologies/sport/&gt; .
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt; .
 
 :mens_sprint a sport:MultiStageCompetition;
    rdfs:label &quot;Men's Sprint&quot;;
    sport:award &lt;#gold_medal&gt; .
&lt;#gold_medal&gt; a sport:Award; 
    sport:awarded_to [
        a foaf:Agent ;
        foaf:name &quot;Chris Hoy&quot; .
    ] .
</code></pre>
		<div>(see functional requirement <a>F4.1</a>)</div>
	</section>
	
	<section id="s4.2">
	<h3>Alternative scenario: selective update of a resource</h3>
	<p>
		This relates to user story <a>Data Catalogs</a>. A catalogue is
		described by the following RDF model, based on the Data Catalog Vocabulary [[vocab-dcat]] which provides a standard format for representing the metadata held by organizations.
	</p>
	<pre class='example'><code>
@prefix : &lt;http://example.com/&gt;.
@prefix dcat: &lt;http://www.w3.org/ns/dcat#&gt; .
@prefix dcterms: &lt;http://purl.org/dc/terms/&gt; .
   
 :catalog a dcat:Catalog ;
    dcat:dataset :dataset/001;
    dcterms:issued &quot;2012-12-11&quot;^^xsd:date.
</code></pre>
	<p>
		A catalog may contain multiple datasets, so when linking to new
		datasets it would be simpler and preferable to selectively add
		just the new dataset links. For this example, a Changeset [[CHANGESET]] might be used to add a new <code>dc:title</code> to the
		dataset. The following update would be directed to the catalogue
		to add an additional dataset.
	</p>
	<pre class='example'><code>
@prefix : &lt;http://example.com/&gt;.
@prefix dcterms: &lt;http://purl.org/dc/terms/&gt; .
@prefix cs: &lt;http://purl.org/vocab/changeset/schema#&gt; .
@prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;.

&lt;change1&gt;
  a cs:ChangeSet ;
  cs:subjectOfChange :catalog ;
  cs:createdDate &quot;2012-01-01T00:00:00Z&quot; ;
  cs:changeReason &quot;Update catalog datasets&quot; ;
  cs:addition [
    a rdf:Statement ;
    rdf:subject :catalog ;
    rdf:predicate dcat:dataset ;
    rdf:object :dataset/002 .
  ] .
</code></pre>
		<div>(see functional requirement <a>F4.2</a>)</div>
	</section>
	</section>
	
	<section id="uc5">
	<h2><dfn>UC5</dfn>: Determine if a resource has changed</h2>
	<p>
		It should be possible to retrieve versioning information about a
		resource (e.g. last modified or entity tag) without having to
		download a representation of the resource. This information can
		then be compared with previous information held about that
		resource to determine if it has changed. This versioning
		information can also be used in subsequent <em>conditional</em>
		requests to ensure they are only applied if the version is
		unchanged.
	</p>
	<ul>
		<li><a>NF5.1</a>: Multiple changes to a resource: The <a>Project Membership Information</a> user story is concerned with "access to the 'current' state", as distinct from earlier versions. 
		This is particularly relevant to changes which are made with respect to a specific version of the resource description.
		The LDP must ensure consistent access in the case of multiple simultaneous attempts to access a resource.
		</li>
	</ul>
	
	<section id="s5.1">
	<h3>Primary scenario: determine if a resource has changed</h3>
	<p>
		Based on the user story, <a>Constrained Devices and Networks</a>, an LDP server could be configured to
		act as a proxy for a CoAP [[COAP]] based Web of Things [[WOT]]. As an observer of CoAP resources, the LDP server registers
		its interest so that it will be notified whenever the sensor
		reading changes. Clients of the LDP can interrogate the server to
		determine if the state has changed.
	</p>
	<p>
		In this example, the information about a sensor and corresponding
		sensor readings can be represented as RDF resources. The first
		resource below, represents a sensor described using the Semantic
		Sensor Network [[SSN]] ontology.
	</p>
	<pre class='example'><code>
@prefix : &lt;http://example.com/energy-management/&gt;.
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
@prefix ssn: &lt;http://purl.oclc.org/NET/ssnx/ssn#&gt; .

&lt;&gt; a :MainsFrequencySensor;
  rdfs:comment &quot;Sense grid load based on mains frequency&quot;;
  ssn:hasMeasurementCapability [
	a :FrequencyMeasurementCapability;
	ssn:hasMeasurementProperty &lt;#property_1&gt; .
  ] .
</code></pre>
	<p>
		The value of the sensor changes in real-time as measurements are
		taken. The LDP client can interrogate the resource below to
		determine if it has changed, <em>without</em> necessarily having to
		download the RDF representation. As different sensor properties
		are represented disjointly (separate RDF representations) they may
		change independently.
	</p>
	<pre class='example'><code>
@prefix : &lt;http://example.com/energy-management/&gt; .
@prefix ssn: &lt;http://purl.oclc.org/NET/ssnx/ssn#&gt; .
@prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; .


&lt;http://example.com/energy-management#property_1&gt; :hasMeasurementPropertyValue &lt;&gt; .
&lt;&gt; a :FrequencyValue;
	:hasQuantityValue &quot;50&quot;^^xsd:float.
</code></pre>
		<div>(see functional requirement <a>F5.1</a>)</div>
	</section>
	</section>
	
	<section id="uc6">
	<h2><dfn>UC6</dfn>: Aggregate resources</h2>
	<p>
		There is a requirement to be able to manage <em>collections</em> of
		resources. The concept of a collection overlaps with, but is
		distinct from that of a container. These collections are (weak)
		aggregations, unrelated to the lifecycle management of resources,
		and distinct from the ownership between a resource and its
		container. However, the composition of a container may be
		reflected as a collection to support navigation of the container
		and its contents. There is a need to be able to create collections
		by adding and deleting individual membership properties. Resources
		may belong to multiple collections, or to none.
	</p>
	<ul>
		<li><a>NF6.1</a>: Resource descriptions are a "mix of simple data and
			collections" from <a>Keeping Track of Personal and Business Relationships</a>.
		</li>
		<li><a>NF6.2</a>: Relative URIs: It should be possible to "ship payloads of
			RDF" for a collection as a whole without breaking internal links
			from <a>Constrained Devices and Networks</a>.
		</li>
	</ul>
	
	<section id="s6.1">
	<h3>Primary scenario: add a resource to a collection</h3>
	<p>
		This example is from <a>Library Linked Data</a> and LLD-UC [[LLD-UC]], specifically <em>Subject Search</em>.
	</p>
	<p>There is an existing collection at
		&lt;http://example.com/concept-scheme/subject-heading&gt; that
		defines a collection of subject headings. This collection is
		defined as a <code>skos:ConceptScheme</code> and the client wishes to insert a
		new concept into the scheme. which will be related to the
		collection via a <code>skos:inScheme</code> link. In the example below, a new subject-heading,
		"outer space exploration" is added to the <code>scheme:subject-heading</code> collection. The following RDF describes the (item-level)
		description of the collection,
		also demonstrating that the relationship between the parent and child resources may run in a seemingly counter-intuitive direction, from child to parent.
		</p>
	<pre class='example'><code>
@prefix scheme : &lt;http://example.com/concept-scheme/&gt;.
@prefix concept : &lt;http://example.com/concept/&gt;.
@prefix skos: &lt;http://www.w3.org/2004/02/skos/core#&gt; .

scheme:subject-heading a skos:ConceptScheme.

concept:Outer+space+Exploration skos:inScheme scheme:subject-heading.
</code></pre>
		<div>(see functional requirement <a>F6.1</a>)</div>
	</section>
	
	<section id="s6.2">
	<h3>Alternative scenario: add a resource to multiple collections</h3>
	<p>
		Logically, a resource should not be owned by more than one
		container. However, it may be a member of multiple collections
		which define a weaker form of <em>aggregation</em>. As this is
		simply a manipulation of the RDF description of a collection, it
		should be possible to add the same resource to multiple
		collections.
	</p>
	<p>
		As a machine-readable collection of medical terms, the SNOMED CT ontology [[SNOMED]]
		is of key importance in user story, <a>Healthcare</a>. SNOMED CT allows concepts with more than one parent. In the example below, SNOMED concepts are treated as
		collections (aggregations) of narrower concepts. We see that the 
		concept <code>:TissueSpecimenFromHeart</code> belongs to two parent collections as it is both a  <code>:TissueSpecimen</code> and a <code>:SpecimenFromHeart</code>.
		This example also demonstrates how composition and aggregation support different scenarios, as the ability to have multiple parents should not be a possibility with composition.
	</p>
	<pre class='example'><code>
@prefix : &lt;http://example.com/snomed/&gt;.
@prefix skos: &lt;http://www.w3.org/2004/02/skos/core#&gt; .

:TissueSpecimen a skos:Concept ;
	:conceptID "119376003";
	skos:prefLabel &quot;Tissue specimen&quot;
	skos:narrowerTransitive :TissueSpecimenFromHeart.
   
:SpecimenFromHeart a skos:Concept ;
	:conceptID "127462005";
	skos:prefLabel &quot;Specimen from heart&quot;
	skos:narrowerTransitive :TissueSpecimenFromHeart.

:TissueSpecimenFromHeart a skos:Concept;
	:conceptID "128166000";
	rdfs:label &quot;Tissue specimen from heart&quot;.
</code></pre>
		<div>(see functional requirement <a>F6.2</a>)</div>
	</section>
	</section>
	
	<section id="uc7">
	<h2><dfn>UC7</dfn>: Filter resource description</h2>
	<p>This use case extends the normal behaviour of retrieving an
		RDF description of a resource, by dynamically excluding specific
		(membership) properties. For containers, it is often desirable to
		be able to read a collection, or item-level description that
		excludes the container membership.</p>
		
	<section id="s7.1">
	<h3>Primary scenario: retrieve collection-level description</h3>
	<p>
		This scenario, based on <a>Library Linked Data</a>, uses the Dublin Core Metadata Initiative Collection-Level description [[DC-COLLECTIONS]]. A collection can
		refer to any aggregation of physical or digital items. This
		scenario covers the case whereby a client can request a
		collection-level description as typified by the example below,
		without necessarily having to download a full listing of the items
		within the collection.
	</p>
	<pre class='example'><code>
@prefix dc: &lt;http://purl.org/dc/elements/1.1/&gt;.
@prefix : &lt;http://example.org/bookshelf/&gt;.
@prefix dcmitype: &lt;http://purl.org/dc/dcmitype/&gt;.
@prefix cld: &lt;http://purl.org/cld/terms/&gt;.
@prefix dcterms: &lt;http://purl.org/dc/terms/&gt;.
 
&lt;&gt; dc:type dcmitype:Collection ;
	dc:title &quot;Directory of organizations working with Linked Data&quot; ;
	dcterms:abstract &quot;This is a directory of organisations specializing in Linked Data.&quot;
	cld:isLocatedAt &lt;http://dir.w3.org&gt;
	cld:isAccessedVia &lt;http://dir.w3.org/directory/pages/landing-page.xhtml?view&gt;
</code></pre>
		<div>(see functional requirement <a>F7.1</a>)</div>
	</section>
	
	<section id="s7.2">
	<h3>Alternative scenario: retrieve item-level description of a collection</h3>
	<p>
		This use case scenario, also based on <a>Library Linked Data</a>,
		focuses on obtaining an item-level description of the resources
		aggregated by a collection. The simplest scenario is where the
		members of a collection are returned within a single
		representation, so that a client can explore the data by following
		these links. Different applications may use different membership
		predicates to capture this aggregation. The example below uses
		<code>rdfs:member</code>, but many different membership predicates are in
		common use, including RDF Lists. Item-level descriptions can be
		captured using the Functional Requirements for Bibliographic
		Records (FRBR) ontology [[FRBR]] [[FRBR-CORE]].
	</p>
	<p>
	Based on the example below, the item-level description should include as a minimum all the <code>rdfs:member</code> relationships. It need not include other properties of the collection, and it need not include additional properties of the members.
	</p>
	<pre class='example'><code>
@prefix frbr: &lt;http://purl.org/vocab/frbr/core#&gt;.
@prefix dc: &lt;http://purl.org/dc/elements/1.1/&gt;.
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .

&lt;&gt; rdfs:member &lt;#ebooks97&gt;, &lt;#ebooks21279&gt;.

&lt;#work97&gt; a frbr:LiteraryWork;
    dc:title &quot;Flatland: a romance of many dimensions&quot; ;
	frbr:creator &lt;#Abbott_Edwin&gt;;
	frbr:manifestation &lt;ebook97&gt;.
 
&lt;#work21279&gt; a frbr:LiteraryWork;
	dc:title &quot;2 B R 0 2 B&quot; ;
	frbr:creator &lt;#Vonnegut_Kurt&gt;;
	frbr:manifestation &lt;ebook21279&gt;.
</code></pre>
		<div>(see functional requirement <a>F7.2</a>)</div>
	</section>
	</section>
	
	<section id="uc8">
		<h2><dfn>UC8</dfn>: Retrieve a large resource description in multiple parts</h2>

<p>This use case addresses a problem with the “resource-centric” approach to interacting with RDF data. The problem is that some resources participate in a very large number of triples, and therefore a “resource-centric” granularity leads to resource descriptions that are too large to be practically processed in a single HTTP request. This use case applies to all resources, not just containers.</p>

		<ul>
			<li>It's not really the resource description that's being paginated, but the values of a particular property.</li>
			<li>The server is responsible for pagination, and may decide how large the pages are.</li>
			<li>Pagination should apply symmetrically to both <em>incoming</em> and <em>outgoing</em> properties.</li>
			<li>The next-page URL should be treated as opaque.</li>
		</ul>
		
		<section id="s8.1">
		<h3>Primary scenario: Pagination</h3>

<p>In user story, <a>Maintaining Social Contact Information</a>, it is not uncommon for users to have a very large number of contacts.
This leads to a very large resource description, especially if some basic information about the contacts is included as well. The size of this representation may be so large that retrieval in a single HTTP request is impractical.</p>

<p>In this example the response to the first request includes a reference to the <code>next</code> resource in an ordered collection of resources. For the purposes of the example, we make use of the <code>next</code> property defined by the <a href="http://www.w3.org/1999/xhtml/vocab">XHTML Metainformation Vocabulary</a>. There is no presumption that the LDP specification will recommend the use of this vocabulary.</p>
		<pre class='example'><code>
@prefix : &lt;http://example.com/people/&gt;.
@prefix xhv: &lt;http://www.w3.org/1999/xhtml/vocab#&gt;.

:alice a foaf:Person;
   rdfs:label "Alice";
   foaf:mbox &lt;mailto:alice@example.com&gt;.
   
&lt;&gt; xhv:next &lt;http://example.com/1234567890&gt;.
		</code></pre>
		
<p>When the client requests the resource identified by <code>next</code>, the response includes additional content that can be merged with the earlier data to construct a more complete model of the originally requested resource. It may also contain further <code>next</code> links, which may be requested in turn.</p> 
		
<p>The following representation is the response to the resource identified by <code>next</code>, completing the contacts list.</p>
		
		<pre class='example'><code>
@prefix : &lt;http://example.com/people/&gt;.

:bob a foaf:Person;
   rdfs:label "Bob";
   foaf:mbox &lt;mailto:bob@example.com&gt;.
		</code></pre>
			<div>(see functional requirement <a>F8.1</a>)</div>
		</section>
	</section>
	
	<section id="uc9">
	<h2><dfn>UC9</dfn>: Manage binary resources</h2>
	<p>It should be possible to easily add non-RDF binary resources
		to containers that accept them. Binary resources may be updated and
		removed during the lifecycle of the container.</p>
		
	<section id="s9.1">
	<h3>Primary scenario: access binary resources</h3>
	<p>
		From the user story <a>Sharing Binary Resources and Metadata</a> it should be possible to
		easily add non-RDF resources to containers that accept them.
		Clients submit a non-RDF representation to a container in a media
		type accepted by that container. The container creates a URI to
		represent this media resource, and creates a link from the
		container to the new URI. The binary resource may be accompanied by an explicit RDF
		description. It should be possible to find the
		metadata about such a resource and to access and edit it in
		the usual ways.
	</p>
	<p>
		This example uses the Ontology for Media Resources to describe a media resource added to a
		collection [[MEDIAONT]].
	</p>
	<pre class='example'><code>
@prefix ma: &lt;http://www.w3.org/ns/ma-ont#&gt; .

&lt;dataset&gt; a ma:Collection ;
	ma:hasMember &lt;dataset/image1.jpg&gt;

&lt;dataset/image1.jpg&gt; a ma:MediaResource ;
	ma:hasFormat &quot;image/jpeg&quot; .
</code></pre>
		<div>(see functional requirement <a>F9.1</a>)</div>
	</section>
	
	<section id="s9.2">
	<h3>Alternative scenario: media-resource attachments</h3>
	<p>
		A resource may have multiple <em>renditions</em>. For example, you
		can have a PDF and a JPEG representing the same thing. A user is
		trying to create a work order along with an attached image showing
		a faulty machine part. To the user and to the work order system,
		these two artifacts are managed as a set. A single request may
		create the work order, the attachment, and the relationship
		between them, atomically. When the user retrieves the work order
		later, they expect a single request by default to retrieve the
		work order plus all attachments. When the user updates the work
		order, e.g. to mark it completed, they only want to update the
		work order proper, not its attachments. Users may
		add/remove/replace attachments to the work order during its
		lifetime.
	</p>
	<div>(see functional requirement <a>F9.2</a>)</div>
	</section>
	</section>
</section>

<section>
<h1 id="reqs">Requirements</h1>
<p>This section lists the functional and non-functional requirements arising from the use-cases catalogued in this document. Specific requirements that have been de-prioritized or rejected have been left in the document for completeness, but are shown as struck out.</p>
<section>
	<h2 id="reqs-functional">Functional Requirements</h2>
	<dl>
		<dt><dfn>F1.1</dfn>:</dt>
		<dd>The system shall provide the ability to create containers for composing resources, from <a>UC1</a>.
		</dd>
		<dt><dfn>F1.2</dfn>:</dt>
		<dd>The system shall provide the ability to create nested containers, from <a>UC1</a>.
		</dd>
		<dt><dfn>F1.3</dfn>:</dt>
		<dd>On deletion of a container, the system shall delete any contained resources and nested containers, from <a>UC1</a>.
		</dd>
		<dt><dfn>F2.1</dfn>:</dt>
		<dd>The system shall provide the ability to create resources within a container, from <a>UC2</a>.
		</dd>
		<dt><dfn>F2.2</dfn>:</dt>
		<dd>The system shall provide the ability to delete resources, from <a>UC2</a>.
		</dd>
		<dt><dfn>F2.3</dfn>:</dt>
		<dd><span style="text-decoration:line-through;">The system shall provide the ability to move resources between containers, from <a>UC2</a></span>.
		</dd>
		<dt><dfn>F3.1</dfn>:</dt>
		<dd>The system shall provide the ability to retrieve resource descriptions, from <a>UC3</a>.
		</dd>
		<dt><dfn>F3.2</dfn>:</dt>
		<dd>The system shall enable the client to retrieve the description of a hash URI, from <a>UC3</a>.
		</dd>
		<dt><dfn>F4.1</dfn>:</dt>
		<dd>The system shall provide the ability to update an existing resource by substitution, from <a>UC4</a>.
		</dd>
		<dt><dfn>F4.2</dfn>:</dt>
		<dd>The system shall provide the ability to perform a selective update of a resource, from <a>UC4</a>.
		</dd>
		<dt><dfn>F5.1</dfn>:</dt>
		<dd>The system shall provide the ability to determine if a resource has changed, from <a>UC5</a>.
		</dd>
		<dt><dfn>F6.1</dfn>:</dt>
		<dd>The system shall provide the ability to aggregate resources, from <a>UC6</a>.
		</dd>
		<dt><dfn>F6.2</dfn>:</dt>
		<dd>The system shall support the addition of a resource to multiple aggregations, from <a>UC6</a>.
		</dd>
		<dt><dfn>F7.1</dfn>:</dt>
		<dd>The system shall provide the ability to retrieve a collection-level description of a composition, from <a>UC7</a>.
		</dd>
		<dt><dfn>F7.2</dfn>:</dt>
		<dd>The system shall provide the ability to retrieve an item-level description of a composition or aggregation, from <a>UC7</a>.
		</dd>
		<dt><dfn>F8.1</dfn></dt>
		<dd>The system shall provide the ability to retrieve a paginated description of a composition or aggregation, from <a>UC8</a>.
		</dd>
		<dt><dfn>F9.1</dfn>:</dt>
		<dd>The system shall provide the ability to store and access media resources, from <a>UC9</a>
		</dd>
		<dt><dfn>F9.2</dfn>:</dt>
		<dd><span style="text-decoration:line-through;">The system shall provide the ability to add media-resource attachments, from <a>UC9</a>.</span>
		</dd>
	</dl>
	</section>
	
	<section>
	<h2 id="reqs-non-functional">Non-Functional Requirements</h2>
	<dl>
		<dt><dfn>NF1.1</dfn>:</dt>
		<dd>The system shall provide access guidance to resources, from <a>UC1</a>.
		</dd>
		<dt><dfn>NF2.1</dfn>:</dt>
		<dd>The system shall encourage non-duplication of resources, from <a>UC2</a>.
		</dd>
		<dt><dfn>NF2.2</dfn>:</dt>
		<dd>The system shall support distribution of resources, from <a>UC2</a>.
		</dd>
		<dt><dfn>NF2.3</dfn>:</dt>
		<dd>The system shall support consistent, global naming, from <a>UC2</a>.
		</dd>
		<dt><dfn>NF3.1</dfn>:</dt>
		<dd>The system shall support the use of standard vocabularies where appropriate, from <a>UC3</a>.
		</dd>
		<dt><dfn>NF3.2</dfn>:</dt>
		<dd>The system shall provide a scalable linking model, from <a>UC3</a>.
		</dd>
		<dt><dfn>NF4.1</dfn>:</dt>
		<dd>The system shall permit unrestricted vocabulary, from <a>UC4</a>.
		</dd>
		<dt><dfn>NF5.1</dfn>:</dt>
		<dd>The LDP shall ensure consistent access in the case of multiple simultaneous attempts to access a resource, from <a>UC5</a>.
		</dd>
		<dt><dfn>NF6.1</dfn>:</dt>
		<dd>The system shall allow resource descriptions that are a "mix of simple data and collections", from <a>UC6</a>.
		</dd>
		<dt><dfn>NF6.2</dfn>:</dt>
		<dd>The system shall support relative URIs enabling sharing of collections, from <a>UC6</a>.
		</dd>
	</dl>
	</section>
</section>


<section class='appendix informative'>
<h2 id="acknowledgements">Acknowledgements</h2>
<p>We would like to acknowledge the contributions of user story authors: Christophe Guéret,
Roger Menday, Eric Prud'hommeaux, Steve Speicher, John Arwe, Kevin Page.</p>
</section>
    
<!--section class='appendix informative' id="history">
<h1>Change History</h1>
<ul>
	<li>2012-12-14 - Initial ReSpec'ing framework for <a href="http://www.w3.org/2012/ldp/wiki/Use_Cases_And_Requirements">Workgroup working wiki document</a> (SS)</li>
	<li>2012-12-16 - Pulled in and ReSpec'd content from <a href="http://www.w3.org/2012/ldp/wiki/Use_Cases_And_Requirements">Workgroup working wiki document</a> (SS)</li>
	<li>2012-12-16 - Fixed cross section links and initial pass at biblio refs (SS)</li>
</ul></section-->
    
  </body>
</html>