<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="rdf2html.xsl"?>
<?xml-stylesheet type="text/xml" href="rdf2html.xsl"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
	xmlns:rep="http://example.net/rep#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:dcq="http://purl.org/dc/terms/"
	xmlns:dct="http://purl.org/dc/dcmitype/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns="http://www.w3.org/1999/xhtml">
	
	<rdf:Description rdf:about="">
		<dc:title>Resource and Representation Relationship Vocabulary</dc:title>
		<rep:representedBy>
			<rep:Representations>
				<rdf:li>
					<rep:Representation>
						<dc:format>
							<dcq:IMT rdf:value="application/rdf+xml" rdfs:label="RDF/XML"/>
						</dc:format>
						<rep:canTransformTo>
							<dct:Text rdf:about="rep.html">
								<dc:format>
									<dcq:IMT rdf:value="text/html" rdfs:label="HTML"/>
								</dc:format>
							</dct:Text>
						</rep:canTransformTo>
					</rep:Representation>
				</rdf:li>
				<rep:decidedBy rdf:resource="http://example.net/rep#OnlyRepresentation"/>
			</rep:Representations>
		</rep:representedBy>
		<dc:creator>
			<foaf:Person>
				<foaf:mbox rdf:resource="mailto:jon@hackcraft.net"/>
				<foaf:firstName>Jon</foaf:firstName>
				<foaf:surname>Hanna</foaf:surname>
				<foaf:nick>Talliesin</foaf:nick>
			</foaf:Person>
		</dc:creator>
		<dcq:created>
			<dcq:W3CDTF>
				<rdf:value>2003-01-17</rdf:value>
				<rdfs:label xml:lang="en">17th January, 2003</rdfs:label>
			</dcq:W3CDTF>
		</dcq:created>
		<dcq:modified>
			<dcq:W3CDTF>
				<rdf:value>2003-01-20</rdf:value>
				<rdfs:label xml:lang="en">20th January, 2003</rdfs:label>
			</dcq:W3CDTF>
		</dcq:modified>
		<dcq:references>
			<dct:Text rdf:about="http://www.w3.org/Provider/Style/URI.html">
				<dc:title>Cool URIs don't change</dc:title>
				<dc:creator>
					<foaf:Person rdf:about="http://www.w3.org/People/Berners-Lee/">
						<foaf:mbox rdf:resource="mailto:timbl@w3.org"/>
						<foaf:firstName>Tim</foaf:firstName>
						<foaf:surname>Berners-Lee</foaf:surname>
					</foaf:Person>
				</dc:creator>
			</dct:Text>
		</dcq:references>
		<dcq:references>		
			<dct:Text rdf:about="http://www.w3.org/Protocols/rfc2616/rfc2616.html">
				<dc:title>RFC 2616: Hypertext Transfer Protocol &#x2014; HTTP/1.1</dc:title>
				<dc:creator>
					<foaf:Person rdf:about="http://www.w3.org/People/Berners-Lee/">
						<foaf:mbox rdf:resource="mailto:timbl@w3.org"/>
						<foaf:firstName>Tim</foaf:firstName>
						<foaf:surname>Berners-Lee</foaf:surname>
					</foaf:Person>
				</dc:creator>
				<dc:creator>
					<foaf:Person>
						<foaf:firstName>R.</foaf:firstName>
						<foaf:surname>Fielding</foaf:surname>
					</foaf:Person>
				</dc:creator>
				<dc:creator>
					<foaf:Person>
						<foaf:firstName>J.</foaf:firstName>
						<foaf:surname>Gettys</foaf:surname>
					</foaf:Person>
				</dc:creator>
				<dc:creator>
					<foaf:Person>
						<foaf:firstName>J.</foaf:firstName>
						<foaf:surname>Mogul</foaf:surname>
					</foaf:Person>
				</dc:creator>
				<dc:creator>
					<foaf:Person>
						<foaf:firstName>H.</foaf:firstName>
						<foaf:surname>Frystyk</foaf:surname>
					</foaf:Person>
				</dc:creator>
				<dc:creator>
					<foaf:Person>
						<foaf:firstName>L.</foaf:firstName>
						<foaf:surname>Masinter</foaf:surname>
					</foaf:Person>
				</dc:creator>
				<dc:creator>
					<foaf:Person>
						<foaf:firstName>P.</foaf:firstName>
						<foaf:surname>Leach</foaf:surname>
					</foaf:Person>
				</dc:creator>
			</dct:Text>
		</dcq:references>
		<dcq:references>		
			<dct:Text rdf:about="http://www.w3.org/TR/webarch/">
				<dc:title>Architecture of the World Wide Web</dc:title>
				<dc:creator>
					<foaf:Person>
						<foaf:firstName>Ian</foaf:firstName>
						<foaf:surname>Jacobs</foaf:surname>
					</foaf:Person>
				</dc:creator>
			</dct:Text>		
		</dcq:references>
		<dcq:references>
			<dct:Text rdf:about="http://www.w3.org/TR/rdf-schema/">
				<dc:title>RDF Vocabulary Description Language 1.0: RDF Schema</dc:title>
				<dc:creator>
					<foaf:Person>
						<foaf:mbox rdf:resource="mailto:danbri+rdfs@w3.org"/>
						<foaf:firstName>Dan</foaf:firstName>
						<foaf:surname>Brickley</foaf:surname>
					</foaf:Person>
				</dc:creator>
				<dc:creator>
					<foaf:Person>
						<foaf:mbox rdf:resource="mailto:rguha@us.ibm.com"/>
						<foaf:firstName>R. V.</foaf:firstName>
						<foaf:surname>Guha</foaf:surname>
					</foaf:Person>
				</dc:creator>
			</dct:Text>
		</dcq:references>
		<dc:description rdf:parseType="Literal" xml:lang="en-IE">
			<p>
				A common cause of confusion and complaint about the web has been the exact nature
				of the relationship between a resource and the representation or representations
				of that resource that one can retrieve by dereferencing it's URI.
			</p>
			<p>
				A result of this is that many RDF documents contain information about both a
				resource and it's representation with the same URI used to identify both,
				resulting in fragments like:
			</p>
			<div class="codeBlock">
				<code>&lt;foaf:Person<br />
					    xmlns:foaf="http://xmlns.com/foaf/0.1/"<br />
					    xmlns:dc="http://purl.org/dc/elements/1.1/"&gt;<br />
					    &lt;dc:format&gt;application/xhtml+xml&lt;/dc:format&gt;<br />
					&lt;/foaf:Person&gt;<br /></code>
			</div>
			<p>
				In the above fragment the <code>&lt;dc:format&gt;</code> predicate obviously
				refers to the representation (presumably a HTML page with information about the
				person in question), but from a naïve interpretation of the RDF it appears that
				it is saying that the actual person has a format of "application/xhtml+xml"!
			</p>
			<p>
				Hence there is a need for a mechanism that allows us to both describe a resource,
				its representations, and the relationship between them.
			</p>
			<p>
				Representations can themselves be considered resources, and hence we can describe
				them seperately in RDF, if given the predicates and classes we need to do that
				well.
			</p>
			<p>
				This schema defines classes and predicates for doing exactly that. In particular
				the <a href="#Representation">Representation</a> class is used for a
				representation, the <a href="#Representations">Representations</a> class for a
				collection of possible representations, and the
				<a href="#representedBy">representedBy</a> predicate is used to link a resource
				with its representations.
			</p>
			<p>
				This schema also defines <a href="#composedInto">composedInto</a> and its inverse
				<a href="#composedFrom">composedFrom</a> to indicate resources that are created
				from other resources (an example being a document that is created by combining
				a document contain its main content with one containing navigational information)
				and also <a href="#canTransformTo">canTransformTo</a> to indicate a
				representation that can be converted into a different resource by the client (for
				example by use of XSL Transforms. While these do not fall cleanly into the brief
				for this schema they are included because of the following justifications:
			</p>
			<ol>
				<li>
					It is common for these relationships to exist between the resources which would
					also have representedBy relationships. As such dealing these relationships here,
					rather than splitting them over several schemata would prove convenient.
				</li>
				<li>
					The relationships of this nature may seem close enough to the representedBy
					relationship in some cases that users might be tempted into abusing representedBy
					to describe those relationships.
				</li>
			</ol>
			<h2>URIs of Representations</h2>
			<p>
				As a general rule representations should not be given the same URI as the
				resource it represents, to do so would violate the whole concept of a resource
				as something other than its representation, and hence make this schema pointless.
			</p>
			<p>
				An important exception is when the entire point of the resource is the
				bytestream. As an example, if
				<kbd>&lt;http://www.example.com/patches/prog3.4.exe&gt;</kbd> could be
				derefernced to retreive a patch that would enable us to update "prog" to version
				3.4 then the entire purpose of that resource is the very bytestream that would be
				its most likely representation. As such it may be useful to use the same URI
				for both the resource and the representation, in other words the representation
				<em>is</em> the resource.
			</p>
			<p>
				It's worth noting that even in this case the bytestream of the patch isn't the
				only possible representation.
			</p>
			<p>
				In most cases either no URI is needed (a blank node), or else the URI exists for
				the purpose of describing the representation, rather than as a target of
				dereferencing.
			</p>
			<p>
				In some cases it does make sense to allow the URI to be dereferenced. Consider if
				the URI <kbd>&lt;http://www.example.org/&gt;</kbd> would return either a HTML
				document or an RDF/XML document, depending on the Accept HTTP header. In such a
				case the HTML document might link to <kbd>&lt;http://www.example.org/rdf&gt;</kbd>
				which would return the afore-mentioned RDF/XML document whatever the headers. In
				this case the representation is again the resource, and hence it is perfectly
				valid to use the latter URI as the URI of the RDF/XML representation of the
				resource identified by the former URI.
			</p>
			<h2>Jon Isn't Cool!</h2>
			<p>
				For obvious reasons the URIs used for the predicates and classes defined in this
				schema should be <a href="http://www.w3.org/Provider/Style/URI.html"
					title="Cool URIs don't change"
					type="text/html"
					charset="iso-8859-1"
					hreflang="en">cool</a>. They are not cool for <del>two reasons</del><ins>this reason</ins>:
			</p>
			<ol>
				<del>
					<li>
						This document is currently hosted at a location that is leant to me as a favour
						by my employers. It would be an abuse of that favour to somehow start asserting
						that they cannot discontinue its existence.
					</li>
				</del>
				<li>
					This schema is a rather hastily drafted first-stab. It is intended for
					consideration and experimentation, rather than use as is. The use of an
					example.net URI is a deliberate disincentive against using it in its current
					form. While the RDF of this schema does use the schema of itself, this is as an
					example only.
				</li>
			</ol>
		</dc:description>
	</rdf:Description>
	
	<rdfs:Class rdf:about="http://example.net/rep#Representations">
		<rdfs:label xml:lang="en">Representations</rdfs:label>
		<rdfs:subClassOf rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Alt"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A resource of class Representations is a collection (a subclass of
				<code>rdf:Alt</code>) whose members are resources of class
				<a href="#Representation">Representation</a>.
			</p>
			<p>
				This collection is always used, as even in the case where there is only one
				representation other representations are at least theoretically possible.
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rdfs:Class rdf:about="http://example.net/rep#Representation">
		<rdfs:label xml:lang="en">Representation</rdfs:label>
		<rdfs:subClassOf rdf:resource="http://xmlns.com/foaf/0.1/Document"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A resource of class Representation is a downloadable bytestream which is used as a
				representation of another resource.
			</p>
			<p>
				Generally it should not have the same URI as the resource of which it is a
				representation. The only exception being cases like software or software patches
				were the actual bytes is the primary purpose of the resource.
			</p>
			<p>
				Most representations wouldn't be given URIs, or if they were these would not be
				URIs from which the resource could be dereferenced. However such URIs would have
				a place sometimes (for example, a URI which returned either HTML or RDF depending
				on content-negotiation, but where another URI could be used to retreive the RDF
				without negotiation).
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rdfs:Class rdf:about="http://example.net/rep#Criterion">
		<rdfs:label xml:lang="en">Criterion</rdfs:label>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A criterion used in the decision-making that determines which representation of
				a resource is retreived.
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rep:Criterion rdf:about="http://example.net/rep#OnlyRepresentation">
		<rdfs:label xml:lang="en">Only Representation</rdfs:label>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A criterion that indicates that only one representation is available for a given
				resource, and will always be the one retreived.
			</p>
			<p>
				Subclasses are defined which cover common cases.
			</p>
		</rdfs:comment>
	</rep:Criterion>
	
	<rdfs:Class rdf:about="http://example.net/rep#MultipleCriteria">
		<rdfs:label xml:lang="en">Multiple Criteria</rdfs:label>
		<rdfs:subClassOf rdf:resource="http://example.net/rep#Criterion"/>
		<rdfs:subClassOf rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A criterion that indicates that several criteria are used to determine the
				representation used.
			</p>
			<p>
				As such it is considered to be a single criterion composed of the criteria which
				are it's members. As it is a Seq rather than a Bag, ordering can indicate which
				criteria have priority, but this can only be relied on so far. In otherwords the
				first member may over-ride the second member, but it might not.
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rdfs:Class rdf:about="http://example.net/rep#ContentNegotiation">
		<rdfs:label xml:lang="en">Content Negotiation</rdfs:label>
		<rdfs:subClassOf rdf:resource="http://example.net/rep#Criterion"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A criterion that operates on the basis of HTTP headers or other content
				negotiation mechanisms. Subclasses have been defined for common cases.
			</p>
			<p>
				Note: This does not cover the use of headers to produce responses such
				as <a
					href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5"
					title="HTTP/1.1: Header Field Definitions:&#10;304 Not Modified"
					type="text/html"
					charset="iso-8859-1"
					hreflang="en">304 Not Modified</a>. That is an implementation issue, and
				conceptually the same representation is retreived as if the response had been
				a <a
					href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1"
					title="HTTP/1.1: Header Field Definitions:&#10;200 OK"
					type="text/html"
					charset="iso-8859-1"
					hreflang="en">200 OK</a> with the representation bytestream.
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rdfs:Class rdf:about="http://example.net/rep#LanguageNegotiation">
		<rdfs:label xml:lang="en">Language Negotiation</rdfs:label>
		<rdfs:subClassOf rdf:resource="http://example.net/rep#ContentNegotiation"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A criterion that operates on the basis of the <a
					href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4"
					title="HTTP/1.1: Header Field Definitions:&#10;Accept-Language"
					type="text/html"
					charset="iso-8859-1"
					hreflang="en">Accept-Language</a> HTTP header.
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rdfs:Class rdf:about="http://example.net/rep#MIMETypeNegotiation">
		<rdfs:label xml:lang="en">MIME-Type Negotiation</rdfs:label>
		<rdfs:subClassOf rdf:resource="http://example.net/rep#ContentNegotiation"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A criterion that operates on the basis of the <a
					href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1"
					title="HTTP/1.1: Header Field Definitions:&#10;Accept"
					type="text/html"
					charset="iso-8859-1"
					hreflang="en">Accept</a> HTTP header.
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rdfs:Class rdf:about="http://example.net/rep#ClientLocation">
		<rdfs:label xml:lang="en">Client Location</rdfs:label>
		<rdfs:subClassOf rdf:resource="http://example.net/rep#Criterion"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A criterion that operates on heuristics for determining the client's location.
			</p>
			<p>
				Note: There are several different mechanisms for attempting this, with different
				degrees of accuracy. As such this indicates an intention rather than a guarantee
				of success.
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rdfs:Class rdf:about="http://example.net/rep#RequestTime">
		<rdfs:label xml:lang="en">RequestTime</rdfs:label>
		<rdfs:subClassOf rdf:resource="http://example.net/rep#Criterion"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A criterion that is in some way related to the time the request is made.
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rdfs:Class rdf:about="http://example.net/rep#RandomFactor">
		<rdfs:label xml:lang="en">Random Factor</rdfs:label>
		<rdfs:subClassOf rdf:resource="http://example.net/rep#Criterion"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A criterion that is based on some random, pseudo-random, or otherwise
				indeterminable factor.
			</p>
		</rdfs:comment>
	</rdfs:Class>
	
	<rdf:Property rdf:about="http://example.net/rep#representedBy">
		<rdfs:label xml:lang="en">Represented By</rdfs:label>
		<rdfs:domain rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
		<rdfs:range rdf:resource="http://example.net/rep#Representations"/>
		<rdfs:subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/relation"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				The subject is represented by the object. Note that the representation is always
				a <a href="#Representations">Representations</a> collection, rather than a single
				<a href="#Representation">Representation</a>, as an alternative representation is
				always at least theoretically possible.
			</p>
		</rdfs:comment>
	</rdf:Property>
	
	<rdf:Property rdf:about="http://example.net/rep#decidedBy">
		<rdfs:label>Selection Decided By</rdfs:label>
		<rdfs:domain rdf:resource="http://example.net/rep#Representations"/>
		<rdfs:range rdf:resource="http://example.net/rep#Criterion"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				The member of the subject retreived is decided on by considering the object.
			</p>
		</rdfs:comment>
	</rdf:Property>
	
	<rdf:Property rdf:about="http://example.net/rep#composedInto">
		<rdfs:label xml:lang="en">Composed Into</rdfs:label>
		<rdfs:domain rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
		<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				The subject is used to create the object.
			</p>
		</rdfs:comment>
	</rdf:Property>
	
	<rdf:Property rdf:about="http://example.net/rep#composedFrom">
		<rdfs:label xml:lang="en">Composed From</rdfs:label>
		<rdfs:domain rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
		<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				The object is used to create the subject.
			</p>
		</rdfs:comment>
	</rdf:Property>
	
	<rdf:Property rdf:about="http://example.net/rep#canTransformTo">
		<rdfs:label xml:lang="en">Can Transform To</rdfs:label>
		<rdfs:domain rdf:resource="http://example.net/rep#Representation"/>
		<rdfs:range rdf:resource="http://xmlns.com/foaf/0.1/Document"/>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				The object can be created from the subject by a well-defined process (such as
				an XSL Transform). The object may or may not be also retreivable already composed
				on the web (hence there may exist both a canTransformTo and a
				<a href="#composedInto">composedInto</a> relationship between the two resources).
			</p>
		</rdfs:comment>
	</rdf:Property>
	
	<rep:Representation rdf:about="http://example.net/rep#NoRepresentation">
		<rdfs:label xml:lang="en">No Representation</rdfs:label>
		<rdfs:comment rdf:parseType="Literal" xml:lang="en">
			<p>
				A "null" representation, indicating the possibility of no representation being
				returned. In combination with an
				<a href="#OnlyRepresentation">OnlyRepresentation</a> criterion this indicates
				that there is never a resource available. Otherwise it means that there may
				not be a representation under certain circumstances.
			</p>
			<p>
				These "certain circumstances" mean an active decision not to supply the
				representation, rather than an error or security problem.
			</p>
		</rdfs:comment>
	</rep:Representation>
	
</rdf:RDF>