W3C

Protocol for Web Description Resources (POWDER): Test Suite

W3C Working Draft — 21 July 2008

This version
TBC
Latest version
TBC
Editors:
Antonis Kukurikos, Institute of Informatics & Telecommunications (IIT), NCSR

Abstract

The document describes and presents test cases for the Protocol for Web Description Resources (POWDER). The test cases aim to indicate the correct formats of POWDER documents and illustrate various crucial aspects on the usage of POWDER documents, such as locating a document and infering information from it.

Status of this document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This is a Public Working Draft, designed to aid discussion and solicit feedback. It was developed by the POWDER Working Group, which expects to advance this Working Draft to Recommendation Status. Clearly there is more test data to be added, which is expected to happen relatively rapidly.

Please send comments about this document to public-powderwg@w3.org (with public archive).

Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

Table of Contents

1 Introduction
2 Test Types
2.1 Parser Tests
2.2 GRDDL Tests
2.3 POWDER Locator Tests
2.4 POWDER Trust Tests
2.5 POWDER Data Extraction Tests
3 Manifest Files
4 The POWDER tests
5 Acknowledgements
6 References

1 Introduction

As part of the POWDER specification, the POWDER Working Group provides a set of test cases. The present document discusses these test cases. They are intented to facilitate and exemplify the creation of POWDER documents of varying complexity and provide a means to assert the conformance of software applications designed to handle POWDER documents.

The document provides a description of the various test types, the format that was used and the structure of the manifest files that accompany the tests.

2 Test Types

The tests are classified with respect to the issue they aim to examine. The main concerns are the syntactic validity of a document, the equivalence between various forms of POWDER documents, the ability to locate a POWDER document associated with a resource and the ability to infer information about a given resource from a POWDER document associated with it. The following sections indicate the classification of the tests included in the test suite and describe their structure.

2.1 Parser Tests

The parser tests aim to provide a test corpus for implementations of a POWDER parser.

The parser tests are initially separated into positive and negative parser tests. Each test examines the valitidy of a POWDER document against a conformance requirement of the specification. The documents included in the positive tests meet the requirement they are tested against, whereas those included in the negative tests violate a given element of the conformance model.

When given a positive parser test document as its input, a POWDER parser is expected to return a validity confirmation message. In contrast, when the input is a negative parser test document, the POWDER parser is expected to report that the POWDER document is invalid, and may return a message indicating the requirement that is not met, as indicated in the manifest file accompanying the POWDER document of the test.

Each test consists of one POWDER document and a Manifest file. The POWDER document is named posNNN.xml or negNNN.xml if it is included in the positive or negative parser tests respectively, where NNN is the index number of the test with three digits. The Manifest file is named ManifestposNNN.rdf or ManifestnegNNN.rdf.

2.2 GRDDL Tests

The GRDDL tests aim to provide a test corpus for implementations of a POWDER-to-POWDER-S transformation tool.

These tests include pairs of documents. The first peer is a POWDER document, named powderNNN.xml and the second is a POWDER-S document, named powdersNNN.rdf. Each POWDER-S document is what should be derived from its corresponding POWDER document when applying a transformation on the latter. The transformation may or may not be performed using the XSLT provided for this purpose, but the output POWDER-S document must be semantically equivalent (i.e. correspond to equivalent graphs). The Manifest file describing each test is named ManifestgrddlNNN.rdf.

2.3 POWDER Locator Tests

The POWDER locator tests aim to facilitate the testing of applications used to examine the association of a resource with a POWDER description that applies to it. The tests comprise pairs of documents. The first document defines a web resource that contains a reference to a POWDER document while the second one is the POWDER document itself. Any locator MUST reach the POWDER document via the resource, or report. There are tests for each means of locating a POWDER document, as defined in the DR document included in the specification [DR].

2.4 POWDER Trust Tests

TBC

2.5 POWDER Data Extraction Tests

The tests use two documents: a POWDER document and a POWDER-S document. Each test runs an XPath query [XPATH] against the POWDER document or a SPARQL query [SPARQL] against the POWDER-S document. The queries are given as a file named xpathNNN.xp or sparqlNNN.sq. Each file is accompanied by a manifest file, named ManifestxpathNNN.rdf or ManifestsparqlNNN.rdf which defines the information inferred by the query. The results are given in a file named respxpathNNN or respsparqlNNN.

3 Manifest Files

The Manifest files provide a formal, machine-readable description of the test they apply to. Those associated with the POWDER tests follow the schema developed for the RDF test cases [RDF-TEST]. Furthermore, the said schema is extended to include some new properties and types, as defined in the POWDER test ontology (TBD).

Each test is associated with a Manifest file, identified from the URI formed from the file's URL with a fragment test. A given test has a rdf:type explicit, within the scope of:

wdrtest:parsertest
wdrtest:grddltest
wdrtest:locatortest
wdrtest:trusttest
wdrtest:dataextractiontest

Where the wdrtest namespace is bound to http://www.w3.org/2008/07/powder-test/testSchema# and rtest is bound to http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#.

The name of the original author of each test is given using a dc:creator property.

The description of the test is given as a value of a rtest:description property.

The relevant requirement of the specification that this test examines is given as value of a wdrtest:specref property.

The input document for a test is given as a value of a rtest:inputDocument property, whereas the expected output document, if applied, is given as a value of a rtest:outputDocument property. If the production of an output document is not the purpose of the test process, the wdrtest:expectedDocument can be used to provide a free description of the expected results from the execution of the test.

The status of a test included in the suite, declared using a rtest:status property, can be in the set of the following values:

APPROVED
REJECTED
PROPOSED

4 The POWDER Tests

This section demonstrates the documents included in the POWDER Test Suite. The documents are categorized with respect to their type. Each test is defined by the following parametres:

1. The type of the test.

2. A description for the purpose of the test, with respect to its type.

3. A link to the section of the relevant document that defines the part of the specification that is subject to the test.

3. The index of the test in the particular type.

4. A link to the Manifest file that provides a formal description for the test.

5. The preconditions that must be taken into account in order to consider the test valid.

6. The documents that are part of the test.

The actual documents, along with the Manifest file, can be downloaded in a compressed file. The directory structure of the compressed file has as follows:

Top Level

POWDER-TS: The entry directory

Second Level

positive parsers tests
negative parsers tests
grddl tests
trust tests
data extraction tests
Each directory contains the test documents of the corresponding type, along with the manifest file of each test and following the naming conventions discussed in the present document.

Contents

1. Positive Parser Tests

Back to Contents

Parser Test
Positive A POWDER document must include exactly one attribution element 001
Test Assertion
A valid POWDER document must include exactly one attribution element
Protocol for Web Description Resources (POWDER): Description Resources Section 2.1 Operational Semantics
Description
Manifestpos001.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        	xmlns:ex="http://example.org/vocab#">

	<attribution>
    		<issuedby src="http://authority.example.org/company.rdf#me" />
    		<issued>2007-12-14T00:00:00</issued>
  	</attribution>

  	<dr>
    		<iriset>
      		<includehosts>example.com</includehosts>
    		</iriset>

    		<descriptorset>
      			<ex:color>red</ex:color>
      			<ex:shape>square</ex:shape>
      			<displaytext>Everything on example.org is red and square</displaytext>
      			<displayicon ref="http://example.org/icon.png" />
    		</descriptorset>
	</dr>
</powder>

Parser Test Positive The attribution element optionally contains a unique issued element 002
Test Assertion
The required attribution element of a valid POWDER document may contain exactly one issued element
Protocol for Web Description Resources (POWDER): Description Resources Section 2.1 Operational Semantics
Description
Manifestpos002.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14T00:00:00</issued>
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
    </iriset>

    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.org is red and square</displaytext>
      <displayicon src="http://example.org/icon.png" />
    </descriptorset>
  </dr>

</powder>

Parser Test Positive An attribution element optionally contains a unique validfrom element and/or a unique validuntil element 003
Test Assertion
The required attribution element of a valid POWDER document may contain exactly one validfrom element and may contain exactly one validuntil element
Protocol for Web Description Resources (POWDER): Description Resources Section 4.2 Certification Using POWDER
Description
Manifestpos003.rdf
Precondition - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me"/>
    <issued>2007-12-14T00:00:00</issued>
    <validfrom>2007-12-14T00:00:00</validfrom>
    <validuntil>2008-12-14T00:00:00</validuntil>
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
    </iriset>

    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.org is red and square</displaytext>
      <displayicon src="http://example.org/icon.png" />
    </descriptorset>
  </dr>
</powder>

Parser Test Positive The attribution element may contain an abouthosts element 004
Test Assertion
The required attribution element of a valid POWDER document may contain exactly one abouthosts elements
Protocol for Web Description Resources (POWDER): Description Resources Section 2.3 Exclusive Description Resources
Description
Manifestpos004.rdf
Precondition - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
	xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me"/>
    <issued>2007-12-14T00:00:00</issued>
    <validfrom>2007-12-14T00:00:00</validfrom>
    <validuntil>2008-12-14T00:00:00</validuntil>
    <abouthosts>books.example.com archive.example.net</abouthosts>
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
    </iriset>

    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.org is red and square</displaytext>
      <displayicon src="http://example.org/icon.png" />
    </descriptorset>
  </dr>
</powder>

Parser Test Positive A POWDER document may include an unordered list of two or more descriptor set elements 005
Test Assertion
A valid POWDER document may contain any number of dr elements
Protocol for Web Description Resources (POWDER): Description Resources Section 2.1 Operational Semantics
Description
Manifestpos005.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
           xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
    </iriset>
 
    <descriptorset>
      <ex:color>red</ex:color>
    </descriptorset>
  </dr>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
      <includepathstartswith>/foo</includepathstartswith>
    </iriset>

    <descriptorset>
      <ex:color>blue</ex:color>
    </descriptorset>
  </dr>
</powder>

Parser Test Positive A POWDER document may include an ordered list of two or more descriptor set elements 006
Test Assertion
A valid POWDER document may contain an ol element which contains an arbitrarily sized ordered set of dr elements
Protocol for Web Description Resources (POWDER): Description Resources Section 2.3 Exclusive Description Resources
Description
Manifestpos006.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
  </attribution>

  <ol>
    <dr>
      <iriset>
        <includehosts>example.com</includehosts>
        <includepathstartswith>/foo</includepathstartswith>
      </iriset>

      <descriptorset>
        <ex:color>blue</ex:color>
      </descriptorset>
    </dr>

    <dr>
      <iriset>
        <includehosts>example.com</includehosts>
      </iriset>
 
      <descriptorset>
        <ex:color>red</ex:color>
      </descriptorset>
    </dr>
  </ol>
</powder>

Parser Test Positive A POWDER document may include descriptor set elements without a dr element 007
Test Assertions
A valid POWDER document may contain descriptorset elements not within a dr element
Protocol for Web Description Resources (POWDER): Description Resources Section 2.5 Direct Resource Description
Description
Manifestpos007.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <abouthosts>example.org example.com</abouthosts>
  </attribution>

  <descriptorset xml:id="red">
    <ex:color>red</ex:color>
  </descriptorset>

  <descriptorset xml:id="blue">
    <ex:color>blue</ex:color>
  </descriptorset>
</powder>

2. Negative Parser Tests

Parser Test Negative Every POWDER document includes exactly one attribution element 001
Test Assertion
If a POWDER document does not include exactly one attribution element, it is not a valid POWDER document
Protocol for Web Description Resources (POWDER): Description Resources Section 2.1 Operational Semantics
Description
Manifestneg001.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14T00:00:00</issued>
  </attribution>

  <attribution>
    <issuedby ref="http://authority.example.org/company.rdf#you" />
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
    </iriset>

    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.org is red and square</displaytext>
      <displayicon src="http://example.org/icon.png" />
    </descriptorset>
  </dr>
</powder>

Parser Test Negative The attribution element MUST contain an issuedby element 002
Test Assertion
If a POWDER document contains an attribution element that does not include an issuedby element, it is not a valid POWDER document
Protocol for Web Description Resources (POWDER): Description Resources Section 2.1 Operational Semantics
Description
Manifestneg002.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issued>2007-12-14T00:00:00</issued>
    <validfrom>2007-12-14T00:00:00</validfrom>
    <validuntil>2008-12-14T00:00:00</validuntil>
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
    </iriset>

    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.org is red and square</displaytext>
      <displayicon src="http://example.org/icon.png" />
    </descriptorset>
  </dr>
</powder>

Parser Test Negative A dr element MUST include an iriset element 003
Test Assertion
If a POWDER document contains at least one dr element that does not include an iriset element, it is not a valid POWDER document
Protocol for Web Description Resources (POWDER): Description Resources Section 2.1 Operational Semantics
Description
Manifestneg003.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14T00:00:00</issued>
  </attribution>

  <dr>
    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.org is red and square</displaytext>
      <displayicon src="http://example.org/icon.png" />
    </descriptorset>
  </dr>
</powder>

Parser Test Negative An iriset element must not be empty 004
Test Assertion
If a POWDER document contains a dr element that has an empty iriset element, it is not a valid POWDER document
Protocol for Web Description Resources (POWDER): Description Resources Section 2.1 Operational Semantics
Description
Manifestneg004.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14T00:00:00</issued>
    <validfrom>2007-12-14T00:00:00</validfrom>
    <validuntil>2008-12-14T00:00:00</validuntil>
  </attribution>

  <dr>
    <iriset>
    </iriset>

    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.org is red and square</displaytext>
      <displayicon src="http://example.org/icon.png" />
    </descriptorset>
  </dr>
</powder>

Parser Test Negative A descriptorset element must not contain tag elements 005
Test Assertion
If a POWDER document contains a descriptorset element that contains a tag element, it is not a valid POWDER document
Protocol for Web Description Resources (POWDER): Description Resources Section 2.7 Free Text Tags, Comments, Labels and "See Also"
Description
Manifestneg005.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14T00:00:00</issued>
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
    </iriset>

    <desriptorset>
	<ex:color>red</ex:color>
	<ex:shape>square</ex:shape>
    	<tag>London</tag>
    </descriptorset>

    <tagset>
      <tag>Swiss Re</tag>
      <tag>gherkin</tag>
      <tag>London</tag>
    </tagset>
  </dr>
</powder>

Parser Test Negative A dr element must contain a descriptotrset element or a tag element 006
Test Assertion
If a POWDER document contains neither a descriptorset element nor a tagset element, it is not a valid POWDER document
Protocol for Web Description Resources (POWDER): Description Resources Section 2.7 Free Text Tags, Comments, Labels and "See Also"
Description
Manifestneg006.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14T00:00:00</issued>
  </attribution>

  <dr>
    <iriset>
      <includehostsvexample.com</includehosts>
    </iriset>
  </drv
</powder>

3. GRDDL Tests

GRDDL Test Positive Transformation of a POWDER document with a single Description Resource 001
Test Assertion
A transformation of a POWDER document to POWDER-S must produce semantically identical results with this test in respect to the dr elements
Protocol for Web Description Resources (POWDER): Description Resources Section 2.2 Formal Semantics
Description
Manifestgrddl001.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby ref="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14</issued>
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
    </iriset>

    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.org is red and square</displaytext>
      <displayicon ref="http://example.org/icon.png" />
    </descriptorset>
  </dr>
</powder>
<?xml version="1.0"?>
<rdf:RDF
   xmlns:wdr="http://www.w3.org/2007/05/powder#"
   xmlns:wdrs="http://www.w3.org/2007/05/powder-s#"
   xmlns:foaf="http://xmlns.com/foaf/0.1/"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:owl="http://www.w3.org/2002/07/owl#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:dcterms="http://purl.org/dc/terms/0.1/"
   xmlns:ex="http://example.org/vocab#">
 
   <rdf:Description rdf:about="">
     <wdrs:issuedby rdf:resource="http://authority.example.org/company.rdf#me" />
     <dcterms:issued>2007-12-14</dcterms:issued>
   </rdf:Description>
 
   <wdr:iriset rdf:nodeID="iriset_1">
     <owl:intersectionOf rdf:parseType="Collection">
       <owl:Restriction>
         <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder#regex" />
         <owl:hasValue>\:\/\/([^\:\/\?\#\@]+\.)?(example\.com)(:([0-9]+))?\/</owl:hasValue>
       </owl:Restriction>
     </owl:intersectionOf>
   </wdr:iriset>

   <owl:Class rdf:nodeID="descriptorset_1">
     <owl:intersectionOf rdf:parseType="Collection">
       <owl:Restriction>
         <owl:onProperty rdf:resource="http://example.org/vocab#color" />
         <owl:hasValue>red</owl:hasValue>
       </owl:Restriction>
       <owl:Restriction>
         <owl:onProperty rdf:resource="http://example.org/vocab#shape" />
         <owl:hasValue>square</owl:hasValue>
       </owl:Restriction>
     </owl:intersectionOf>
     <dc:description>Everything on example.org is red and square</dc:description>
     <foaf:depiction rdf:resource="http://example.org/icon.png" />
   </owl:Class>
 
   <owl:Class rdf:about="#iriset_1">
     <rdfs:subClassOf rdf:resource="#descriptorset_1"/>
   </owl:Class>
</rdf:RDF>

GRDDL Test Positive Transformation of a POWDER document with an ordered list of Description Resources 002
Test Assertion
A transformation of a POWDER document to POWDER-S must produce semantically identical results with this test with respect to the ol elements
Protocol for Web Description Resources (POWDER): Description Resources Section 2.3 Exclusive Description Resources
Description
Manifestgrddl002.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby ref="http://authority.example.org/company.rdf#me" />
  </attribution>

  <ol>
    <dr>
      <iriset>
        <includehosts>example.com</includehosts>
        <includepathstartswith>/foo</includepathstartswith>
      </iriset>

      <descriptorset>
        <ex:color>blue</ex:color>
      </descriptorset>
    </dr>

    <dr>
      <iriset>
        <includehosts>example.com</includehosts>
      </iriset>
 
      <descriptorset>
        <ex:color>red</ex:color>
      </descriptorset>
    </dr>
  </ol>
</powder>
<?xml version="1.0"?>
<rdf:RDF
    xmlns:wdr="http://www.w3.org/2007/05/powder#"
    xmlns:wdrs="http://www.w3.org/2007/05/powder-s#"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:dcterms="http://purl.org/dcterms/0.1/"
    xmlns:ex="http://example.org/vocab#">

  <rdf:Description rdf:about="">
    <wdrs:issuedby rdf:resource="http://authority.example.org/company.rdf#me" />
    <wdr:aboutHosts>example.org</wdr:aboutHosts>
  </rdf:Description>

  <owl:Class rdf:nodeID="iriset_1">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder#regex" />
        <owl:hasValue>\:\/\/([^\:\/\?\#\@]+.)?(example\.com)(\:([0-9]+))?\/</owl:hasValue>
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder#regex" />
        <owl:hasValue>\:\/\/([^\:\/\?\#\@]*)(\:([0-9]+))?(\/foo)</owl:hasValue>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>

  <owl:Class rdf:nodeID="descriptorset_1">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://example.org/vocab#color" />
        <owl:hasValue>blue</owl:hasValue>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>

  <owl:Class rdf:about="#iriset_1">
    <rdfs:subClassOf rdf:resource="#description_1"/>
  </owl:Class>

  <owl:Class rdf:nodeID="iriset_2">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder#regex" />
        <owl:hasValue>\:\/\/([^\:\/\?\#\@]+.)?(example\.com)(\:([0-9]+))?\/</owl:hasValue>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>
 
  <owl:Class rdf:nodeID="descriptorset_2">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://example.org/vocab#color" />
        <owl:hasValue>red</owl:hasValue>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>

  <owl:Class>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#iriset_2"/>
      <owl:Class>
        <owl:complementOf rdf:parseType="Collection">
          <owl:Class rdf:about="#iriset_1"/>
        </owl:complementOf>
      </owl:Class>
    </owl:intersectionOf>
    <rdfs:subClassOf rdf:ID="description_2"/>
  </owl:Class>
</rdf:RDF>

GRDDL Test Positive Transformation of a POWDER document containing a description resource for which the scope is the union of two IRI sets 003
Test Assertion
A transformation of a POWDER document to POWDER-S must produce semantically identical results with this test with respect to the union of iriset elements
Protocol for Web Description Resources (POWDER): Grouping of Resources Section 2.6 Grouping of resources
Description
Manifestgrddl003.rdf
Preconditions - Namespaces
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14T00:00:00</issued>
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
      <includepathstartswith>/foo</includepathstartswith>
    </iriset>

    <iriset>
      <includehosts>example.org</includehosts>
      <includepathstartswith>/bar</includepathstartswith>
    </iriset>

    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.com/foo, and everything on example.org/bar, is red and square</displaytext>
      <displayicon src="http://example.org/icon.png" />
    </descriptorset>
  </dr>
</powder>
<?xml version="1.0"?>
<rdf:RDF
    xmlns:wdr="http://www.w3.org/2007/05/powder#"
    xmlns:wdrs="http://www.w3.org/2007/05/powder-s#"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:dcterms="http://purl.org/dcterms/0.1/"
    xmlns:ex="http://example.org/vocab#">

  <rdf:Description rdf:about="">
    <wdrs:issuedby rdf:resource="http://authority.example.org/company.rdf#me" />
    <dcterms:issued>2007-12-14T00:00:00</dcterms:issued>
  </rdf:Description>

  <wdr:iriset rdf:nodeID="iriset_1">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder#regex" />
        <owl:hasValue>\:\/\/([^\:\/\?\#\@]+\.)?(example\.com)(:([0-9]+))?\/</owl:hasValue>
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder#regex" />
        <owl:hasValue>\:\/\/([^\:\/\?\#\@]*)(\:([0-9]+))?(\/foo)</owl:hasValue>
      </owl:Restriction>
    </owl:intersectionOf>
  </wdr:iriset>
  
  <wdr:iriset rdf:nodeID="iriset_2">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder#regex" />
        <owl:hasValue>\:\/\/([^\:\/\?\#\@]+\.)?(example\.org)(:([0-9]+))?\/</owl:hasValue>
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder#regex" />
        <owl:hasValue>\:\/\/([^\:\/\?\#\@]*)(\:([0-9]+))?(\/bar)</owl:hasValue>
      </owl:Restriction>
    </owl:intersectionOf>
  </wdr:iriset>
 
  <owl:Class rdf:nodeID="descriptorset_1">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://example.org/vocab#color" />
        <owl:hasValue>red</owl:hasValue>
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://example.org/vocab#shape" />
        <owl:hasValue>square</owl:hasValue>
      </owl:Restriction>
    </owl:intersectionOf>
    <dc:description>Everything on example.com/foo, and everything on example.org/bar, is red and square</dc:description>
    <foaf:depiction rdf:resource="http://example.org/icon.png" />
  </owl:Class>

  <owl:Class rdf:about="#iriset_1">
    <rdfs:subClassOf rdf:nodeID="descriptorset_1"/>
  </owl:Class>

  <owl:Class rdf:about="#iriset_2">
    <rdfs:subClassOf rdf:nodeID="descriptorset_1"/>
  </owl:Class>

</rdf:RDF>

GRDDL Test Positive Transformation of a POWDER document with no DRs but with descriptors that can be referenced externally 004
Test Assertion
A transformation of a POWDER document to POWDER-S must produce semantically identical results with this test with respect to the transformation of descriptorset elements not within a dr element
TBD
Description
Manifestgrddl004.rdf
Preconditions - Namespaces
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <abouthosts>example.org example.com</abouthosts>
  </attribution>

  <descriptorset xml:id="red">
    <ex:color>red</ex:color>
  </descriptorset>

  <descriptorset xml:id="blue">
    <ex:color>blue</ex:color>
  </descriptorset>

</powder>
<?xml version="1.0"?>
<rdf:RDF
    xmlns:wdr="http://www.w3.org/2007/05/powder#"
    xmlns:wdrs="http://www.w3.org/2007/05/powder-s#"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:dcterms="http://purl.org/dcterms/0.1/"
    xmlns:ex="http://example.org/vocab#">

  <rdf:Description rdf:about="">
    <wdrs:issuedby rdf:resource="http://authority.example.org/company.rdf#me" />
    <wdr:abouthosts>example.org example.com</wdr:abouthosts>
  </rdf:Description>

  <owl:Class rdf:ID="red">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://example.org/vocab#color" />
        <owl:hasValue>red</owl:hasValue>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>

  <owl:Class rdf:ID="blue">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://example.org/vocab#color" />
        <owl:hasValue>blue</owl:hasValue>
      </owl:Restriction>
    </owl:intersectionOf>
  </owl:Class>

</rdf:RDF>

GRDDL Test Positive Transformation of a POWDER document containing includehost and includeports in the iriset element 005
Test Assertion
A transformation of a POWDER document to POWDER-S must produce semantically identical results with this test with respect to the transformation of includehosts and includeports elements
Protocol for Web Description Resources (POWDER): Grouping of Resources Section 2.1 Constraints on IRI components
Description
Manifestgrddl005.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?>
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14T00:00:00</issued>
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com example.org</includehosts>
      <includeports>80 8080 8081 8082</includeports>
    </iriset>
    <descriptorset>
      <ex:color>red</ex:color>
      <ex:shape>square</ex:shape>
      <displaytext>Everything on example.org and example.com is is red and square</displaytext>
      <displayicon src="http://example.org/icon.png" />
   </descriptorset>
  </dr>
</powder>
<?xml version="1.0"?>
<rdf:RDF
   xmlns:wdrs="http://www.w3.org/2007/05/powder-s#"
   xmlns:wdrs="http://www.w3.org/2007/05/powder-s#"
   xmlns:foaf="http://xmlns.com/foaf/0.1/"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:owl="http://www.w3.org/2002/07/owl#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:dcterms="http://purl.org/dc/terms/0.1/"
   xmlns:ex="http://example.org/vocab#">
 
   <rdf:Description rdf:about="">
     <wdrs:issuedby rdf:resource="http://authority.example.org/company.rdf#me" />
     <dcterms:issued>2007-12-14T00:00:00</dcterms:issued>
   </rdf:Description>
 
   <owl:Class rdf:nodeID="iriset_1">
     <owl:intersectionOf rdf:parseType="Collection">
       <owl:Restriction>
         <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder-s#matchesregex" />
         <owl:hasValue  rdf:datatype="http://www.w3.org/2001/XMLSchema-datatypes#string">\:\/\/([^\:\/\?\#\@]+\.)?(example\.com|example\.org)(\:([0-9]+))?\/</owl:hasValue>
       </owl:Restriction>
       <owl:Restriction>
         <owl:onProperty rdf:resource="http://www.w3.org/2007/05/powder-s#matchesregex" />
         <owl:hasValue rdf:datatype="http://www.w3.org/2001/XMLSchema-datatypes#string">\:\/\/([^\:\/\?\#\@]+\.)*[^\:\/\?\#\@]+\:(80|8080|8081|8082)\/</owl:hasValue>
       </owl:Restriction>
     </owl:intersectionOf>
   </owl:Class>

   <owl:Class rdf:nodeID="descriptorset_1">
     <owl:intersectionOf rdf:parseType="Collection">
       <owl:Restriction>
         <owl:onProperty rdf:resource="http://example.org/vocab#color" />
         <owl:hasValue>red</owl:hasValue>
       </owl:Restriction>
       <owl:Restriction>
         <owl:onProperty rdf:resource="http://example.org/vocab#shape" />
         <owl:hasValue>square</owl:hasValue>
       </owl:Restriction>
     </owl:intersectionOf>
     <dc:description>Everything on example.org and example.com is is red and square</dc:description>
     <foaf:depiction rdf:resource="http://example.org/icon.png" />
   </owl:Class>
 
   <owl:Class rdf:about="#iriset_1">
     <rdfs:subClassOf rdf:resource="#descriptorset_1"/>
   </owl:Class>
 
</rdf:RDF>

GRDDL Test Positive Transformation of a POWDER document with user-defined datatypes 006
Test Assertion
A transformation of a POWDER document containing user-defined datatypes to POWDER-S must produce semantically identical results with this test
TBD
Description
Manifestgrddl006.rdf
Preconditions - Namespace
@prefix ex: <http://example.org/vocab> .
Documents
<?xml version="1.0"?
<powder xmlns="http://www.w3.org/2007/05/powder#" 
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:ex="http://example.org/vocab#">

  <attribution>
    <issuedby src="http://authority.example.org/company.rdf#me" />
    <issued>2007-12-14T00:00:00</issued>
  </attribution>

  <dr>
    <iriset>
      <includehosts>example.com</includehosts>
      <includeports>80 8080 8081 8082</includeports>
    </iriset>

    <descriptorset>
      <ex:colour rdf:resource=="http://example.org/vocab#red"/>
      <ex:shape>square</ex:shape>
    </descriptorset>
  </dr>

</powder>
<?xml version="1.0"?>
<rdf:RDF
   xmlns:wdrs="http://www.w3.org/2007/05/powder-s#"
   xmlns:wdrs="http://www.w3.org/2007/05/powder-s#"
   xmlns:foaf="http://xmlns.com/foaf/0.1/"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:ox="http://www.w3.org/2006/12/owl2#"
   xmlns:ex="http://example.org/vocab#">
 
   <rdf:Description rdf:about="">
     <wdrs:issuedby rdf:resource="http://authority.example.org/company.rdf#me" />
   </rdf:Description>

   <ox:Declaration rdf:nodeID="iriset_1">
     <ox:OWLClass ox:URI="#iriset_1">
       <ox:ObjectIntersectionOf>
         <ox:DataAllValuesFrom>
           <ox:DataProperty>wdr:hasIRI</ox:DataProperty>
           <ox:DatatypeRestriction>
             <ox:Datatype>xsd:anyURI</ox:Datatype>
             <ox:Restriction facet="pattern" >
               \:\/\/([^\:\/\?\#\@]+\.)?(example\.com|example\.org)(\:([0-9]+))?\/
             </ox:Restriction>
           </ox:DatatypeRestriction>
         </ox:DataAllValuesFrom>
         <ox:DataAllValuesFrom>
           <ox:DataProperty>wdr:hasIRI</ox:DataProperty>
           <ox:DatatypeRestriction<
             <ox:Datatype>xsd:anyURI</ox:Datatype>
             <ox:Restriction facet="pattern" >
               \:\/\/([^\:\/\?\#\@]+\.)*[^\:\/\?\#\@]+\:(80|8080|8081|8082)\/
             </ox:Restriction>
           </ox:DatatypeRestriction>
         </ox:DataAllValuesFrom>
       </ox:ObjectIntersectionOf>
     </ox:OWLClass>
   </ox:Declaration>
  
   <ox:Declaration rdf:nodeID="descriptor_1">
     <ox:OWLClass ox:URI="description_1">
       <ox:ObjectIntersectionOf>
         <ox:ObjectHasValue>
           <ox:ObjectProperty>ex:shape</ox:ObjectProperty>
           <ox:Individual>ex:square</ox:Individual>
         </ox:ObjectHasValue>
       </ox:ObjectIntersectionOf>
     </ox:OWLClass>
   </ox:Declaration>
  
   <ox:SubClassOf>
     <ox:OWLClass ox:URI="#iriset_1" />
     <ox:OWLClass ox:URI="#descriptorset_1" />
   </ox:SubClassOf>

</rdf:RDF>

4. POWDER Locator Tests

TBD

5. Trust Tests

TBD

6. POWDER Data Extraction Tests

TBD

5 Acknowledgements

Many thanks to Tim Boland for his comments and guidelines during the creation of this document.

6 References

[GRDDL]
Gleaning Resource Descriptions from Dialects of Languages (GRDDL) W3C Recommendation 11 September 2007
[DR]
Protocol for Web Description Resources: Description Resources W3C Working Draft 17 March 2008
[XPATH]
XML Path Language Version 1.0 W3C Recommendation 16 November 1999
[SPARQL]
SPARQL Query Language for RDF W3C Recommendation 15 January 2008
[RDF-TEST]
RDF Test Cases W3C Recommendation 10 February 2004