--- a/Test Cases/LDP Test Cases.html Mon Jun 17 17:07:40 2013 +0100
+++ b/Test Cases/LDP Test Cases.html Mon Jun 17 17:08:22 2013 +0100
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
prefix="td: http://www.w3.org/2006/03/test-description# tn: http://ldp.example.org/NewTestDefinitions# ht: http://www.w3.org/2011/http#">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- rgarcia: Had to uncomment it so it can read the local image
<base href="http://www.w3.org/TR/ldp/TestCases">-->
<title>Linked Data Platform 1.0 Test Cases</title>
<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-test-cases",
// 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-03-07",
//previousMaturity: "FPWD",
//previousURI: "http://www.w3.org/TR/2013/WD-ldp-20130307/",
// if there a publicly available Editor's Draft, this is the link
//edDraftURI: "http://www.w3.org/2012/ldp/hg/ldp.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: "Raúl García-Castro", url: "http://delicias.dia.fi.upm.es/~rgarcia/",
company: "Ontology Engineering Group, Universidad Politécnica de Madrid", companyURL: "http://www.oeg-upm.net/" },
//{ name: "John Arwe", url: "https://www.ibm.com/developerworks/mydeveloperworks/groups/service/html/allcommunities?userid=120000CAW7",
// 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-wg",
// 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",
};
</script>
</head>
<body>
<section id='abstract'>
To be written.
</section>
<section>
<h2><a id="Introduction">Introduction</a></h2>
<p>This document describes...</p>
</section>
<section>
<h2><a id="DesignIssues">Design issues </a></h2>
<section>
<h3><a id="GenericVsDomain">Generic vs domain-specific servers</a></h3>
<p>There will be two types of systems implementing the LDP specification:</p>
<ul>
<li>Generic RDF storage systems that allow interacting with their resources by means of the LDP specification.
These servers do not impose any restriction on LDPRs.</li>
<li>Systems exposing their data using the LDP specification. These systems impose restrictions on LDPRs since they
have an underlying business logic and data model.</li>
</ul>
<p>In order to cover both types of systems, we do not provide specific input data in the test suite. It is up to the
evaluator to define specific input data for a certain system. Evaluators must include these input data along with
the results when reporting the results of a certain system.</p>
</section>
<section>
<h3><a id="ProtocolVsData">Protocol evaluation vs data evaluation</a></h3>
<p>The LDP specification includes restrictions on LDP servers at the protocol level and at the data level.
Currently, the restrictions at the data level are minimal and servers are not forced to have a certain behaviour
when processing LDPR representations. Therefore, the test suite evaluates LDP servers at a protocol level; the
only exception is in the case of LDPCs, since they are required to include an rdf.type statement in their
representation.</p>
<p>It is out of the scope of the test suite to test LDP servers in terms of the restrictions imposed by their
underlying data models.</p>
</section>
<section>
<h3><a id="Coverage">Test suite coverage</a></h3>
<p>This test suite only covers those absolute requirements present in the LDP specification (as stated by the use of
the MUST key word). This set of absolute requirements identifies the core subset of the LDP specification, <dfn>LDP Core</dfn> from now on, and any LDP server that satisfies these absolute requirements will be an LDP Core conformant
server.</p>
<p>It is out of the scope of this test suite to test other levels of conformance in terms of optional capabilities
(e.g., paging).</p>
</section>
<section>
<h3><a id="ResultVsAssertion">Separation of results and assertions</a></h3>
<p>Instead of defining expected results for tests, which will be dependent on specific implementations, we have
defined the assertions to be made over test results. In order to successfully pass a test, all of the assertions must
be satisfied.</p>
<p>Separating test outputs and assertions has other benefits: it makes simpler to report tool results and assertions
can be made by a third party.</p>
</section>
<section>
<h3><a id="Traceability">Traceability of test cases</a></h3>
<p>Any test case and its produced results and assertions should be related to those documents that are relevant for
it (e.g., specifications, uses cases, etc.).</p>
</section>
</section>
<section>
<h2><a id="TestingProcess">Testing process</a></h2>
<p>The LDP Test Cases are defined in this same page, which is annotated using RDFa so that it can be consumed both by
persons and machines. The testing process is composed of two steps, depicted in the figure below.</p>
<ol>
<li>The person or agent in charge of executing the test cases in a specific LDP server will take the test case definitions and run every test case on the LDP server. It is recommended (but not required) that test execution is automated. The execution of test cases must produce a test execution report for the LDP server, in RDF format, that contains for every test case: the specific inputs used during its execution, the produced outputs, and the assertion of whether the test case is passed. The test execution report must be available in the Web.</li>
<li>A report generator software will take all the LDP server execution reports and will generate an implementation report that includes the results of all the LDP servers.</li>
</ol>
<p>
<object data="TestingProcess.svg" type="image/svg+xml">Your browser does not support SVG.</object>
</p>
</section>
<section>
<h2><a id="DescribingArtifacts">Describing testing artifacts in RDF</a></h2>
<section>
<h3><a id="Namespaces">Namespaces used</a></h3>
<p>The following vocabularies are reused for describing the testing artifacts: DOAP (<code>doap</code>), Dublin Core (<code>dc</code>),
FOAF (<code>foaf</code>), HTTP Vocabulary in RDF (<code>ht</code>), and W3C Test Metadata (<code>td</code>).</p>
<p>All the new required entities that are not covered by those vocabularies have been defined under a new namespace
(<code>tn</code>). Besides, the LDP test cases have been defined under their own namespace (<code>ldptc</code>).</p>
<p>Next we present the definition of these namespaces and of all the namespaces used in the examples.</p>
<pre>cnt: <http://www.w3.org/2011/content#>
dc: <http://purl.org/dc/terms/>
doap: <http://usefulinc.com/ns/doap#>
earl: <http://www.w3.org/ns/earl#>
foaf: <http://xmlns.com/foaf/0.1/>
ht: <http://www.w3.org/2011/http#>
httph: <http://www.w3.org/2011/http-headers#>
ldptc: <http://www.w3.org/TR/ldp/TestCases#>
td: <http://www.w3.org/2006/03/test-description#>
tn: <http://ldp.example.org/NewTestDefinitions#></pre>
</section>
<section>
<h3><a id="TestSuiteDescription">Test suite description</a></h3>
<p><em>To be completed</em></p>
</section>
<section>
<h3><a id="TestCaseDescription">Test case description</a></h3>
<p>A <dfn id="dfn-test-case" title="test case">test case</dfn> is defined as an instance of the <code>td:TestCase</code> class and it can be further
described using the following properties:</p>
<ul>
<li><code>rdfs:label</code>. The human-readable label of the test.</li>
<li><code>dc:title</code>. The name of the test.</li>
<li><code>dc:description</code>. The description of the test.</li>
<li><code>dc:contributor</code>. The person (<code>foaf:Person</code>) contributing the test.</li>
<li><code>td:reviewStatus</code>. The status of the test; possible status are: <code>td:unreviewed</code>, <code>td:approved</code>
or <code>td:rejected</code>.</li>
<li><code>rdfs:seeAlso</code>. A link to the specification it refers to.</li>
<li><code>td:specificationReference</code>. An <a>excerpt</a> (<code>tn:Excerpt</code>) of the specification that is
relevant to the test.</li>
<li><code>td:input</code>. An <a>input</a> (<code>tn:TestInput</code>) used in the test.</li>
<li><code>td:precondition</code>. A precondition that must be satisfied before running the test.</li>
<li><code>tn:output</code>. An <a href="#dfn-test-output">output</a> (<code>tn:TestOutput</code>) to be produced by the test.</li>
<li><code>tn:testProcess</code>. The list of <a href="#dfn-step">steps</a> (<code>tn:Step</code>) to be performed during the test.</li>
<li><code>tn:testAssertion</code>. An <a href="#dfn-test-assertion">assertion</a> (<code>tn:TestAssertion</code>) to be performed over the test output.</li>
</ul>
<p>An <dfn id="dfn-excerpt" title="excerpt">excerpt</dfn> is defined as an instance of the <code>tn:Excerpt </code>class and it can be
further described using the following properties:</p>
<ul>
<li><code>rdfs:seeAlso</code>: The document where the excerpt is included.</li>
<li><code>tn:includesText</code>. The excerpt from the document.</li>
</ul>
<p>A <dfn id="dfn-test-input" title="test input">test input</dfn> is defined as an instance of the <code>td:TestInput </code>class and it can be
further described using the following properties:</p>
<ul>
<li><code>dc:title</code>: The name of the test input.</li>
<li><code>dc:description</code>. The description of the test input.</li>
</ul>
<p>A <dfn id="dfn-test-output" title="test output">test output</dfn> is defined as an instance of the <code>td:TestOutput</code>
class and it can be further described using the following properties:</p>
<ul>
<li><code>dc:title</code>: The name of the test output.</li>
<li><code>dc:description</code>. The description of the test output.</li>
<li><code>tn:fromStep</code>. The <a href="#dfn-step">step</a> in the process in which the output is produced.</li>
</ul>
<p>In the LDP test cases, test outputs are expected to be HTTP responses (<code>ht:Response</code>).</p>
<p>A <dfn id="dfn-step" title="test input">step</dfn> in the test process is defined as an instance of the <code>td:Step</code> class and it
can be further described using the following properties:</p>
<ul>
<li><code>dc:description</code>. The description of the step.</li>
<li><code>tn:usesInput</code>. A <a href="#dfn-test-input">test input</a> used in the step.</li>
</ul>
<p>In the LDP test cases, steps are expected to be HTTP requests (<code>ht:Request</code>).</p>
<p>A <dfn id="dfn-test-assertion" title="test assertion">test assertion</dfn> is defined as an instance of the <code>td:TestAssertion</code> class and it
can be further described using the following properties:</p>
<ul>
<li><code>dc:title</code>: The name of the test assertion.</li>
<li><code>dc:description</code>. The description of the test assertion.</li>
<li><code>tn:outputAsserted</code>. An <a href="#dfn-test-output">output</a> under assertion.</li>
</ul>
<p>The following example contains the description of one of the LDP test cases.</p>
<pre class="example" id="test-case-example">:TCR1 a td:TestCase;
rdfs:label "TC-R1";
dc:title "GET on an LDPR";
dc:description "Tests making a GET request on an existing LDPR";
dc:contributor :RaulGarciaCastro;
td:reviewStatus td:unreviewed;
rdfs:seeAlso <http://www.w3.org/TR/ldp/>;
td:specificationReference [
a tn:Excerpt;
rdfs:seeAlso <http://www.w3.org/TR/ldp/>;
tn:includesText "4.1.12 LDPR server responses MUST use entity tags (either weak or strong ones) as response ETag header values.".
],
[
a tn:Excerpt;
rdfs:seeAlso <http://www.w3.org/TR/ldp/>;
tn:includesText "4.2.1 LDPR servers MUST support the HTTP GET Method for LDPRs.".
],
[
a tn:Excerpt;
rdfs:seeAlso <http://www.w3.org/TR/ldp/>;
tn:includesText "4.2.2 LDPR servers MUST provide a text/turtle representation of the requested LDPR.".
];
td:input :TCR1-I1-LDPR-URI;
td:precondition "The LDP server contains an LDPR at <LDPR URI>";
tn:output :TCR1-RP1-Response-1-GET;
tn:testProcess (:TCR1-RQ1-GET-LDPR-URI);
tn:testAssertion :TCR1-A1-Response-1-GET.
:RaulGarciaCastro a foaf:Person;
rdfs:label "Raúl García-Castro";
owl:sameAs <http://delicias.dia.fi.upm.es/~rgarcia/#me>.
:TCR1-I1-LDPR-URI a tn:TestInput;
dc:title "<LDPR URI>";
dc:description "The URI of an LDPR".
:TCR1-RP1-Response-1-GET a tn:TestOutput;
a ht:Response;
tn:fromStep :TCR1-RQ1-GET-LDPR-URI;
dc:title "<Response 1 GET>";
dc:description "The response of the GET request in step 1".
:TCR1-RQ1-GET-LDPR-URI a tn:Step;
a ht:Request;
dc:description """GET <LDPR URI>
[request-header].Accept = text/turtle""";
tn:usesInput :TCR1-I1-LDPR-URI.
:TCR1-A1-Response-1-GET a tn:TestAssertion;
tn:outputAsserted :TCR1-O1-Response-1-GET;
dc:title "GET correct";
dc:description """[Status-Line].Status-Code = 2xx
[response-header].ETag exists
[entity-header].Content-Type = text/turtle""".
</pre>
</section>
<section>
<h3><a id="ExecutionReportDescription">Execution report description</a></h3>
<p>A <dfn id="dfn-test-execution" title="test execution">test execution</dfn> is defined as an instance of the <code>tn:TestExecution</code> class and it can
be further described using the following properties:</p>
<ul>
<li><code>tn:testExecuted</code>. The <a href="#dfn-test-case">test case</a> (<code>td:TestCase</code>) used in the execution.</li>
<li><code>tn:subjectTested</code>. The subject (<code>doap:Project</code>) tested.</li>
<li><code>dc:date</code>. The date when the test was executed.</li>
<li><code>tn:inputUsed</code>. The <a href="#dfn-test-input-value">input value</a> (<code>tn:TestInputValue</code>) used in the execution.</li>
<li><code>tn:outputProduced</code>. The <a href="#dfn-test-output-value">output value</a> (<code>tn:TestOutputValue</code>) produced in the execution.</li>
</ul>
<p>A <dfn id="dfn-test-input-value" title="test input value">test input value</dfn> is defined as an instance of the <code>tn:TestInputValue</code> class and it
can be further described using the following properties:</p>
<ul>
<li><code>tn:relatedInput</code>. The <a href="#dfn-test-input">input</a> in the test definition (<code>tn:TestInput</code>) for which the value is
defined.</li>
<li><code>tn:inputValue</code>. The specific input defined for the execution.</li>
</ul>
<p>A <dfn id="dfn-test-output-value" title="test output value">test output value</dfn> is defined as an instance of the <code>tn:TestOutputValue</code> class and it
can be further described using the following properties:</p>
<ul>
<li><code>tn:relatedOutput</code>. The <a href="#dfn-test-output">output</a> in the test definition (<code>tn:TestOutput</code>) for which the value is
defined.</li>
<li><code>tn:outputValue</code>. The specific output defined for the execution.</li>
</ul>
<p>In the LDP test cases, test output values are expected to be HTTP responses (<code>ht:Response</code>).</p>
<p>The following example contains the description of one test execution.</p>
<pre class="example" id="execution-report-example">:TCR1-Execution a tn:TestExecution;
tn:testExecuted ldptc:TCR1;
tn:subjectTested :SomeServer;
dc:date "2013-03-30T09:30:10";
tn:inputUsed [
a tn:TestInputValue ;
tn:relatedInput :TCR1-I1-LDPR-URI ;
tn:inputValue <http://www.example.org/MyResource> .
];
tn:outputProduced [
a tn:TestOutputValue ;
tn:relatedOutput :TCR1-RP1-Response-1-GET ;
tn:outputValue :TCR1-Exec-Response-1-GET .
].
:SomeServer a doap:Project;
doap:name "Sample server".
:TCR1-Exec-Response-1-GET a ht:Response;
ht:httpVersion "1.1";
dc:date "2013-03-30T09:30:10";
ht:sc <http://www.w3.org/2011/http-statusCodes#OK>;
ht:statusCodeValue "200";
ht:reasonPhrase "OK";
ht:headers (
[
a ht:ResponseHeader;
ht:hdrName httph:etag;
ht:fieldName "ETag";
ht:fieldValue "hd73hck43".
]
[
a ht:EntityHeader;
ht:hdrName httph:content-type;
ht:fieldName "Content-Type";
ht:fieldValue "text/turtle; charset=utf-8".
]
);
ht:body [
a cnt:ContentAsText ;
cnt:chars """
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix dc: <http://purl.org/dc/terms/>.
@prefix ldp: <http://www.w3.org/ns/ldp#>.
<http://example.org/MyResource>
a ldp:Resource;
dc:title "My LDP resource".
""";
cnt:characterEncoding "UTF-8".
].
</pre>
</section>
<section>
<h3><a id="AssertionDescription">Test case assertion description</a></h3>
<p>An <dfn id="dfn-assertion" title="assertion">assertion</dfn> is defined as an instance of the <code>earl:Assertion</code> class and it can be
further described using the following properties:</p>
<ul>
<li><code>earl:subject</code>.The subject (<code>doap:Project</code>) asserted.</li>
<li><code>earl:test</code>. The <a href="#dfn-test-case">test case</a> (<code>td:TestCase</code>) to which the assertion refers to.</li>
<li><code>tn:fromTestExecution</code>. The <a href="#dfn-test-execution">test execution</a> (<code>td:TestExecution</code>) used in the assertion.</li>
<li><code>dc:date</code>. The date when the assertion was performed.</li>
<li><code>earl:assertedBy</code>. The validator (<code>doap:Project</code>) that makes the assertion.</li>
<li><code><code>earl:mode</code>.</code> The execution mode of the validator. In this case it will always be <code>earl:automatic</code>.</li>
<li><code>earl:result</code>. The outcome value (<code>earl:OutcomeValue</code>) of the assertion.</li>
</ul>
<p>The following example contains the description of one test assertion.</p>
<pre class="example" id="test-assertion-example">:TCR1-Assertion-SomeServer a earl:Assertion;
earl:subject sr:SomeServer;
earl:test ldptc:TCR1;
tn:fromTestExecution sr:TCR1-Execution;
dc:date "2013-03-30T09:30:10";
earl:assertedBy :Validator;
earl:mode: earl:automatic;
earl:result [
a earl:OutcomeValue ;
earl:outcome earl:passed .
].
:Validator a doap:Project;
doap:name "Some validator".</pre>
</section>
</section>
<section>
<h2><a id="Tests-LDPRs"></a>Tests for LDPRs</h2>
<p>These tests involve only LDPRs.</p>
<section resource="#TCR1" typeof="td:TestCase">
<h3><a id="TC-R1"><span property="rdfs:label">TC-R1</span>. <span property="dc:title">GET on an LDPR</span></a></h3>
<p property="dc:description">Tests making a GET request on an existing LDPR.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong><span property="rdfs:label">Raúl
García-Castro</span><span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed
-</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a>:</em></p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.1.12 LDPR server responses MUST use entity tags (either weak or strong ones) as response ETag header values.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.1 LDPR servers MUST support the HTTP GET Method for LDPRs.</span><span
property="rdfs:seeAlso"
href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.2 LDPR servers MUST provide a text/turtle representation of the requested LDPR.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR1-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR
URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR1-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description"> GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR1-I1-LDPR-URI"> </span></li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR1-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"> <em property="dc:title"><Response
- 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span> <span property="tn:fromStep"
resource="#TCR1-RQ1-GET-LDPR-URI">
</span></li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR1-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted"
resource="TCR1-O1-Response-1-GET">Assert
+</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a>:</em></p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.1.12 LDPR server responses MUST use entity tags (either weak or strong ones) as response ETag header values.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.1 LDPR servers MUST support the HTTP GET Method for LDPRs.</span><span
property="rdfs:seeAlso"
href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.2 LDPR servers MUST provide a text/turtle representation of the requested LDPR.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR1-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR1-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description"> GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR1-I1-LDPR-URI"> </span></li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR1-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"> <em property="dc:title"><Response
+ 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span> <span property="tn:fromStep" resource="#TCR1-RQ1-GET-LDPR-URI"></span></li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR1-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted"
resource="TCR1-O1-Response-1-GET">Assert
<Response 1 GET> (<span property="dc:title">GET correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR2" typeof="td:TestCase">
<h3><a id="TC-R2"><span property="rdfs:label">TC-R2</span>. <span property="dc:title">GET on an LDPR without content type</span></a></h3>
<p property="dc:description">Tests making a GET request on an existing LDPR without indicating a content type.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl
- García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.3 [...] If the client does not indicate a preference, text/turtle MUST be returned.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR2-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR2-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI></div>
<span property="tn:usesInput" resource="#TCR2-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR2-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span> <span property="tn:fromStep"
resource="#TCR2-RQ1-GET-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR2-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR2-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR3" typeof="td:TestCase">
<h3><a id="TC-R3"><span property="rdfs:label">TC-R3</span>. <span property="dc:title">GET on a non-existing LDPR</span></a></h3>
<p property="dc:description">Tests making a GET request on a non-existing LDPR.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.5.1 LDPR servers MUST remove the resource identified by the Request-URI. After a successful HTTP DELETE, a
subsequent HTTP GET on the same Request-URI MUST result in a 404 (Not found) or 410 (Gone) status code.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR3-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of a non-existing LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server does not contain an LDPR at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR3-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR3-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR3-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCR3-RQ1-GET-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR3-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR3-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET incorrect</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 404 or 410</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR4" typeof="td:TestCase">
<h3><a id="TC-R4"><span property="rdfs:label">TC-R4</span>. <span property="dc:title">PUT on an LDPR</span></a></h3>
<p property="dc:description">Tests making a PUT request on an LDPR.</p> <p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://tools.ietf.org/html/rfc2616" property="rdfs:seeAlso">Hypertext Transfer Protocol -- HTTP/1.1</a>:</em></p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">3.11 [...] An entity tag MUST be unique across all versions of all entities associated with a particular
resource.</span><span property="rdfs:seeAlso" href="http://tools.ietf.org/html/rfc2616"></span></div>
</li>
</ul>
<h4>Input </h4>
<ul>
<li property="td:input" resource="#TCR4-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
<li property="td:precondition">The LDPR at <LDPR URI> allows PUT</li>
<li property="td:precondition">The LDP server allows updating in the LDPR the current representation at <LDPR URI></li>
<li property="td:precondition">The LDP server does not desire that the request be applied to a different URI</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR4-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR4-I1-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCR4-RQ2-PUT-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">PUT <LDPR URI>
<ul>
<li>[request-header].If-Match = <Response GET 1>.[response-header].ETag</li>
<li>[message-body] = <Response GET 1>.[message-body]</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR4-I1-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCR4-RQ3-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR4-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR4-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCR4-RQ1-GET-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCR4-RP2-Response-2-PUT" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 PUT></em>. <span property="dc:description">The response of the PUT request in step 2.</span>
<span property="tn:fromStep" resource="#TCR4-RQ2-PUT-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCR4-RP3-Response-3-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 3 GET></em>. <span property="dc:description">The response of the GET request in step 3.</span>
<span property="tn:fromStep" resource="#TCR4-RQ3-GET-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR4-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR4-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCR4-A2-Response-2-PUT" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR4-O2-Response-2-PUT">Assert <Response 2 PUT> (<span property="dc:title">PUT correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCR4-A3-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCR4-A4-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">LDPR updated</span>):
<div property="dc:description">
<ul>
<li>[response-header].ETag != <Response 1 GET>.[response-header].ETag</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR5" typeof="td:TestCase">
<h3><a id="TC-R5"><span property="rdfs:label">TC-R5</span>. <span property="dc:title">PUT on an LDPR without matching ETags</span></a></h3>
<p property="dc:description">Tests making a PUT request on an LDPR without matching ETags.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.4.2 [...] LDPR servers MUST respond with status code 412 (Condition Failed) if ETags fail to match if there are no other errors with the request.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input </h4>
<ul>
<li property="td:input" resource="#TCR5-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
<li property="td:precondition">The LDPR at <LDPR URI> allows PUT</li>
<li property="td:precondition">The LDP server allows updating in the LDPR the current representation at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR5-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR5-I1-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCR5-RQ2-PUT-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">PUT <LDPR URI>
<ul>
<li>[request-header].If-Match = <Response GET 1>.[response-header].ETag + 'M'</li>
<li>[message-body] = <Response GET 1>.[message-body]</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR5-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR5-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCR5-RQ1-GET-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCR5-RP2-Response-2-PUT" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 PUT></em>. <span property="dc:description">The response of the PUT request in step 2.</span>
<span property="tn:fromStep" resource="#TCR5-RQ2-PUT-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR5-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR5-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCR5-A2-Response-2-PUT" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR5-O2-Response-2-PUT">Assert <Response 2 PUT> (<span property="dc:title">PUT correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 412</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR6" typeof="td:TestCase">
<h3><a id="TC-R6"><span property="rdfs:label">TC-R6</span>. <span property="dc:title">DELETE on an LDPR</span></a></h3>
<p property="dc:description">Tests making a DELETE request on an LDPR.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.5.1 LDPR servers MUST remove the resource identified by the Request-URI. After a successful HTTP DELETE, a subsequent HTTP GET on the same Request-URI MUST result in a 404 (Not found) or 410 (Gone) status code.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR6-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
<li property="td:precondition">The LDPR at <LDPR URI> allows DELETE</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR6-RQ1-DELETE-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">DELETE <LDPR URI>
</div>
<span property="tn:usesInput" resource="#TCR6-I1-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCR6-RQ2-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR6-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR6-RP1-Response-1-DELETE" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 DELETE></em>. <span property="dc:description">The response of the DELETE request in step 1.</span>
<span property="tn:fromStep" resource="#TCR6-RQ1-DELETE-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCR6-RP2-Response-2-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 GET></em>. <span property="dc:description">The response of the GET request in step 2.</span>
<span property="tn:fromStep" resource="#TCR6-RQ2-GET-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR6-A1-Response-1-DELETE" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR6-O1-Response-1-DELETE">Assert <Response 1 DELETE> <Response 2 GET> (<span property="dc:title">DELETE correct</span>):
<div property="dc:description">
<ul>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 200 or 204 and <Response 2 GET>.[Status-Line].Status-Code = 404 or 410</li>
<li>or </li>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 2xx (except 200 and 204) </li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR7" typeof="td:TestCase">
<h3><a id="TC-R7"><span property="rdfs:label">TC-R7</span>. <span property="dc:title">HEAD on an LDPR</span></a></h3>
<p property="dc:description">Tests making a HEAD request on an LDPR.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.6.1 LDPR servers MUST support the HTTP HEAD method.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.6.2 LDPR servers MUST indicate their support for HTTP Methods by responding to a HTTP HEAD request on the LDPR’s URL with the HTTP Method tokens in the HTTP response header “Allow”. </span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<p><em><a target="_blank" href="http://tools.ietf.org/html/rfc2616" property="rdfs:seeAlso">Hypertext Transfer Protocol -- HTTP/1.1</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">9.4 The HEAD method is identical to GET except that the server MUST NOT return a message-body in the
response.</span><span property="rdfs:seeAlso" href="http://tools.ietf.org/html/rfc2616"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR7-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR7-RQ1-HEAD-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">HEAD <LDPR URI>
</div>
<span property="tn:usesInput" resource="#TCR7-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR7-RP1-Response-1-HEAD" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 HEAD></em>. <span property="dc:description">The response of the HEAD request in step 1.</span>
<span property="tn:fromStep" resource="#TCR7-RQ1-HEAD-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR7-A1-Response-1-HEAD" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR7-O1-Response-1-HEAD">Assert <Response 1 HEAD> (<span property="dc:title">HEAD correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx<strong> </strong></li>
<li>[entity-header].Allow exists</li>
<li>[message-body] not exists</li>
</ul>
</div>
</div></li>
</ul>
</section>
</section>
<section>
<h2><a id="Tests-LDPCs"></a>Tests for LDPCs</h2>
<p>These tests involve LDPCs and LDPRs.</p>
<section resource="#TCC1" typeof="td:TestCase">
<h3><a id="TC-C1"><span property="rdfs:label">TC-C1</span>. <span property="dc:title">GET on an LDPC</span></a></h3>
<p property="dc:description">Tests making a GET request on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.1.12 LDPR server responses MUST use entity tags (either weak or strong ones) as response ETag header values.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.1 LDPR servers MUST support the HTTP GET Method for LDPRs.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.2 LDPR servers MUST provide a text/turtle representation of the requested LDPR.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.2.7 The representation of a LDPC MUST have rdf:type of ldp:Container, but it MAY have additional rdf:types.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC1-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC1-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC1-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC1-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC1-RQ1-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC1-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC1-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC1-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC1-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC2" typeof="td:TestCase">
<h3><a id="TC-C2"><span property="rdfs:label">TC-C2</span>. <span property="dc:title">GET on an LDPC without content type</span></a></h3>
<p property="dc:description">Tests making a GET request on an LDPC without content type.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.3 [...] If the client does not indicate a preference, text/turtle MUST be returned.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC2-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC2-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
</div>
<span property="tn:usesInput" resource="#TCC2-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC2-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC2-RQ1-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC2-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC2-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC2-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC2-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC3" typeof="td:TestCase">
<h3><a id="TC-C3"><span property="rdfs:label">TC-C3</span>. <span property="dc:title">GET on a non-existing LDPC</span></a></h3>
<p property="dc:description">Tests making a GET request on an non-existing LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.5.1 LDPR servers MUST remove the resource identified by the Request-URI. After a successful HTTP DELETE, a
subsequent HTTP GET on the same Request-URI MUST result in a 404 (Not found) or 410 (Gone) status code.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC3-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of a non-existing LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server does not contain an LDPC at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC3-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC3-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC3-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC3-RQ1-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC3-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC3-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET incorrect</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 404 or 410</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC4" typeof="td:TestCase">
<h3><a id="TC-C4"><span property="rdfs:label">TC-C4</span>. <span property="dc:title">PUT on an LDPC</span></a></h3>
<p property="dc:description">Tests making a PUT request on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://tools.ietf.org/html/rfc2616" property="rdfs:seeAlso">Hypertext Transfer Protocol -- HTTP/1.1</a>:</em></p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">3.11 [...] An entity tag MUST be unique across all versions of all entities associated with a particular
resource.</span><span property="rdfs:seeAlso" href="http://tools.ietf.org/html/rfc2616"></span></div>
</li>
</ul>
<h4>Input </h4>
<ul>
<li property="td:input" resource="#TCC4-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDPC at <LDPC URI> allows PUT</li>
<li property="td:precondition">The LDP server allows updating in the LDPC the current representation at <LDPC URI></li>
<li property="td:precondition">The LDP server does not desire that the request be applied to a different URI</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC4-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC4-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC4-RQ2-PUT-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">PUT <LDPC URI>
<ul>
<li>[request-header].If-Match = <Response GET 1>.[response-header].ETag</li>
<li>[message-body] = <Response GET 1>.[message-body]</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC4-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC4-RQ3-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC4-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC4-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC4-RQ1-GET-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC4-RP2-Response-2-PUT" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 PUT></em>. <span property="dc:description">The response of the PUT request in step 2.</span>
<span property="tn:fromStep" resource="#TCC4-RQ2-PUT-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC4-RP3-Response-3-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 3 GET></em>. <span property="dc:description">The response of the GET request in step 3.</span>
<span property="tn:fromStep" resource="#TCC4-RQ3-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC4-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A3-Response-2-PUT" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O2-Response-2-PUT">Assert <Response 2 PUT> (<span property="dc:title">PUT correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A4-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A5-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A6-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">LDPC updated</span>):
<div property="dc:description">
<ul>
<li>[response-header].ETag != <Response 1 GET>.[response-header].ETag</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC5" typeof="td:TestCase">
<h3><a id="TC-C5"><span property="rdfs:label">TC-C5</span>. <span property="dc:title">PUT on an LDPC without matching ETags</span></a></h3>
<p property="dc:description">Tests making a PUT request on an LDPC without matching ETags.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.4.2 [...] LDPR servers MUST respond with status code 412 (Condition Failed) if ETags fail to match if
there are no other errors with the request.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC5-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDPC at <LDPC URI> allows PUT</li>
<li property="td:precondition">The LDP server allows updating in the LDPC the current representation at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC5-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC5-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC5-RQ2-PUT-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">PUT <LDPC URI>
<ul>
<li>[request-header].If-Match = <Response GET 1>.[response-header].ETag + 'M'</li>
<li>[message-body] = <Response GET 1>.[message-body]</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC5-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC5-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC5-RQ1-GET-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC5-RP2-Response-2-PUT" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 PUT></em>. <span property="dc:description">The response of the PUT request in step 2.</span>
<span property="tn:fromStep" resource="#TCC5-RQ2-PUT-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC5-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC5-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC5-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC5-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC5-A3-Response-2-PUT" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC5-O2-Response-2-PUT">Assert <Response 2 PUT> (<span property="dc:title">PUT correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 412</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC6" typeof="td:TestCase">
<h3><a id="TC-C6"><span property="rdfs:label">TC-C6</span>. <span property="dc:title">DELETE on an LDPC</span></a></h3>
<p property="dc:description">Tests making a DELETE request on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.5.1 LDPR servers MUST remove the resource identified by the Request-URI. After a successful HTTP DELETE, a subsequent HTTP GET on the same Request-URI MUST result in a 404 (Not found) or 410 (Gone) status code.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC6-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDPC at <LDPC URI> allows DELETE</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC6-RQ1-DELETE-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">DELETE <LDPC URI>
</div>
<span property="tn:usesInput" resource="#TCC6-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC6-RQ2-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC6-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC6-RP1-Response-1-DELETE" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 DELETE></em>. <span property="dc:description">The response of the DELETE request in step 1.</span>
<span property="tn:fromStep" resource="#TCC6-RQ1-DELETE-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC6-RP2-Response-2-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 GET></em>. <span property="dc:description">The response of the GET request in step 2.</span>
<span property="tn:fromStep" resource="#TCC6-RQ2-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC6-A1-Response-1-DELETE" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC6-O1-Response-1-DELETE">Assert <Response 1 DELETE> <Response 2 GET> (<span property="dc:title">DELETE correct</span>):
<div property="dc:description">
<ul>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 200 or 204 and <Response 2 GET>.[Status-Line].Status-Code = 404 or 410</li>
<li>or </li>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 2xx (except 200 and 204)</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC7" typeof="td:TestCase">
<h3><a id="TC-C7"><span property="rdfs:label">TC-C7</span>. <span property="dc:title">DELETE on an LDPR in an LDPC</span></a></h3>
<p property="dc:description">Tests making a DELETE request on an LDPR in an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.6.1 When a LDPC member resource originally created by the LDPC (for example, one referenced by a membership triple) is deleted, and the LDPC server is aware of the member's deletion (for example, the member is managed by the same server), the LDPC server MUST also remove it from the LDPC by removing the corresponding membership triple.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC7-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
<li property="td:input" resource="#TCC7-I2-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR that is a member of the LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
<li property="td:precondition">The LDPR is a member of the LDPC</li>
<li property="td:precondition">The LDPR at <LDPR URI> allows DELETE</li>
<li property="td:precondition">The LDPR was originally created by the LDPC</li>
<li property="td:precondition">The LDPC is aware of the member's deletion</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC7-RQ1-DELETE-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">DELETE <LDPR URI>
</div>
<span property="tn:usesInput" resource="#TCC7-I2-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC7-RQ2-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC7-I2-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC7-RQ3-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC7-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC7-RP1-Response-1-DELETE" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 DELETE></em>. <span property="dc:description">The response of the DELETE request in step 1.</span>
<span property="tn:fromStep" resource="#TCC7-RQ1-DELETE-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCC7-RP2-Response-2-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 GET></em>. <span property="dc:description">The response of the GET request in step 2.</span>
<span property="tn:fromStep" resource="#TCC7-RQ2-GET-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCC7-RP3-Response-3-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 3 GET></em>. <span property="dc:description">The response of the GET request in step 3.</span>
<span property="tn:fromStep" resource="#TCC7-RQ3-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC7-A1-Response-1-DELETE" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC7-O1-Response-1-DELETE">Assert <Response 1 DELETE> <Response 2 GET> (<span property="dc:title">DELETE correct</span>):
<div property="dc:description">
<ul>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 200 or 204 and <Response 2 GET>.[Status-Line].Status-Code = 404 or 410<strong> </strong></li>
<li>or </li>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 2xx (except 200 and 204)</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC7-A2-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC7-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC7-A3-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC7-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC7-A4-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC7-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">member removed from container</span>)
<div property="dc:description">
<ul>
<li>[message-body] not contains the member identified by <LDPR URI></li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC8" typeof="td:TestCase">
<h3><a id="TC-C8"><span property="rdfs:label">TC-C8</span>. <span property="dc:title">HEAD on an LDPC</span></a></h3>
<p property="dc:description">Tests making a HEAD request on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.6.1 LDPR servers MUST support the HTTP HEAD method.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.6.2 LDPR servers MUST indicate their support for HTTP Methods by responding to a HTTP HEAD request on the LDPR’s URL with the HTTP Method tokens in the HTTP response header “Allow”.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<p><a target="_blank" href="http://tools.ietf.org/html/rfc2616" property="rdfs:seeAlso"><em>Hypertext Transfer Protocol -- HTTP/1.1</em></a>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">9.4 The HEAD method is identical to GET except that the server MUST NOT return a message-body in the
response.</span><span property="rdfs:seeAlso" href="http://tools.ietf.org/html/rfc2616"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC8-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC8-RQ1-HEAD-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">HEAD <LDPC URI>
</div>
<span property="tn:usesInput" resource="#TCC8-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC8-RP1-Response-1-HEAD" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 HEAD></em>. <span property="dc:description">The response of the HEAD request in step 1.</span>
<span property="tn:fromStep" resource="#TCC8-RQ1-HEAD-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC8-A1-Response-1-HEAD" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC8-O1-Response-1-HEAD">Assert <Response 1 HEAD> (<span property="dc:title">HEAD correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx<strong> </strong></li>
<li>[entity-header].Allow exists</li>
<li>[message-body] not exists</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC9" typeof="td:TestCase">
<h3><a id="TC-C9"><span property="rdfs:label">TC-C9</span>. <span property="dc:title">POST an LDPR on an LDPC</a></h3>
<p property="dc:description">Tests making a POST request of an LDPR on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.4.1 [...] If the resource was created successfully, LDPC servers MUST respond with status code 201 (Created) and the Location header set to the new resource’s URL. [...] </span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.4.2 After a successful HTTP POST request to a LDPC, the new resource MUST appear as a member of the LDPC until the new resource is deleted or removed by other methods. [...] </span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.4.4 For servers that support create, LDPC servers MUST create an LDPR from a RDF representation in the request entity body. [...]</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.4.5 LDPC servers MUST accept a request entity body with a request header of Content-Type with value of text/turtle. </span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC9-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
<li property="td:input" resource="#TCC9-I2-LDPR-REP" typeof="tn:TestInput"><em property="dc:title"><LDPR representation></em>. <span property="dc:description">The representation of the LDPR to be created</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDPC at <LDPC URI> allows POST</li>
<li property="td:precondition">The LDP server does not desire to direct the user agent to retrieve a cacheable resource</li>
<li property="td:precondition"><LDPR representation> is in text/turtle</li>
<li property="td:precondition"><LDPR representation> is a valid representation for a resource to be created in the LDPC</li>
<li property="td:precondition"><LDPR representation> uses null relative URI as the entity in the request body</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC9-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC9-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC9-RQ2-POST-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">POST <LDPC URI>
<ul>
<li>[entity-header].Content-type = text/turtle</li>
<li>[message-body] = <LDPR representation></li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC9-I1-LDPC-URI"> </span>
<span property="tn:usesInput" resource="#TCC9-I2-LDPR-REP"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC9-RQ3-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC9-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC9-RQ4-GET-LOC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <Response 2 POST>.[response-header].Location
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC9-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC9-RQ1-GET-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC9-RP2-Response-2-POST" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 POST></em>. <span property="dc:description">The response of the POST request in step 2.</span>
<span property="tn:fromStep" resource="#TCC9-RQ2-POST-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC9-RP3-Response-3-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 3 GET></em>. <span property="dc:description">The response of the GET request in step 3.</span>
<span property="tn:fromStep" resource="#TCC9-RQ3-GET-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC9-RP4-Response-4-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 4 GET></em>. <span property="dc:description">The response of the GET request in step 4.</span>
<span property="tn:fromStep" resource="#TCC9-RQ4-GET-LOC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC9-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A3-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">container does not have member</span>):
<div property="dc:description">
<ul>
<li>[message-body] does not contain a member identified by <Response 2
POST>.[response-header].Location</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A4-Response-2-POST" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O2-Response-2-POST">Assert <Response 2 POST> (<span property="dc:title">POST correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 201</li>
<li>[response-header].Location exists</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A5-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A6-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A7-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">container has member</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains a member identified by <Response 2 POST>.[response-header].Location</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A8-Response-4-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O4-Response-4-GET">Assert <Response 4 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
</ul>
</section>
</section>
<section class="appendix">
<h2><a id="Feedback">Feedback to recommendation</a></h2>
<ul>
<li>LDP 1.0. 4.4.1 If HTTP PUT is performed on an existing resource, LDPR servers MUST replace the entire
persistent state of the identified resource with the entity representation in the body of the request.
<ul>
<li>Raúl: Currently there are no restrictions on the representation of
resources allowed by a server. Therefore, an LDPR representation
submitted by a client may include properties that will be ignored by
the server and properties that will not be ignored by the server.
Besides, the LDPR representation provided by a server may include
properties submitted by the client and properties not managed by the
client (e.g., timestamp). Right now it may happen that all the
properties in the client representation are ignored and the server
representation includes only server managed properties (i.e., the
specification does not restrict this).</li>
<li> Miguel: Requiring the complete replacement of a resource state
with the input representation included on the body of the PUT
request implies that all the properties exposed for an LDPR can be
freely modified by the client. <br/>
While this can be the case for vanilla LDP servers, which don’t take
into account the contents of the resources, it does not hold for
domain-dependent LDP servers that expose data for whom specific
restrictions apply, i.e., certain properties are not under the
control of the client. <br/>
At the same time, this MUST clause does not align with what is said
in the next MAY clause on the same point, which asserts that LDP
servers can ignore server managed properties. <br/>
My proposal would be to rewrite the clause making clear that only
the part of the LDPR state that is under the control of the client
will be updated with the contents of the representation, and that it
is the responsibility of the LDP Server to define which parts of the
representation are under its control. </li>
</ul>
</li>
<li>LDP 1.0. 4.4.2 [...] LDPR servers MUST respond with status code 412
(Condition Failed) if ETags fail to match if there are no other errors
with the request.
<ul>
<li>Miguel: There are other alternatives for using ETags apart from
using the If-Match header, i.e., If-None-Match header. The
specification should be clear about this, either disallowing its
usage, advising against its usage or allowing its usage. </li>
</ul>
</li>
<li>LDP 1.0. 4.5.1 LDPR servers MUST remove the resource identified by the
Request-URI. After a successful HTTP DELETE, a subsequent HTTP GET on
the same Request-URI MUST result in a 404 (Not found) or 410 (Gone)
status code.
<ul>
<li>Raúl: A successful HTTP DELETE request (i.e., 2xx) does not imply
that the resource has been deleted, the request may be accepted
(i.e., status code 202) but not enacted.</li>
<li>Miguel: Does the LDP specification want to allow any other status
code for the DELETE operation beyond the HTTP/1.1 recommended 200,
202, and 204? The other status codes do not make sense, and as the
HTTP/1.1 specification does not enforce but recommend these three,
it might be worthy making this a strong requirement in LDP.</li>
<li>Miguel: The second MUST clause implies that URIs will not be
reusable. This has strong implications and should be clarified
somewhere else in the specification.</li>
</ul>
</li>
<li>LDP 1.0. 4.6.1 LDPR servers MUST support the HTTP HEAD method.
<ul>
<li>Miguel: The HEAD method has been confused with the OPTIONS one. <br/>
According to section 9.4 in the HTTP/1.1 specification, the HEAD
method “is identical to GET except that the server MUST NOT return a
message-body in the response. The metainformation contained in the
HTTP headers in response to a HEAD request SHOULD be identical to
the information sent in response to a GET request. This method can
be used for obtaining metainformation about the entity implied by
the request without transferring the entity-body itself. This method
is often used for testing hypertext links for validity,
accessibility, and recent modification”. <br/>
In contrast, according to section 9.2 of the same specification, the
OPTIONS method “represents a request for information about the
communication options available on the request/response chain
identified by the Request-URI. This method allows the client to
determine the options and/or requirements associated with a
resource, or the capabilities of a server, without implying a
resource action or initiating a resource retrieval”. </li>
<li>Miguel: Given the point before, point 4.6.2 should be also updated
accordingly.</li>
</ul>
</li>
<li>The current specification does not impose any absolute (MUST)
restriction on LDPR representations. Therefore, "almost" any server
returning text/turtle and satisfying some other protocol restrictions
would be an LDP-conformant server. The proposal is to require, similarly
as for LDPCs, that LDPR representations are typed (i.e., "The
representation of a LDPR MUST have rdf:type of ldp:Resource, but it MAY
have additional rdf:types."). One advantage of having this restriction
is that a client can discover whether the resource is in an LDP server
or not; if not, no one ensures the client that other resources appearing
in the representation can be dereferenced and so on.</li>
</ul>
</section>
<section class="appendix">
<h2>Recommendation coverage</h2>
<p>The following absolute requirements in the specification for <a>LDP Core</a> are not covered by the current test suite. </p>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li>4.4.1 If HTTP PUT is performed on an existing resource, LDPR servers
MUST replace the entire persistent state of the identified resource with
the entity representation in the body of the request. </li>
<li>5.4.7 In RDF representations, LDPC servers MUST interpret the null
relative URI for the subject of triples in the LDPR representation in
the request entity body as referring to the entity in the request body.
[...]</li>
</ul>
</section>
<section class="appendix">
<h2><a id="ChangeHistory">Change history</a></h2>
<ul>
<li>2013-06-03 Updated to use ReSpec (RGC)</li>
<li>2013-06-03 Implemented <a href="http://lists.w3.org/Archives/Public/public-ldp-wg/2013May/0153.html">changes suggested by Eric Prud'hommeaux</a> (RGC)</li>
</ul>
</section>
<section class="appendix">
<h2><a id="EditorNotes">Editor TODOs and notes</a></h2>
<ul>
<li>Add tests for MUSTs related to containers when the issue about aggregation and composition is solved</li>
<li>Choose a namespace for the new vocabulary terms and for the test cases</li>
<li>Include the RDF description of the test suite</li>
<li>Write abstract and introduction</li>
<li>Provide sample inputs and expected outputs for generic LDP servers</li>
<li>Add references</li>
</ul>
</section>
</body>
</html>
\ No newline at end of file
+ García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.3 [...] If the client does not indicate a preference, text/turtle MUST be returned.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR2-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR2-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI></div>
<span property="tn:usesInput" resource="#TCR2-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR2-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span> <span property="tn:fromStep"
resource="#TCR2-RQ1-GET-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR2-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR2-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR3" typeof="td:TestCase">
<h3><a id="TC-R3"><span property="rdfs:label">TC-R3</span>. <span property="dc:title">GET on a non-existing LDPR</span></a></h3>
<p property="dc:description">Tests making a GET request on a non-existing LDPR.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.5.1 LDPR servers MUST remove the resource identified by the Request-URI. After a successful HTTP DELETE, a subsequent HTTP GET on the same Request-URI MUST result in a 404 (Not found) or 410 (Gone) status code.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR3-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of a non-existing LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server does not contain an LDPR at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR3-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR3-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR3-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCR3-RQ1-GET-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR3-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR3-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET incorrect</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 404 or 410</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR4" typeof="td:TestCase">
<h3><a id="TC-R4"><span property="rdfs:label">TC-R4</span>. <span property="dc:title">PUT on an LDPR</span></a></h3>
<p property="dc:description">Tests making a PUT request on an LDPR.</p> <p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://tools.ietf.org/html/rfc2616" property="rdfs:seeAlso">Hypertext Transfer Protocol -- HTTP/1.1</a>:</em></p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">3.11 [...] An entity tag MUST be unique across all versions of all entities associated with a particular resource.</span><span property="rdfs:seeAlso" href="http://tools.ietf.org/html/rfc2616"></span></div>
</li>
</ul>
<h4>Input </h4>
<ul>
<li property="td:input" resource="#TCR4-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
<li property="td:precondition">The LDPR at <LDPR URI> allows PUT</li>
<li property="td:precondition">The LDP server allows updating in the LDPR the current representation at <LDPR URI></li>
<li property="td:precondition">The LDP server does not desire that the request be applied to a different URI</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR4-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR4-I1-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCR4-RQ2-PUT-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">PUT <LDPR URI>
<ul>
<li>[request-header].If-Match = <Response GET 1>.[response-header].ETag</li>
<li>[message-body] = <Response GET 1>.[message-body]</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR4-I1-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCR4-RQ3-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR4-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR4-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCR4-RQ1-GET-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCR4-RP2-Response-2-PUT" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 PUT></em>. <span property="dc:description">The response of the PUT request in step 2.</span>
<span property="tn:fromStep" resource="#TCR4-RQ2-PUT-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCR4-RP3-Response-3-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 3 GET></em>. <span property="dc:description">The response of the GET request in step 3.</span>
<span property="tn:fromStep" resource="#TCR4-RQ3-GET-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR4-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR4-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCR4-A2-Response-2-PUT" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR4-O2-Response-2-PUT">Assert <Response 2 PUT> (<span property="dc:title">PUT correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCR4-A3-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCR4-A4-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">LDPR updated</span>):
<div property="dc:description">
<ul>
<li>[response-header].ETag != <Response 1 GET>.[response-header].ETag</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR5" typeof="td:TestCase">
<h3><a id="TC-R5"><span property="rdfs:label">TC-R5</span>. <span property="dc:title">PUT on an LDPR without matching ETags</span></a></h3>
<p property="dc:description">Tests making a PUT request on an LDPR without matching ETags.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.4.2 [...] LDPR servers MUST respond with status code 412 (Condition Failed) if ETags fail to match if there are no other errors with the request.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input </h4>
<ul>
<li property="td:input" resource="#TCR5-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
<li property="td:precondition">The LDPR at <LDPR URI> allows PUT</li>
<li property="td:precondition">The LDP server allows updating in the LDPR the current representation at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR5-RQ1-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR5-I1-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCR5-RQ2-PUT-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">PUT <LDPR URI>
<ul>
<li>[request-header].If-Match = <Response GET 1>.[response-header].ETag + 'M'</li>
<li>[message-body] = <Response GET 1>.[message-body]</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR5-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR5-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCR5-RQ1-GET-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCR5-RP2-Response-2-PUT" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 PUT></em>. <span property="dc:description">The response of the PUT request in step 2.</span>
<span property="tn:fromStep" resource="#TCR5-RQ2-PUT-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR5-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR5-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCR5-A2-Response-2-PUT" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR5-O2-Response-2-PUT">Assert <Response 2 PUT> (<span property="dc:title">PUT correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 412</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR6" typeof="td:TestCase">
<h3><a id="TC-R6"><span property="rdfs:label">TC-R6</span>. <span property="dc:title">DELETE on an LDPR</span></a></h3>
<p property="dc:description">Tests making a DELETE request on an LDPR.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.5.1 LDPR servers MUST remove the resource identified by the Request-URI. After a successful HTTP DELETE, a subsequent HTTP GET on the same Request-URI MUST result in a 404 (Not found) or 410 (Gone) status code.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR6-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
<li property="td:precondition">The LDPR at <LDPR URI> allows DELETE</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR6-RQ1-DELETE-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">DELETE <LDPR URI>
</div>
<span property="tn:usesInput" resource="#TCR6-I1-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCR6-RQ2-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCR6-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR6-RP1-Response-1-DELETE" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 DELETE></em>. <span property="dc:description">The response of the DELETE request in step 1.</span>
<span property="tn:fromStep" resource="#TCR6-RQ1-DELETE-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCR6-RP2-Response-2-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 GET></em>. <span property="dc:description">The response of the GET request in step 2.</span>
<span property="tn:fromStep" resource="#TCR6-RQ2-GET-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR6-A1-Response-1-DELETE" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR6-O1-Response-1-DELETE">Assert <Response 1 DELETE> <Response 2 GET> (<span property="dc:title">DELETE correct</span>):
<div property="dc:description">
<ul>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 200 or 204 and <Response 2 GET>.[Status-Line].Status-Code = 404 or 410</li>
<li>or </li>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 2xx (except 200 and 204) </li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCR7" typeof="td:TestCase">
<h3><a id="TC-R7"><span property="rdfs:label">TC-R7</span>. <span property="dc:title">HEAD on an LDPR</span></a></h3>
<p property="dc:description">Tests making a HEAD request on an LDPR.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.6.1 LDPR servers MUST support the HTTP HEAD method.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.6.2 LDPR servers MUST indicate their support for HTTP Methods by responding to a HTTP HEAD request on the LDPR’s URL with the HTTP Method tokens in the HTTP response header “Allow”. </span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<p><em><a target="_blank" href="http://tools.ietf.org/html/rfc2616" property="rdfs:seeAlso">Hypertext Transfer Protocol -- HTTP/1.1</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">9.4 The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response.</span><span property="rdfs:seeAlso" href="http://tools.ietf.org/html/rfc2616"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCR7-I1-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCR7-RQ1-HEAD-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">HEAD <LDPR URI>
</div>
<span property="tn:usesInput" resource="#TCR7-I1-LDPR-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCR7-RP1-Response-1-HEAD" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 HEAD></em>. <span property="dc:description">The response of the HEAD request in step 1.</span>
<span property="tn:fromStep" resource="#TCR7-RQ1-HEAD-LDPR-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCR7-A1-Response-1-HEAD" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCR7-O1-Response-1-HEAD">Assert <Response 1 HEAD> (<span property="dc:title">HEAD correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx<strong> </strong></li>
<li>[entity-header].Allow exists</li>
<li>[message-body] not exists</li>
</ul>
</div>
</div></li>
</ul>
</section>
</section>
<section>
<h2><a id="Tests-LDPCs"></a>Tests for LDPCs</h2>
<p>These tests involve LDPCs and LDPRs.</p>
<section resource="#TCC1" typeof="td:TestCase">
<h3><a id="TC-C1"><span property="rdfs:label">TC-C1</span>. <span property="dc:title">GET on an LDPC</span></a></h3>
<p property="dc:description">Tests making a GET request on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.1.12 LDPR server responses MUST use entity tags (either weak or strong ones) as response ETag header values.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.1 LDPR servers MUST support the HTTP GET Method for LDPRs.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.2 LDPR servers MUST provide a text/turtle representation of the requested LDPR.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.2.7 The representation of a LDPC MUST have rdf:type of ldp:Container, but it MAY have additional rdf:types.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC1-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC1-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC1-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC1-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC1-RQ1-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC1-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC1-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC1-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC1-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC2" typeof="td:TestCase">
<h3><a id="TC-C2"><span property="rdfs:label">TC-C2</span>. <span property="dc:title">GET on an LDPC without content type</span></a></h3>
<p property="dc:description">Tests making a GET request on an LDPC without content type.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.2.3 [...] If the client does not indicate a preference, text/turtle MUST be returned.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC2-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC2-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
</div>
<span property="tn:usesInput" resource="#TCC2-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC2-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC2-RQ1-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC2-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC2-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC2-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC2-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC3" typeof="td:TestCase">
<h3><a id="TC-C3"><span property="rdfs:label">TC-C3</span>. <span property="dc:title">GET on a non-existing LDPC</span></a></h3>
<p property="dc:description">Tests making a GET request on an non-existing LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.5.1 LDPR servers MUST remove the resource identified by the Request-URI. After a successful HTTP DELETE, a subsequent HTTP GET on the same Request-URI MUST result in a 404 (Not found) or 410 (Gone) status code.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC3-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of a non-existing LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server does not contain an LDPC at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC3-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC3-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC3-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC3-RQ1-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC3-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC3-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET incorrect</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 404 or 410</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC4" typeof="td:TestCase">
<h3><a id="TC-C4"><span property="rdfs:label">TC-C4</span>. <span property="dc:title">PUT on an LDPC</span></a></h3>
<p property="dc:description">Tests making a PUT request on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://tools.ietf.org/html/rfc2616" property="rdfs:seeAlso">Hypertext Transfer Protocol -- HTTP/1.1</a>:</em></p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">3.11 [...] An entity tag MUST be unique across all versions of all entities associated with a particular resource.</span><span property="rdfs:seeAlso" href="http://tools.ietf.org/html/rfc2616"></span></div>
</li>
</ul>
<h4>Input </h4>
<ul>
<li property="td:input" resource="#TCC4-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDPC at <LDPC URI> allows PUT</li>
<li property="td:precondition">The LDP server allows updating in the LDPC the current representation at <LDPC URI></li>
<li property="td:precondition">The LDP server does not desire that the request be applied to a different URI</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC4-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC4-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC4-RQ2-PUT-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">PUT <LDPC URI>
<ul>
<li>[request-header].If-Match = <Response GET 1>.[response-header].ETag</li>
<li>[message-body] = <Response GET 1>.[message-body]</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC4-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC4-RQ3-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC4-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC4-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC4-RQ1-GET-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC4-RP2-Response-2-PUT" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 PUT></em>. <span property="dc:description">The response of the PUT request in step 2.</span>
<span property="tn:fromStep" resource="#TCC4-RQ2-PUT-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC4-RP3-Response-3-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 3 GET></em>. <span property="dc:description">The response of the GET request in step 3.</span>
<span property="tn:fromStep" resource="#TCC4-RQ3-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC4-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A3-Response-2-PUT" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O2-Response-2-PUT">Assert <Response 2 PUT> (<span property="dc:title">PUT correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A4-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A5-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC4-A6-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC4-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">LDPC updated</span>):
<div property="dc:description">
<ul>
<li>[response-header].ETag != <Response 1 GET>.[response-header].ETag</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC5" typeof="td:TestCase">
<h3><a id="TC-C5"><span property="rdfs:label">TC-C5</span>. <span property="dc:title">PUT on an LDPC without matching ETags</span></a></h3>
<p property="dc:description">Tests making a PUT request on an LDPC without matching ETags.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.4.2 [...] LDPR servers MUST respond with status code 412 (Condition Failed) if ETags fail to match if there are no other errors with the request.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC5-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDPC at <LDPC URI> allows PUT</li>
<li property="td:precondition">The LDP server allows updating in the LDPC the current representation at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC5-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC5-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC5-RQ2-PUT-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">PUT <LDPC URI>
<ul>
<li>[request-header].If-Match = <Response GET 1>.[response-header].ETag + 'M'</li>
<li>[message-body] = <Response GET 1>.[message-body]</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC5-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC5-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC5-RQ1-GET-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC5-RP2-Response-2-PUT" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 PUT></em>. <span property="dc:description">The response of the PUT request in step 2.</span>
<span property="tn:fromStep" resource="#TCC5-RQ2-PUT-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC5-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC5-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC5-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC5-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC5-A3-Response-2-PUT" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC5-O2-Response-2-PUT">Assert <Response 2 PUT> (<span property="dc:title">PUT correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 412</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC6" typeof="td:TestCase">
<h3><a id="TC-C6"><span property="rdfs:label">TC-C6</span>. <span property="dc:title">DELETE on an LDPC</span></a></h3>
<p property="dc:description">Tests making a DELETE request on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.5.1 LDPR servers MUST remove the resource identified by the Request-URI. After a successful HTTP DELETE, a subsequent HTTP GET on the same Request-URI MUST result in a 404 (Not found) or 410 (Gone) status code.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC6-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDPC at <LDPC URI> allows DELETE</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC6-RQ1-DELETE-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">DELETE <LDPC URI>
</div>
<span property="tn:usesInput" resource="#TCC6-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC6-RQ2-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC6-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC6-RP1-Response-1-DELETE" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 DELETE></em>. <span property="dc:description">The response of the DELETE request in step 1.</span>
<span property="tn:fromStep" resource="#TCC6-RQ1-DELETE-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC6-RP2-Response-2-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 GET></em>. <span property="dc:description">The response of the GET request in step 2.</span>
<span property="tn:fromStep" resource="#TCC6-RQ2-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC6-A1-Response-1-DELETE" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC6-O1-Response-1-DELETE">Assert <Response 1 DELETE> <Response 2 GET> (<span property="dc:title">DELETE correct</span>):
<div property="dc:description">
<ul>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 200 or 204 and <Response 2 GET>.[Status-Line].Status-Code = 404 or 410</li>
<li>or </li>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 2xx (except 200 and 204)</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC7" typeof="td:TestCase">
<h3><a id="TC-C7"><span property="rdfs:label">TC-C7</span>. <span property="dc:title">DELETE on an LDPR in an LDPC</span></a></h3>
<p property="dc:description">Tests making a DELETE request on an LDPR in an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.6.1 When a LDPC member resource originally created by the LDPC (for example, one referenced by a membership triple) is deleted, and the LDPC server is aware of the member's deletion (for example, the member is managed by the same server), the LDPC server MUST also remove it from the LDPC by removing the corresponding membership triple.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC7-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
<li property="td:input" resource="#TCC7-I2-LDPR-URI" typeof="tn:TestInput"><em property="dc:title"><LDPR URI></em>. <span property="dc:description">The URI of an LDPR that is a member of the LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDP server contains an LDPR at <LDPR URI></li>
<li property="td:precondition">The LDPR is a member of the LDPC</li>
<li property="td:precondition">The LDPR at <LDPR URI> allows DELETE</li>
<li property="td:precondition">The LDPR was originally created by the LDPC</li>
<li property="td:precondition">The LDPC is aware of the member's deletion</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC7-RQ1-DELETE-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">DELETE <LDPR URI>
</div>
<span property="tn:usesInput" resource="#TCC7-I2-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC7-RQ2-GET-LDPR-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPR URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC7-I2-LDPR-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC7-RQ3-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC7-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC7-RP1-Response-1-DELETE" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 DELETE></em>. <span property="dc:description">The response of the DELETE request in step 1.</span>
<span property="tn:fromStep" resource="#TCC7-RQ1-DELETE-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCC7-RP2-Response-2-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 GET></em>. <span property="dc:description">The response of the GET request in step 2.</span>
<span property="tn:fromStep" resource="#TCC7-RQ2-GET-LDPR-URI">
</span>
</li>
<li property="td:output" resource="#TCC7-RP3-Response-3-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 3 GET></em>. <span property="dc:description">The response of the GET request in step 3.</span>
<span property="tn:fromStep" resource="#TCC7-RQ3-GET-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC7-A1-Response-1-DELETE" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC7-O1-Response-1-DELETE">Assert <Response 1 DELETE> <Response 2 GET> (<span property="dc:title">DELETE correct</span>):
<div property="dc:description">
<ul>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 200 or 204 and <Response 2 GET>.[Status-Line].Status-Code = 404 or 410<strong> </strong></li>
<li>or </li>
<li><Response 1 DELETE>.[Status-Line].Status-Code = 2xx (except 200 and 204)</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC7-A2-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC7-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC7-A3-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC7-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC7-A4-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC7-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">member removed from container</span>)
<div property="dc:description">
<ul>
<li>[message-body] not contains the member identified by <LDPR URI></li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC8" typeof="td:TestCase">
<h3><a id="TC-C8"><span property="rdfs:label">TC-C8</span>. <span property="dc:title">HEAD on an LDPC</span></a></h3>
<p property="dc:description">Tests making a HEAD request on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.6.1 LDPR servers MUST support the HTTP HEAD method.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">4.6.2 LDPR servers MUST indicate their support for HTTP Methods by responding to a HTTP HEAD request on the LDPR’s URL with the HTTP Method tokens in the HTTP response header “Allow”.</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<p><a target="_blank" href="http://tools.ietf.org/html/rfc2616" property="rdfs:seeAlso"><em>Hypertext Transfer Protocol -- HTTP/1.1</em></a>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">9.4 The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response.</span><span property="rdfs:seeAlso" href="http://tools.ietf.org/html/rfc2616"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC8-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC8-RQ1-HEAD-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">HEAD <LDPC URI>
</div>
<span property="tn:usesInput" resource="#TCC8-I1-LDPC-URI"> </span>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC8-RP1-Response-1-HEAD" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 HEAD></em>. <span property="dc:description">The response of the HEAD request in step 1.</span>
<span property="tn:fromStep" resource="#TCC8-RQ1-HEAD-LDPC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC8-A1-Response-1-HEAD" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC8-O1-Response-1-HEAD">Assert <Response 1 HEAD> (<span property="dc:title">HEAD correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx<strong> </strong></li>
<li>[entity-header].Allow exists</li>
<li>[message-body] not exists</li>
</ul>
</div>
</div></li>
</ul>
</section>
<section resource="#TCC9" typeof="td:TestCase">
<h3><a id="TC-C9"><span property="rdfs:label">TC-C9</span>. <span property="dc:title">POST an LDPR on an LDPC</a></h3>
<p property="dc:description">Tests making a POST request of an LDPR on an LDPC.</p>
<p property="dc:contributor" resource="#RaulGarciaCastro" typeof="foaf:Person"><strong>Contributor: </strong> <span property="rdfs:label">Raúl García-Castro</span> <span property="owl:sameAs" href="http://delicias.dia.fi.upm.es/%7Ergarcia/#me"></span></p>
<p property="td:reviewStatus" resource="td:unreviewed" typeof="td:ReviewStatus"><strong>Status: </strong>Unreviewed</p>
<h4>Related specification</h4>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/" property="rdfs:seeAlso">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.4.1 [...] If the resource was created successfully, LDPC servers MUST respond with status code 201 (Created) and the Location header set to the new resource’s URL. [...] </span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.4.2 After a successful HTTP POST request to a LDPC, the new resource MUST appear as a member of the LDPC until the new resource is deleted or removed by other methods. [...] </span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.4.4 For servers that support create, LDPC servers MUST create an LDPR from a RDF representation in the request entity body. [...]</span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
<li property="td:specificationReference" typeof="tn:Excerpt">
<div><span property="tn:includesText">5.4.5 LDPC servers MUST accept a request entity body with a request header of Content-Type with value of text/turtle. </span><span property="rdfs:seeAlso" href="http://www.w3.org/TR/ldp/"></span></div>
</li>
</ul>
<h4>Input</h4>
<ul>
<li property="td:input" resource="#TCC9-I1-LDPC-URI" typeof="tn:TestInput"><em property="dc:title"><LDPC URI></em>. <span property="dc:description">The URI of an LDPC.</span></li>
<li property="td:input" resource="#TCC9-I2-LDPR-REP" typeof="tn:TestInput"><em property="dc:title"><LDPR representation></em>. <span property="dc:description">The representation of the LDPR to be created</span></li>
</ul>
<h4>Preconditions</h4>
<ul>
<li property="td:precondition">The LDP server contains an LDPC at <LDPC URI></li>
<li property="td:precondition">The LDPC at <LDPC URI> allows POST</li>
<li property="td:precondition">The LDP server does not desire to direct the user agent to retrieve a cacheable resource</li>
<li property="td:precondition"><LDPR representation> is in text/turtle</li>
<li property="td:precondition"><LDPR representation> is a valid representation for a resource to be created in the LDPC</li>
<li property="td:precondition"><LDPR representation> uses null relative URI as the entity in the request body</li>
</ul>
<h4>Process</h4>
<ol>
<li inlist="" property="tn:testProcess" resource="#TCC9-RQ1-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC9-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC9-RQ2-POST-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">POST <LDPC URI>
<ul>
<li>[entity-header].Content-type = text/turtle</li>
<li>[message-body] = <LDPR representation></li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC9-I1-LDPC-URI"> </span>
<span property="tn:usesInput" resource="#TCC9-I2-LDPR-REP"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC9-RQ3-GET-LDPC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <LDPC URI>
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
<span property="tn:usesInput" resource="#TCC9-I1-LDPC-URI"> </span>
</li>
<li inlist="" property="tn:testProcess" resource="#TCC9-RQ4-GET-LOC-URI" typeof="tn:Step ht:Request">
<div property="dc:description">GET <Response 2 POST>.[response-header].Location
<ul>
<li>[request-header].Accept = text/turtle</li>
</ul>
</div>
</li>
</ol>
<h4>Output</h4>
<ul>
<li property="td:output" resource="#TCC9-RP1-Response-1-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 1 GET></em>. <span property="dc:description">The response of the GET request in step 1.</span>
<span property="tn:fromStep" resource="#TCC9-RQ1-GET-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC9-RP2-Response-2-POST" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 2 POST></em>. <span property="dc:description">The response of the POST request in step 2.</span>
<span property="tn:fromStep" resource="#TCC9-RQ2-POST-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC9-RP3-Response-3-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 3 GET></em>. <span property="dc:description">The response of the GET request in step 3.</span>
<span property="tn:fromStep" resource="#TCC9-RQ3-GET-LDPC-URI">
</span>
</li>
<li property="td:output" resource="#TCC9-RP4-Response-4-GET" typeof="tn:TestOutput ht:Response"><em property="dc:title"><Response 4 GET></em>. <span property="dc:description">The response of the GET request in step 4.</span>
<span property="tn:fromStep" resource="#TCC9-RQ4-GET-LOC-URI">
</span>
</li>
</ul>
<h4>Assertions</h4>
<ul>
<li property="tn:testAssertion" resource="#TCC9-A1-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A2-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A3-Response-1-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O1-Response-1-GET">Assert <Response 1 GET> (<span property="dc:title">container does not have member</span>):
<div property="dc:description">
<ul>
<li>[message-body] does not contain a member identified by <Response 2
POST>.[response-header].Location</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A4-Response-2-POST" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O2-Response-2-POST">Assert <Response 2 POST> (<span property="dc:title">POST correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 201</li>
<li>[response-header].Location exists</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A5-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A6-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">GET container correct</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains rdf:type ldp:Container</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A7-Response-3-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O3-Response-3-GET">Assert <Response 3 GET> (<span property="dc:title">container has member</span>):
<div property="dc:description">
<ul>
<li>[message-body] contains a member identified by <Response 2 POST>.[response-header].Location</li>
</ul>
</div>
</div></li>
<li property="tn:testAssertion" resource="#TCC9-A8-Response-4-GET" typeof="tn:TestAssertion"><div property="tn:outputAsserted" resource="TCC9-O4-Response-4-GET">Assert <Response 4 GET> (<span property="dc:title">GET resource correct</span>):
<div property="dc:description">
<ul>
<li>[Status-Line].Status-Code = 2xx</li>
<li>[response-header].ETag exists</li>
<li>[entity-header].Content-Type = text/turtle</li>
</ul>
</div>
</div></li>
</ul>
</section>
</section>
<section class="appendix">
<h2>Recommendation coverage</h2>
<p>The following absolute requirements in the specification for <a>LDP Core</a> are not covered by the current test suite. </p>
<p><em><a target="_blank" href="http://www.w3.org/TR/ldp/">Linked Data Platform 1.0</a></em>:</p>
<ul>
<li>4.4.1 If HTTP PUT is performed on an existing resource, LDPR servers
MUST replace the entire persistent state of the identified resource with
the entity representation in the body of the request. </li>
<li>5.4.7 In RDF representations, LDPC servers MUST interpret the null
relative URI for the subject of triples in the LDPR representation in
the request entity body as referring to the entity in the request body.
[...]</li>
</ul>
</section>
<section class="appendix">
<h2><a id="ChangeHistory">Change history</a></h2>
<ul>
<li>2013-06-03 Updated to use ReSpec (RGC)</li>
<li>2013-06-03 Implemented <a href="http://lists.w3.org/Archives/Public/public-ldp-wg/2013May/0153.html">changes suggested by Eric Prud'hommeaux</a> (RGC)</li>
</ul>
</section>
<section class="appendix">
<h2><a id="EditorNotes">Editor TODOs and notes</a></h2>
<ul>
<li>Add tests for MUSTs related to containers when the issue about aggregation and composition is solved</li>
<li>Choose a namespace for the new vocabulary terms and for the test cases</li>
<li>Include the RDF description of the test suite</li>
<li>Write abstract and introduction</li>
<li>Provide sample inputs and expected outputs for generic LDP servers</li>
<li>Add references</li>
</ul>
</section>
</body>
</html>
\ No newline at end of file
--- a/ldp.html Mon Jun 17 17:07:40 2013 +0100
+++ b/ldp.html Mon Jun 17 17:08:22 2013 +0100
@@ -16,7 +16,6 @@
// the specification's short name, as in http://www.w3.org/TR/short-name/
shortName: "ldp",
- // TODO: Confirm short name
// if your specification has a subtitle that goes below the main
// formal title, define it here
@@ -85,7 +84,7 @@
</script>
<style type="text/css">
div.rule {padding-top: 1em;}
- div.ldp-issue {
+ div.ldp-issue-open {
border-color: #E05252;
background: #FBE9E9;
padding: 0.5em;
@@ -95,6 +94,26 @@
border-left-width: .5em;
border-left-style: solid;
}
+ div.ldp-issue-pending {
+ border-color: #FAF602;
+ background: #F7F6BC;
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+ border-left-width: .5em;
+ border-left-style: solid;
+ }
+ div.ldp-issue-closed {
+ border-color: #009900;
+ background: #BCF7CF;
+ 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;
@@ -104,9 +123,12 @@
<style type="text/css" media="all">
code {
font-weight:bold;
+ font-size:larger;
}
/* ReSpec uses color ff4500 for code elements, which does not print well on some black & white printers
- and is a little hard to read for some folks even on-line. */
+ and is a little hard to read for some folks even on-line.
+ The default code font size was also somewhat too small/hard to read.
+ */
</style>
</head>
<body>
@@ -193,19 +215,26 @@
or tunnel, switching behavior based on the nature of each request
[[HTTP11]]. </p></dd>
- <dt>Membership triples</dt>
+ <dt><dfn>Membership triples</dfn></dt>
<dd>A set of triples in an LDPC's state that lists its members.
The membership triples of a container all have the same
subject and predicate, and the objects of the membership triples define
the container's members.
<p></p></dd>
- <dt>Membership subject</dt>
- <dd>The subject of all an LDPC's <a title="Membership triples">membership triples</a>.
+ <dt><dfn>Membership subject</dfn></dt>
+ <dd>The subject of all a LDPC's <a title="Membership triples">membership triples</a>.
<p></p></dd>
- <dt>Membership predicate</dt>
- <dd>The predicate of all an LDPC's <a title="Membership triples">membership triples</a>.
+ <dt><dfn>Membership predicate</dfn></dt>
+ <dd>The predicate of all a LDPC's <a title="Membership triples">membership triples</a>.
+ <p></p></dd>
+
+ <dt><dfn>Non-member resource</dfn></dt>
+ <dd>A resource associated with a LDPC by a server for the purpose of enabling clients to
+ retrieve a subset of the LDPC's state, namely the subset that omits the LDPC's membership triples.
+ In other words, the union of the non-member resource's state and the LDPC's membership triples
+ exactly equals the LDPC's state.
<p></p></dd>
</dl>
@@ -240,16 +269,16 @@
<p>A conforming <b>LDP Server</b> is an application program that processes HTTP
requests and generates HTTP responses that conform to the rules defined in sections on <a href="#linked-data-platform-resources">LDPRs</a>
-and <a href="#linked-data-platform-containers">LDPCs</a></p>
+and <a href="#linked-data-platform-containers">LDPCs</a></p>.
-<div class="ldp-issue">
+<div class="ldp-issue-open">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/57">ISSUE-57</a></div>
How can a client determine that it is in communication with an LDP server?
</div>
<p>A conforming <b>LDP Client</b> is an application program that generates HTTP
requests and processes HTTP responses that conform to the rules defined in sections on <a href="#linked-data-platform-resources">LDPRs</a>
-and <a href="#linked-data-platform-containers">LDPCs</a></p>
+and <a href="#linked-data-platform-containers">LDPCs</a></p>.
</section>
@@ -325,7 +354,7 @@
does not require the creation of an intermediate link resource to
describe the relationship.
- <div class="ldp-issue">
+ <div class="ldp-issue-closed">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/44">ISSUE-44</a></div>
4.1.9.(now 4.1.7) is obscure or too restrictive
</div>
@@ -345,23 +374,23 @@
ones) as response <code>ETag</code> header values.
</div>
- <div class="ldp-issue">
+ <div class="ldp-issue-closed">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/15">ISSUE-15</a></div>
sharing binary resources and metadata
</div>
- <div class="ldp-issue">
+ <div class="ldp-issue-open">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/16">ISSUE-16</a></div>
Redirection of non-information resources to LDPRs
</div>
- <div class="ldp-issue">
+ <div class="ldp-issue-pending">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/19">ISSUE-19</a></div>
Adressing more error cases
</div>
- <div class="ldp-issue">
+ <div class="ldp-issue-open">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/32">ISSUE-32</a></div>
How can clients discover that a resource is an LDPR or LDPC, and what features are supported?
</div>
- <div class="ldp-issue">
+ <div class="ldp-issue-closed">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/33">ISSUE-33</a></div>
Pagination for non-container resources
</div>
@@ -429,8 +458,9 @@
modifying a resource that has changed since the client last retrieved
its representation. LDPR servers SHOULD require the HTTP <code>If-Match</code> header and HTTP <code>ETags</code>
to detect collisions. LDPR servers MUST respond with status code 412
- (Condition Failed) if <code>ETag</code>s fail to match if there are no other
- errors with the request [[!HTTP11]].
+ (Condition Failed) if <code>ETag</code>s fail to match when there are no other
+ errors with the request [[!HTTP11]]. LDPR servers that require conditional requests MUST respond with status code 428
+ (Precondition Required) when the absence of a precondition is the only reason for rejecting the request [[!RFC6585]].
</div>
<div id="ldpr-4_4_3" class="rule">4.4.3 LDPR clients SHOULD always assume that the set of predicates for a
resource of a particular type at an arbitrary server is open, in the
@@ -510,7 +540,7 @@
<a href="#ldpc-HTTP_POST">POST (to an LDPC)</a> and/or <a href="#ldpc-HTTP_PUT">PUT</a> should be used as the standard way to create new LDPRs.
</div>
- <div class="ldp-issue">
+ <div class="ldp-issue-pending">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/17">ISSUE-17</a></div>
changesets as a recommended PATCH format
</div>
@@ -720,7 +750,7 @@
a o:RealEstateHolding;
o:value 300000.</pre>
-<div class="ldp-issue">
+<div class="ldp-issue-open">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/58">ISSUE-58</a></div>
Property for asserting that complete description of members is included in LDPC representation
</div>
@@ -735,7 +765,7 @@
get this information may be onerous for clients and cause unnecessary
overhead on servers, it is desired to define a way to retrieve only
the non-member property values. Defining for each LDPC a corresponding
- resource, called the “non-member resource”, whose state is a subset
+ resource, called the “<a>non-member resource</a>”, whose state is a subset
of the state of the container, does this.</p>
<p>The example listed here only show
a simple case where only a few simple non-member properties are
@@ -744,8 +774,9 @@
associating SPARQL endpoints. [[SPARQL-QUERY]]</p>
<p>
Here is an example requesting the non-member properties of a
- container identified by the URL <code>http://example.org/container1/</code>
- and adding the query string <code>?non-member-properties</code> :
+ container identified by the URL <code>http://example.org/container1/</code>.
+ In this case, the non-member resource is identified by the URL
+ <code>http://example.org/container1?non-member-properties</code>:
</p>
<p>Request:</p>
<pre class="example">GET /container1?non-member-properties HTTP/1.1
@@ -767,6 +798,10 @@
dcterms:title "A Linked Data Platform Container of Acme Resources";
ldp:membershipPredicate rdfs:member;
dcterms:publisher <http://acme.com/>.</pre>
+
+ <p>While the same non-member resource could be used to update the non-member properties via PUT,
+ LDP recommends using PATCH for this purpose.</p>
+
<div id="ldpc-paging" class="rule">5.1.3 Paging</div>
<em>This section is non-normative</em>
@@ -894,18 +929,25 @@
constructs like Seq and List for expressing order.
</p>
<p>
- Order only becomes important for LDPC servers when containers are
+ Order becomes more important for LDPC servers when containers are
paginated. If the server does not respect ordering when constructing
- pages, the client is forced to retrieve all pages before
- sorting the members, which would defeat the purpose of pagination. In
- cases where ordering is important, an LDPC server exposes all the
- members on a page with a higher sort order than all members on the
- previous page and lower sort order than all the members on the next
- page. The LDPC specification provides a predicate - <code>ldp:containerSortPredicates</code>
- - that the server may use to communicate to the client which
- predicates were used for page ordering. Multiple predicate values may
- have been used for sorting, so the value of this predicate is an
- ordered list.
+ pages, the client would be forced to retrieve all pages before
+ sorting the members, which would defeat the purpose of pagination.
+ In cases where ordering is important, an LDPC server exposes all the
+ members on a page with the proper sort order with relation to all
+ members on the next and previous pages.
+ When the sort is ascending, all the members on a current page have a
+ higher sort order than all members on the previous page and
+ lower sort order than all the members on the next page.
+ When the sort is descending, the opposite order is used.
+ Since more than one value may be used to sort members,
+ the LDPC specification allows servers to assert the ordered list
+ of sort criteria used to sort the members, using the
+ <code>ldp:containerSortCriteria</code> relation.
+ Each member of the ordered list exposes one <code>ldp:containerSortCriterion</code>,
+ consisting of a <code>ldp:containerSortPredicate</code>,
+ <code>ldp:containerSortPredicate</code>, and
+ optionally a <code>ldp:containerSortCollation</code>.
</p>
<p>Here is an example container described
previously, with representation for ordering of the assets:</p>
@@ -924,7 +966,12 @@
<?firstPage>
a ldp:Page;
ldp:pageOf <>;
- ldp:containerSortPredicates (o:value).
+ ldp:ContainerSortCriteria (#SortValueAscending).
+
+<#SortValueAscending>
+ a ldp:ContainerSortCriterion;
+ ldp:containerSortOrder ldp:ascendingOrder;
+ ldp:containerSortPredicate o:value.
<http://example.org/netWorth/nw1>
a o:NetWorth;
@@ -940,9 +987,9 @@
a o:RealEstateHolding;
o:value 300000.</pre>
<p>
- As you can see by the addition of the <code>ldp:containerSortPredicates</code>
+ As you can see by the addition of the <code>ldp:ContainerSortCriteria</code>
predicate, the <code>o:value</code> predicate is used
- to define the ordering of the results. It is up to the domain model
+ to order the page members in ascending order. It is up to the domain model
and server to determine the appropriate predicate to indicate the
resource’s order within a page, and up to the client receiving this
representation to use that order in whatever way is appropriate, for
@@ -972,7 +1019,7 @@
any kind of resource identified by its URI, LDPR or otherwise.
</div>
- <div class="ldp-issue">
+ <div class="ldp-issue-open">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/51">ISSUE-51</a></div>
Linking from a Resource to its Containers (not the containers the resource is in)
</div>
@@ -1036,28 +1083,16 @@
<section>
<h2 id="ldpc-HTTP_GET">HTTP GET</h2>
+
<div id="ldpc-5_3_1" class="rule">5.3.1 The representation of a LDPC MUST contain a set of triples with a
consistent subject and predicate whose objects indicate members of
the container. The subject of the triples MAY be the container itself
or MAY be another resource (as in the <a href="#ldpc-ex-membership-subj">example</a>). See also
<a href="#ldpc-5_2_3">5.2.3</a>.
</div>
- <div id="ldpc-5_3_2" class="rule">5.3.2 LDPC servers SHOULD support requests for information about a known LDPC
- without retrieving a full representation including all of its
- members, by the existence of the token "<code>non-member-properties</code>" on the query
- component of the LDPC URL. For example, if there is a LDPC URL <code><containerURL>,</code> the URL to request the
- non-membership properties would be <code><containerURL>?non-member-properties</code>.
- See section <a href="#ldpc-get_non-member_props">5.1.2 Retrieving Only Non-member Properties</a> for
- examples. An LDPC server that does not support a request to
- retrieve non-member resource properties via a Request-URI of “<code><containerURL>?non-member-properties</code>”,
- MUST return a HTTP status code 404 (Not Found). An LDPC server that supports a request to
- retrieve non-member resource properties via a different Request-URI than “<code><containerURL>?non-member-properties</code>”,
- MUST return a HTTP Redirection 3xx status code such as 301 (Moved Permanently) or 302 (Found).
- </div>
-
- <div class="ldp-issue">
- <div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/64">ISSUE-64</a></div>
- Non-member-properties and Hypermedia as the Engine of Application State (HATEOAS) Compliance
+
+ <div id="ldpc-5_3_2" class="rule">5.3.2 Empty after resolution of Issue-64,
+ left here for now to avoid renumbering all that follows. Content moved to <a href="#ldpc-HTTP_HEAD">LDPC HEAD</a>.
</div>
<div id="ldpc-5_3_3" class="rule">5.3.3 Empty after resolution of Issue-65,
@@ -1080,7 +1115,7 @@
header is present, then conservative clients will assume that the LDPC does not support paging.
For example, if there is a LDPC with URL <code><containerURL></code> that supports paging and whose
first page URL is <code><containerURL>?theFirstPage</code>, then the corresponding link header
- would be <code>Link: <?theFirstPage>;rel="first"</code>
+ would be <code>Link: <?theFirstPage>;rel="first"</code>.
The representation for any page, including the first, will include
the URL for the next page. See section <a href="#ldpc-paging">5.1.3 Paging</a> for additional details.
</div>
@@ -1110,28 +1145,84 @@
last page, predicate of <code>ldp:nextPage</code> and object being <code>rdf:nil</code>.
</div>
- <div class="ldp-issue">
+ <div class="ldp-issue-closed">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/18">ISSUE-18</a></div>
container membership and robust pagination
</div>
<div id="ldpc-5_3_7" class="rule">5.3.7 LDPC servers MAY represent the members of a paged LDPC in a sequential
- order. The order MUST be specified using the <code>ldp:containerSortPredicates</code>
- predicate whose subject is that of the page and object is a list of
- LDPC ordinal predicates. Ordering is only ascending. The only
- ordinal predicate literal data types supported are those as defined
- by SPARQL SELECT’s ORDER BY clause [[!SPARQL-QUERY]].
-
- <div class="ldp-issue">
+ order. If the server does so, it MUST be specify the order using a triple
+ whose subject is the page URI,
+ whose predicate is <code>ldp:containerSortCriteria</code>,
+ and whose object is a <code>rdf:List</code> of
+ <code>ldp:containerSortCriterion</code> resources.
+ The resulting order MUST be as defined by SPARQL SELECT’s ORDER BY clause
+ [[!SPARQL-QUERY]].
+ Sorting criteria MUST be the same for all pages of a representation; if
+ the criteria were allowed to vary, the ordering among members of a container
+ across pages would be undefined.
+ The first list entry provides the primary
+ sorting criterion, any second entry provides a secondary criterion used to order members considered
+ equal according to the primary criterion, and so on.
+ See section <a href="#ldpc-ordering">5.1.4 Ordering</a> for
+ an example.
+ </div>
+
+ <div id="ldpc-5_3_8" class="rule">5.3.8 LDPC page representations
+ ordered using <code>ldp:containerSortCriteria</code> MUST contain,
+ in every <code>ldp:containerSortCriterion</code> list entry,
+ a triple
+ whose subject is the sort criterion identifier,
+ whose predicate is <code>ldp:containerSortPredicate</code>
+ and whose object is
+ the predicate whose value is used to order members within the page.
+ The only predicate data types whose behavior LDP constrains are those defined
+ by SPARQL SELECT’s ORDER BY clause [[!SPARQL-QUERY]]. Other data types
+ can be used, but LDP
+ assigns no meaning to them and interoperability will be limited.
+ </div>
+
+ <div id="ldpc-5_3_9" class="rule">5.3.9 LDPC page representations
+ ordered using <code>ldp:containerSortCriteria</code> MUST contain,
+ in every <code>ldp:containerSortCriterion</code> list entry,
+ a triple
+ whose subject is the sort criterion identifier,
+ whose predicate is <code>ldp:containerSortOrder</code>
+ and whose object describes the order used. LDP defines two values,
+ <code>ldp:ascending</code> and <code>ldp:descending</code>, for use
+ as the object of this triple. Other values can be used, but LDP
+ assigns no meaning to them and interoperability will be limited.
+ </div>
+
+ <div id="ldpc-5_3_10" class="rule">5.3.10 LDPC page representations
+ ordered using <code>ldp:containerSortCriteria</code> MAY contain,
+ in any <code>ldp:containerSortCriterion</code> list entry,
+ a triple
+ whose subject is the sort criterion identifier,
+ whose predicate is <code>ldp:containerSortCollation</code>
+ and whose object identifies the collation used. LDP defines no values for use
+ as the object of this triple. Any value can be used, but LDP
+ assigns no meaning to them and interoperability will be limited.
+ When the <code>ldp:containerSortCollation</code> triple is absent and the
+ ordering values are strings or simple literals [[!SPARQL-QUERY]], the
+ resulting order is as defined by SPARQL SELECT’s ORDER BY clause
+ [[!SPARQL-QUERY]] using two-argument <code>fn:compare</code>, that is, the implementation's
+ default collation.
+ When the <code>ldp:containerSortCollation</code> triple is present and the
+ ordering values are strings or simple literals [[!SPARQL-QUERY]], the
+ resulting order is as defined by SPARQL SELECT’s ORDER BY clause
+ [[!SPARQL-QUERY]] using three-argument <code>fn:compare</code>, that is, the
+ specified collation.
+ When the <code>ldp:containerSortCollation</code> triple is present for other
+ types of comparisons, LDP assigns no meaning to it.
+ </div>
+
+ <div class="ldp-issue-pending">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/14">ISSUE-14</a></div>
- Include clarifications about ordering in LDPC representations
- </div>
- </div>
- <div id="ldpc-5_3_7_1" class="rule">5.3.7.1 The object of <code>ldp:containerSortPredicates</code>,
- the predicate used to indicate ordering, MUST NOT change between
- subsequent pages. If it does, ordering among members of a container
- across pages is undefined. See section <a href="#ldpc-ordering">5.1.4 Ordering</a> for
- additional details.
+ Include clarifications about ordering in LDPC representations.
+ Do we need to say anything about strings in 5.3.8?
+ The ReSpec SPARQL QUERY link is http://www.w3.org/TR/rdf-sparql-query/ , which has highlighted text
+ referring readers to SPARQL 1.1. Which normative reference do we want?
</div>
</section>
@@ -1141,7 +1232,7 @@
only when an LDPC supports that method. This specification does not impose any
new requirement to support that method, and [[!HTTP11]] makes it optional.</p>
- <div class="ldp-issue">
+ <div class="ldp-issue-open">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/50">ISSUE-50</a></div>
Intuitive Containers: better support for relative URIs
</div>
@@ -1160,7 +1251,7 @@
the site that implements the LDPC.
</div>
- <div class="ldp-issue">
+ <div class="ldp-issue-closed">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/35">ISSUE-35</a></div>
POSTing to a container MUST yield a fresh URI
</div>
@@ -1188,7 +1279,7 @@
triples in the created resource whose subject is the created
resource.
- <div class="ldp-issue">
+ <div class="ldp-issue-closed">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/20">ISSUE-20</a></div>
Identifying and naming POSTed resources using <>
</div>
@@ -1197,6 +1288,9 @@
<div id="ldpc-5_4_8" class="rule">5.4.8 LDPC servers SHOULD assign the subject URI for the resource to be
created using server application specific rules in the absence of a <a href="#ldpc-5_4_10">client hint</a>.
</div>
+ <div id="ldpc-5_4_8_1" class="rule">5.4.8.1 For RDF representations, LDPC servers MUST assign the base-URI for
+ [[!RFC3987]] relative-URI resolution to be the URI of the created subject resource.
+ </div>
<div id="ldpc-5_4_9" class="rule">5.4.9 LDPC servers SHOULD allow clients to create new resources without
requiring detailed knowledge of application-specific constraints.
@@ -1212,7 +1306,7 @@
<div id="ldpc-5_4_11" class="rule">5.4.11 LDPC servers that allow member creation via POST
SHOULD NOT re-use URIs, per the<a href="#ldpc-5_2_9">
- general requirements on LDPCs<a>.
+ general requirements on LDPCs</a>.
</div>
</section>
@@ -1223,7 +1317,7 @@
only when an LDPC supports that method. This specification does not impose any
new requirement to support that method, and [[!HTTP11]] makes it optional.</p>
- <div class="ldp-issue">
+ <div class="ldp-issue-open">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/56">ISSUE-56</a></div>
How can clients discover LDPR PUT URLs?
</div>
@@ -1233,9 +1327,12 @@
(Conflict) status code.
</div>
<div id="ldpc-5_5_2" class="rule">5.5.2 LDPC servers MAY allow updating LDPC non-membership properties using
- HTTP PUT on <code><containerURL>?non-member-properties</code>, which
+ HTTP PUT on a corresponding <a>non-member resource</a>, which
MAY exclude server-managed properties such as <code>ldp:membershipSubject</code>, <code>ldp:membershipPredicate</code>
and <code>ldp:membershipPredicateInverse</code>.
+ Section <a href="#ldpc-5_7_1">5.7.1 HTTP HEAD</a> describes the process by which clients
+ discover whether the server offers such a resource, and if so its URL.
+
</div>
<div id="ldpc-5_5_3" class="rule">5.5.3 LDPC servers SHOULD NOT allow HTTP PUT requests
@@ -1246,7 +1343,7 @@
<div id="ldpc-5_5_4" class="rule">5.5.4 LDPC servers that allow member creation via PUT
SHOULD NOT re-use URIs, per the <a href="#ldpc-5_2_9">
- general requirements on LDPCs<a>.
+ general requirements on LDPCs</a>.
</div>
</section>
@@ -1272,12 +1369,33 @@
<section>
<h2 id="ldpc-HTTP_HEAD">HTTP HEAD</h2>
- <p>There are no additional requirements on HTTP
- HEAD.</p>
+
<p>Note that certain LDP mechanisms, such as paging, rely on HTTP headers, and HTTP generally requires that
HEAD responses include the same headers as GET responses.
Thus, implementers supporting HEAD should also carefully read the
<a href="#ldpc-HTTP_GET">GET section</a>.</p>
+
+ <div id="ldpc-5_7_1" class="rule">5.7.1
+ LDPC servers SHOULD define a corresponding
+ <a>non-member resource</a>
+ to support requests for information about a LDPC
+ without retrieving a full representation including all of its members;
+ see section <a href="#ldpc-get_non-member_props">5.1.2 Retrieving Only Non-member Properties</a> for
+ examples.
+ In responses to <code>GET</code> requests with an LDPC as the Request-URI,
+ LDPC servers that define a non-member resource SHOULD provide an HTTP <code>Link</code>
+ header whose target URI is the <a>non-member resource</a>, and whose link relation type is
+ <code>http://www.w3.org/ns/ldp#non-member-resource</code> [[!RFC5988]].
+ This is the mechanism by which clients discover the URL of the non-member resource.
+ If no such <code>Link</code>
+ header is present, then conservative clients will assume that the LDPC does not have a corresponding
+ non-member resource.
+ For example, if there is a LDPC with URL <code><containerURL></code> whose corresponding
+ non-member resource
+ URL is <code><containerURL>?nonMemberProperties</code>, then the corresponding link header
+ would be <code>Link: <?nonMemberProperties>;rel="http://www.w3.org/ns/ldp#non-member-resource"</code>
+ </div>
+
</section>
<section>
@@ -1312,8 +1430,14 @@
changes, ordered by most recent changes first and with heading from which
public draft it has been changed from.
</p>
-<blockquote><em><a href="http://www.w3.org/TR/2013/WD-ldp-20130307/">Second Public Working Draft</a></em></blockquote>
+<!--
+<blockquote><em><a href="http://www.w3.org/TR/2013/WD-ldp-20130701/">Third Public Working Draft</a></em></blockquote>
+-->
<ul>
+ <li>2013-06-15 - ISSUE-14 End of 5.3 + example rewritten for ascending/descending sorts with optional collation (JA)</li>
+ <li>2013-06-13 - ISSUE-54 New 5.4.8.1 to set base URI on create for relative URI resolution (SS)</li>
+ <li>2013-06-10 - ISSUE-74 4.4.2 require 428 Condition Required status code when appropriate; SS adding 6585 to biblio (JA)</li>
+ <li>2013-06-05 - ISSUE-64 Remove ?non-member-properties; 5.1.2, 5.3.2, 5.5.2 (JA)</li>
<li>2013-05-21 - ISSUE-35 Re-use of URIs on create; 5.2.9, 5.4.11, 5.5.4 (JA)</li>
<li>2013-05-21 - ISSUE-43 Slug in LDPC POSTs; 5.4.8, 5.4.10 (JA)</li>
<li>2013-05-21 - ISSUE-65 Remove firstPage in favor of Link rel=first, mostly hits 5.3.3/5.3.4 (JA)</li>
@@ -1335,7 +1459,7 @@
<li>2013-03-14 - General prep for 3rd draft, cleanup and a little restructure (SS)</li>
</ul>
-<blockquote><em><a href="http://www.w3.org/TR/2012/WD-ldp-20121025/">First Public Working Draft</a></em></blockquote>
+<blockquote><em><a href="http://www.w3.org/TR/2013/WD-ldp-20130307/">Second Public Working Draft</a></em></blockquote>
<ul>
<li>2013-03-14 - Fixed up broken fragments and typos before publication (SS)</li>
<li>2013-03-04 - Comments received from David Wood: 5.3.7 & 5.1.3 clarity, other minor edits (part 2) (SS)</li>
@@ -1369,7 +1493,8 @@
<li>2012-11-03 - ISSUE-6 Removed section 4.1.9. Shifted up sections .10 through .13.</li>
<li>2012-11-01 - Fixed minor typo and added some notes (SS)</li>
</ul>
-<blockquote><em><a href="http://www.w3.org/Submission/2012/SUBM-ldbp-20120326/">Submission</a></em></blockquote>
+
+<blockquote><em><a href="http://www.w3.org/TR/2012/WD-ldp-20121025/">First Public Working Draft</a></em></blockquote>
<ul>
<li>2012-10-15 - ISSUE-8 Changed references from LDBP to LDP, removed definition for "profile" and new namespace (SS)</li>
<li>2012-10-15 - Included additional open ISSUES from Oct 15 WG meeting: 22, 23, 24 (SS)</li>
@@ -1381,6 +1506,7 @@
<li>2012-09-18 - Initial ReSpec'ing of <a href="http://www.w3.org/Submission/ldbp/">Member Submission - Linked Data Basic Profile 1.0</a> (SS)</li>
<li>2012-09-18 - Fixed up some links and worked on references, work left to do. (SS)</li>
</ul>
+<blockquote><em><a href="http://www.w3.org/Submission/2012/SUBM-ldbp-20120326/">Submission</a></em></blockquote>
</section>
<section class='appendix informative' id="todos">
@@ -1388,6 +1514,7 @@
<p>Other than LDP <a href="http://www.w3.org/2012/ldp/track/actions">open actions</a> and <a href="http://www.w3.org/2012/ldp/track/issues">issues</a>, included here are transient tasks and notes
editors use. They have not meaning in final product of a published working draft and will be removed prior to publishing.</p>
<ul>
+ <li>5.1.4 ordering example - add example with >1 predicate, and collation sorting</li>
<li>Insert some additional examples</li>
<li>4.1.2: "the" subject ?= Request-URI ... not always (hash URIs)
</li>
@@ -1422,7 +1549,7 @@
MAY require a user to be authenticated and authorized before this action is
permitted." to each of those sections.', consider place to edit this in.</li>
</ul>
- <div class="ldp-issue">
+ <div class="ldp-issue-open">
<div class="ldp-issue-title"><a href="http://www.w3.org/2012/ldp/track/issues/37">ISSUE-37</a></div>
Additional introductory text on the LDP data and interaction model
</div>
--- a/ldp.ttl Mon Jun 17 17:07:40 2013 +0100
+++ b/ldp.ttl Mon Jun 17 17:08:22 2013 +0100
@@ -35,15 +35,63 @@
rdfs:isDefinedBy :;
rdfs:label "Container".
-:containerSortPredicates
+:containerSortCriteria
a rdf:Property;
- rdfs:comment "List of predicates that indicate the ascending order of the members in a page.";
+ rdfs:comment "Link to the list of sorting criteria used by the server in a representation.";
vs:term_status "unstable";
rdfs:domain :Page;
rdfs:isDefinedBy :;
- rdfs:label "containerSortPredicates";
+ rdfs:label "containerSortCriteria";
rdfs:range rdf:List.
+:ContainerSortCriterion
+ a rdf:Class;
+ rdfs:comment "Element in the list of container sorting criteria used by the server in a representation.";
+ vs:term_status "unstable";
+ rdfs:label "ContainerSortCriterion";
+ rdfs:isDefinedBy :.
+
+:containerSortPredicate
+ a rdf:Property;
+ rdfs:comment "Predicate used to determine the order of the members in a page.";
+ vs:term_status "unstable";
+ rdfs:domain :ContainerSortCriterion;
+ rdfs:isDefinedBy :;
+ rdfs:label "containerSortPredicate";
+ rdfs:range rdf:Property.
+
+:containerSortOrder
+ a rdf:Property;
+ rdfs:comment "The ascending/descending/etc order used to order the members in a page.";
+ vs:term_status "unstable";
+ rdfs:domain :ContainerSortCriterion;
+ rdfs:isDefinedBy :;
+ rdfs:label "containerSortOrder";
+ rdfs:range rdf:Resource.
+
+:containerSortCollation
+ a rdf:Property;
+ rdfs:comment "The collation used to order the members in a page when comparing strings.";
+ vs:term_status "unstable";
+ rdfs:domain :ContainerSortCriterion;
+ rdfs:isDefinedBy :;
+ rdfs:label "containerSortCollation";
+ rdfs:range rdf:Property.
+
+:ascending
+ a rdf:Resource; # individual
+ rdfs:comment "Ascending order.";
+ vs:term_status "unstable";
+ rdfs:isDefinedBy :;
+ rdfs:label "ascending".
+
+:descending
+ a rdf:Resource; # individual
+ rdfs:comment "Descending order.";
+ vs:term_status "unstable";
+ rdfs:isDefinedBy :;
+ rdfs:label "descending".
+
:membershipPredicate
a rdf:Property;
rdfs:comment "Indicates which predicate of the container should be used to determine the membership.";
@@ -94,4 +142,13 @@
rdfs:domain :Page;
rdfs:isDefinedBy :;
rdfs:label "pageOf";
- rdfs:range :Container.
\ No newline at end of file
+ rdfs:range :Container.
+
+:non-member-resource
+ a rdf:Resource; # Not positive this is right. Seems right to "flag" the URI in this doc, but not "really" defining RDF with it. But anything defined here would be of type rdf:Resource anyway, so no harm in rendering that explicit.
+ rdfs:comment "Extension link relation type URI for use in HTTP Link header. When a server offers clients the ability to retrieve non-member properties of an LDPC through an associated non-member resource, this Link header is how clients discover the existence of that resource and its URI.";
+ vs:term_status "unstable";
+ rdfs:isDefinedBy :;
+ rdfs:label "non-member-resource";
+ rdfs:domain ldp:Container;
+ rdfs:range ldp:Container.