POWDER Feature List

Table 1: Features of POWDER data and discovery introduced in the Description Resources document
Feature Section & relevant examples Validator POWDER and POWDER BASE XML Schema Perl Processor PHP Processor Semantic Processor
Basic structure of a POWDER Document Section 2.1, Example 2-1 Yes Tool includes validator Tool includes validator (validation is carried out against the POWDER(-BASE) XML schema) N/A
Multiple Description Resources in a POWDER document Section 2.1, Example 2-2; Section 2.3, Example 2-4 Yes Yes (gives additive description) Yes (gives additive description) Yes
Disjoint Description Resources in a POWDER document Section 2.3, Example 2-5 Yes Yes (gives correct, single, description) Yes (gives correct, single, description) Yes
Ordered Lists of DRs Section 2.3, Example 2-6, Example 2-7 Yes Yes (gives correct, single, description) Yes (gives correct, single, description) Yes
DRs with multiple IRI sets POWDER Section 2.4, Example 2-8 Yes Yes Yes Yes
Direct Resource Description Section 2.5, Example 2-9 Yes Yes. Any IRI is described correctly if the fragment identifier is included in the value of d Yes. Any IRI is described correctly if the fragment identifier is included in the value of d No
Pre-defined descriptions, remote descriptor sets Section 2.6, Example 2-10, Example 2-11 Yes Yes Yes Yes
Free Text Tags, Comments, Labels and "See Also" Section 2.7, Example 2-12, Example 2-13 Yes Yes Yes Yes
Multiple Descriptor Sets Section 2.8.1, Example 2-14 Yes Yes Yes Yes
XML Data in POWDER Section 2.8.2, Example 2-15 Yes Yes Yes Yes
Follows HTML Link elements with rel="describedby" and relevant Content type Section 4.1.1, Example 4-1 N/A No Yes N/A
Follows HTTP Link elements with rel="describedby" and relevant Content type Section 4.1.1 N/A No Yes N/A
Linking a Resource to a POWDER Processor to Acquire RDF Section 4.2 N/A Yes Yes N/A
Follows wdr:more links within POWDER documents Section 4.3, Example 4-5 N/A Yes Yes Not, but ontology headers (including the rdfs:seeAlso triple generated from the wdr:more element) are returned if the -a switch is on
Table 2: POWDER Processor Conformance as defined in the Description Resources document
Feature Section & relevant examples Perl Processor PHP Processor Semantic Processor
describe(u) function Section 3, Example 3-1 Yes Yes Yes
No Known result Section 3, Example 3-2 Yes Yes (in addition, it returns an error when POWDER documents do exist, but they do not apply to the associated resource) Yes
POWDER Processor Error handling Section 3.1 Yes Yes N/A
Processes POWDER-BASE Section 3.2 Yes Yes No
Processes POWDER Section 3.2 Yes Yes (via POWDER-BASE) No
Processes POWDER-S Section 3.2 No No Yes
Returns an informative message if passed a POWDER or POWDER-S document if these are not supported Section 3.2 Yes Only for POWDER-S (POWDER documents are automatically converted into POWDER-BASE before being processed) An error message is returned but it doesn't recognise a POWDER or POWDER-BASE document per se
Able to retrieve POWDER documents from the Web using HTTP Section 3.2 Yes Yes Yes
Checks all POWDER documents used in returning a description of u for the presence of the wdr:abouthosts element Section 3.2 Yes Yes N/A
Ignores all POWDER documents where wdr:abouthosts is present and the host component of u is not the same as, or is not a subdomain of, at least one of the hosts listed in wdr:abouthosts Section 3.2 Yes Yes N/A
Returns an error if, after this filtering, a DR in an available document refers to a descriptor set defined in one that is not available Section 3.2 Yes Yes Yes
If available through a Web interface, the parameter names u and d are used for the IRI of the resource to be described, and the data source from which the description is to be extracted, respectively Section 3.2 Yes Yes N/A
Return error messages, such as detecting that a POWDER document is invalid, unavailable over the network, etc Section 3.2 Yes Yes Yes
Does not, where IRI1 is in scope of a given DR and dereferencing it redirects to IRI2, automatically treat IRI2 as also being in scope of that DR. Section 3.2 It does not It does not It does not
Table 3: Features introduced in the Grouping of Resources document
Feature Section Validator POWDER and POWDER BASE XML Schema POWDER Grouping Tester Perl Processor PHP Processor Semantic Processor
An empty IRI set definition is the empty set Section 1.2 Reports as invalid Yes Reports the error The processor returns a "not known" response Not as such. The XSLT renders an empty IRI set as owl:Nothing (although an empty IRI set means the original POWDER doc is invalid)
Enforcement of rules concerning cardinality of in/exclude: schemes, hosts, ports, exact paths, path contains, path starts with, path ends with Section 2.1 Yes N/A Reports any validation error Reports any validation error detected against the POWDER(-BASE) XML schema N/A
in/exclude: query contains Section 2.1.2 Yes N/A Yes Yes N/A
IRI/URI Canonicalisation Section 2.1.3 N/A Yes Yes Yes No
Data encoding Section 2.1.4 Yes Yes Yes Yes No
The wdr:includeiripattern and wdr:excludeiripattern Constraints Section 2.2 Yes Yes Yes Yes N/A
The wdr:includeregex and wdr:excluderegex Constraints Section 2.3 Yes Yes Yes Yes N/A
The wdr:includeresources and wdr:excluderesources Constraints Section 2.5 Yes Yes Yes Yes N/A
Table 4: Features introduced in the Formal Semantics document
Feature Section & relevant examples P to P-BASE XSLT P to P-BASE script P-BASE to P-S XSLT
Transformation of attribution elements Section 2.2, Example 2-1, Example 2-2 N/A N/A Yes, see XSLT Test 3
Transformation of descriptor sets Section 3, Example 3-1, Example 3-2 N/A N/A Yes, see XSLT Test 2 and XSLT Test 3
Transformation of DRs with multiple IRI sets Section 3, Example 3-3, Example 3-4 N/A N/A XSLT Test 2
Transformation of DRs with multiple descriptor sets Section 3.1, Example 3-5, Example 3-6 N/A N/A XSLT Test 2
Transformation of ordered lists of DRs Section 3.1, Example 3-7, Example 3-8 N/A N/A XSLT Test 2
Transformation of typeof/rdf:type Section 3.2.2, Example 3-10 N/A N/A XSLT Test 5
Transformation of references to external descriptor sets Section 3.2.3, Example 3-11 N/A N/A Yes, see XSLT Test 7 and XSLT Test 8
Transformation of sha1sum, certified, displaytext, displayicon, seealso, label and comment Section 3.2.4, Example 3-11 N/A N/A Yes, see XSLT Test 3
Transformation of tagsets Section 3.3, Example 3-12 N/A N/A Yes, see XSLT Test 2
White space and list pre-processing Section 4.1 Yes, see XSLT Test 1 Yes N/A
Transformation of in/exclude: schemes, hosts, ports, exact paths, path contains, path starts with, path ends with, resources Section 4.1, Example 4-1 Yes, see XSLT Test 1 Yes Yes, see XSLT Test 1
Transformation of in/exclude: query contains Section 4.1, Example 4-2 Yes, see XSLT Test 1 Yes Yes, see XSLT Test 1
Transformation of in/exclude: iripattern Section 4.1, Example 4-3 Yes, see XSLT Test 1 Yes Yes, see XSLT Test 1
Transformation of descriptor sets outwith a DR Section 4.4, Example 4-5 N/A N/A Yes, see XSLT Test 2
Transformation of abouthosts/aboutregex Section 4.5, Example 4-6 Yes, see XSLT Test 1 Yes Yes, see XSLT Test 7
Table 5: POWDER Processor Tests and Results
u d
(value given is for a POWDER document. The transformed POWDER-S doc is used as input for the Semantic Processor)
Perl Processor output includes PHP Processor output includes Semantic Processor output includes
Test 1: An IRI in scope of a DR returns the correct description (based on DR doc Example 2-1)
http://www.example.com/ http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.xml
<rdf:Description rdf:about="http://www.example.com/">
  <ex:color>red</ex:color>
  <ex:shape>square</ex:shape>
  <wdrs:logo rdf:resource="http://example.org/icon.png" />
  <wdrs:text>Everything on example.com is red and square</wdrs:text>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/">
  <ex:color xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">red</ex:color>
  <ex:shape xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">square</ex:shape>
  <wdrs:text>Everything on example.com is red and square</wdrs:text>
  <wdrs:logo rdf:resource="http://example.org/icon.png"/>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://example.com/">
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.rdf"/>
  <wdrs:logo rdf:resource="http://example.org/icon.png"/>
  <wdrs:text>Everything on example.com is red and square</wdrs:text>
  <ex:shape>square</ex:shape>
  <ex:color>red</ex:color>
</rdf:Description> 
Test 2: An IRI not in scope of a DR returns the correct 'not known to' response (based on DR doc Example 2-1)
http://www.example.org/ http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.xml
<rdf:Description rdf:about="http://www.example.org/">
  <wdrs:notknownto rdf:resource="http://i-sieve.com/cgi-bin/processor.cgi" />
</rdf:Description>
<rdf:Description rdf:about="http://www.example.org/">
  <wdrs:notknownto rdf:resource="http://dawsec.dicom.uninsubria.it:80/andrea/ppp/PowderProcessor/index.php"/>
</rdf:Description>
<rdf:Description rdf:about="http://example.org/">
  <wdrs:notknownto rdf:resource="http://konstant.gr/transonto/apps#powderproc"/>
</rdf:Description> 
Test 3: An IRI not in scope of a DR returns the correct 'not known to' response, noting in particular that the addition of extra characters to the beginning of a string given in an includehosts element does not give an erroneous match (based on DR doc Example 2-1)
http://badexample.com/ http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.xml
<rdf:Description rdf:about="http://badexample.com/">
  <wdrs:notknownto rdf:resource="http://i-sieve.com/cgi-bin/processor.cgi" />
</rdf:Description>
<rdf:Description rdf:about="http://badexample.com/">
  <wdrs:notknownto rdf:resource="http://dawsec.dicom.uninsubria.it:80/andrea/ppp/PowderProcessor/index.php"/>
</rdf:Description>
<rdf:Description rdf:about="http://badexample.com/">
  <wdrs:notknownto rdf:resource="http://konstant.gr/transonto/apps#powderproc"/>
</rdf:Description> 
Test 4: An IRI in scope of a DR returns the correct response, in particular where u is on a sub domain of the given includehosts (based on DR doc Example 2-1)
http://foo.example.com/bar.html http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.xml
<rdf:Description rdf:about="http://foo.example.com/bar.html">
  <ex:color>red</ex:color>
  <ex:shape>square</ex:shape>
  <wdrs:logo rdf:resource="http://example.org/icon.png" />
  <wdrs:text>Everything on example.com is red and square</wdrs:text>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://foo.example.com/bar.html">
  <ex:color xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">red</ex:color>
  <ex:shape xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">square</ex:shape>
  <wdrs:text>Everything on example.com is red and square</wdrs:text>
  <wdrs:logo rdf:resource="http://example.org/icon.png"/>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://foo.example.com/bar.html">
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_01.rdf"/>
  <wdrs:logo rdf:resource="http://example.org/icon.png"/>
  <wdrs:text>Everything on example.com is red and square</wdrs:text>
  <ex:shape>square</ex:shape>
  <ex:color>red</ex:color>
</rdf:Description> 
Test 5: An IRI in scope of multiple DRs within a document returns the correct response (based on DR doc Example 2-2)
http://www.example.com/foo.bar http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_2.xml
<rdf:Description rdf:about="http://www.example.com/foo.bar">
  <ex:color>red</ex:color>
  <ex:finish rdf:resource="http://example.org/vocab#shiny" />
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_2.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/foo.bar">
  <ex:finish xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#" rdf:resource="http://example.org/vocab#shiny"/>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_2.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/foo.bar">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/xslt/example_2_2.rdf"/>
  <j.0:color>red</j.0:color>
  <j.0:finish rdf:resource="http://example.org/vocab#shiny"/>
</rdf:Description>
Test 6: An IRI in scope of one of multiple DRs within a document returns the correct response (based on DR doc Example 2-2)
http://www.example.com/page.html http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_2.xml
<rdf:Description rdf:about="http://www.example.com/page.html">
  <ex:color>red</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_2.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/page.html">
  <ex:color xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">red</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_2.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/page.html">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/xslt/example_2_2.rdf"/>
  <j.0:color>red</j.0:color>
</rdf:Description>
Test 7a: An IRI in scope of disjoint DRs within a document returns the correct response (based on DR doc Example 2-5)
http://www.example.com/page.html http://www.w3.org/TR/powder-dr/example_2_5.xml
<rdf:Description rdf:about="http://www.example.com/page.html">
  <ex:color>red</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/powder-dr/example_2_5.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/page.html">
  <ex:color xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">red</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/powder-dr/example_2_5.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/page.html">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/xslt/example_2-5.rdf"/>
  <j.0:color>red</j.0:color>
</rdf:Description>
Test 7b: An IRI in scope of disjoint DRs within a document returns the correct response (based on DR doc Example 2-5)
http://www.example.com/foo/page.html http://www.w3.org/TR/powder-dr/example_2_5.xml
<rdf:Description rdf:about="http://www.example.com/foo/page.html">
  <ex:color>blue</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/powder-dr/example_2_5.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/foo/page.html">
  <ex:color xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">blue</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/powder-dr/example_2_5.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/foo/page.html">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/xslt/example_2-5.rdf"/>
  <j.0:color>blue</j.0:color>
</rdf:Description>
Test 8a: An IRI in scope of one DR in an ordered list returns the correct response (based on DR doc Example 2-6)
http://example.com/foo.jpg http://www.w3.org/TR/powder-dr/dr-example_2_06.xml
<rdf:Description rdf:about="http://example.com/foo.jpg">
  <ex:color>blue</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/powder-dr/dr-example_2_06.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://example.com/foo.jpg">
  <ex:color xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">blue</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/powder-dr/dr-example_2_06.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://example.com/foo.jpg">
  <wdrs:describedby
   rdf:resource="http://philarcher.org/powder/dr/dr-example_2_06.rdf"/>
  <ex:color>blue</ex:color>
</rdf:Description> 
Test 8b: An IRI in scope of one DR in an ordered list returns the correct response (based on DR doc Example 2-6)
http://foo.example.com/bar.html http://www.w3.org/TR/powder-dr/dr-example_2_06.xml
<rdf:Description rdf:about="http://foo.example.com/bar.html">
  <ex:color>red</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/powder-dr/dr-example_2_06.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://foo.example.com/bar.html">
  <ex:color xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">red</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/powder-dr/dr-example_2_06.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://foo.example.com/bar.html">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_06.rdf"/>
  <ex:color>red</ex:color>
</rdf:Description>
Test 9a: An IRI in scope of one of multiple IRI sets in a single DR returns the correct response (based on DR doc Example 2-8)
http://example.com/foo.jpg http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_08.xml
<rdf:Description rdf:about="http://example.com/foo.jpg">
  <ex:color>red</ex:color>
  <ex:shape>square</ex:shape>
  <wdrs:logo rdf:resource="http://example.org/icon.png" />
  <wdrs:text>Everything on example.com/foo, and everything on example.org/bar, is red and square</wdrs:text>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_08.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://example.com/foo.jpg">
  <ex:color xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">red</ex:color>
  <ex:shape xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">square</ex:shape>
  <wdrs:text>Everything on example.com/foo, and everything on example.org/bar, is red and square</wdrs:text>
  <wdrs:logo rdf:resource="http://example.org/icon.png"/>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_08.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://example.com/foo.jpg">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_08.rdf"/>
  <ex:shape>square</ex:shape>
  <ex:color>red</ex:color>
</rdf:Description> 
Test 9b: An IRI out of scope, but superficially similar to one that would be in scope of one of multiple IRI sets in a single DR returns the correct 'not known to' response (based on DR doc Example 2-8)
http://foo.example.com/bar.html http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_08.xml
<rdf:Description rdf:about="http://foo.example.com/bar.html">
  <wdrs:notknownto rdf:resource="http://i-sieve.com/cgi-bin/processor.cgi" />
</rdf:Description>
<rdf:Description rdf:about="http://foo.example.com/bar.html">
  <wdrs:notknownto rdf:resource="http://dawsec.dicom.uninsubria.it:80/andrea/ppp-new/ppp/PowderProcessor/index.php"/>
</rdf:Description>
<rdf:Description rdf:about="http://foo.example.com/bar.html">
  <wdrs:notknownto rdf:resource="http://konstant.gr/transonto/apps#powderproc"/>
</rdf:Description>
Test 10a: Any IRI is described correctedly if the value of d points directly to a descriptor set using a fragment identifier (based on DR doc Example 2-9)
http://foo.example.com/page.html http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_9_1.xml#blue
<rdf:Description rdf:about="http://foo.example.com/page.html">
  <ex:color>blue</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_9_1.xml#blue" />
</rdf:Description>
<rdf:Description rdf:about="http://foo.example.com/page.html">
  <ex:color xmlns:ex="http://example.org/vocab#" xmlns="http://www.w3.org/2007/05/powder#">blue</ex:color>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_9_1.xml#blue"/>
</rdf:Description>
No - this would be at the application layer above semPP
Test 10b: Any IRI not within the hosts listed in abouthosts returns the not known to response even if the value of d points directly to a descriptor set using a fragment identifier (based on DR doc Example 2-9)
http://foo.example.net/page.html http://www.w3.org/TR/2008/WD-powder-dr-20081114/example_2_9_1.xml#blue
<rdf:Description rdf:about="http://foo.example.net/page.html">
  <wdrs:notknownto rdf:resource="http://i-sieve.com/cgi-bin/processor.cgi" />
</rdf:Description>
<rdf:Description rdf:about="http://foo.example.net/page.html">
  <wdrs:notknownto rdf:resource="http://dawsec.dicom.uninsubria.it:80/andrea/ppp/PowderProcessor/index.php"/>
</rdf:Description>
No - this would be at the application layer above semPP
Test 11a: Where a POWDER document contains only descriptor set and no DRs, any value of u returns the 'not known to' response, even if it is within an abouthosts restriction (based on DR doc Example 2-10, powder1.xml)
http://books.example.com/ http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_10_1.xml
<rdf:Description rdf:about="http://books.example.com/">
  <wdrs:notknownto rdf:resource="http://i-sieve.com/cgi-bin/processor.cgi" />
</rdf:Description>
<rdf:Description rdf:about="http://books.example.com/">
  <wdrs:notknownto rdf:resource="http://dawsec.dicom.uninsubria.it:80/andrea/ppp/PowderProcessor/index.php"/>
</rdf:Description>
<rdf:Description rdf:about="http://books.example.com/">
  <wdrs:notknownto rdf:resource="http://konstant.gr/transonto/apps#sempp"/>
</rdf:Description>
Test 11b: A correct description is returned when a DR refers to a descriptor set in another document, (based on DR doc Example 2-10, powder2.xml)
http://books.example.com/robin/book1.html http://i-sieve.com/powder_examples/example_2_10_2.xml
<rdf:Description rdf:about="http://books.example.com/robin/book1.html">
  <wdrs:logo rdf:resource="http://education.example.org/ks1.png" />
  <wdrs:text>This material is suitable for UK National Curriculum Key Stage 1</wdrs:text>
  <wdrs:describedby rdf:resource="http://i-sieve.com/powder_examples/example_2_10_2.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://books.example.com/robin/book1.html">
  <wdrs:text>This material is suitable for UK National Curriculum Key Stage 1</wdrs:text>
  <wdrs:logo rdf:resource="http://education.example.org/ks1.png"/>
  <wdrs:describedby rdf:resource="http://i-sieve.com/powder_examples/example_2_10_1.xml#ks1"/>
</rdf:Description>
<rdf:Description rdf:about="http://books.example.com/robin/book2.html">
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_10_2.rdf"/>
  <rdf:type rdf:resource="http://education.example.org/powder1.rdf#ks_1"/>
</rdf:Description>

Issuing a slightly different command will yield the full result, i.e.
echo "http://books.example.com/starling/book1.html" | sempp dr-example_2_10_1.rdf dr-example_2_10_2.rdf gives:

<rdf:Description rdf:about="http://books.example.com/starling/book1.html">
  <wdrs:logo rdf:resource="http://education.example.org/ks2.png"/>
  <wdrs:text>This material is suitable for UK National Curriculum Key Stage 2</wdrs:text>
  <rdf:type rdf:resource="http://education.example.org/powder1.rdf#ks_2"/>
</rdf:Description>
Test 11c: The specific error 101 is returned when a DR refers to a descriptor set in another POWDER document in which an abouthosts restriction places u out of scope, (See DR doc 3.1 Error Handling)
http://books.example.com/robin/book1.html http://philarcher.org/powder_examples/example_2_10_2_bad.xml
<rdf:Description rdf:about="http://philarcher.org/powder_examples/example_2_10_2_bad.xml">
  <wdrs:err_code>101</wdrs:err_code>
  <wdrs:data_error>A candidate resource is within the scope of a DR that refers to a descriptor set that, through an abouthosts or aboutregex restriction, cannot apply </wdrs:data_error>
</rdf:Description>
<rdf:Description rdf:about="http://philarcher.org/powder_examples/example_2_10_2_bad.xml">
  <rdf:type rdf:resource="http://www.w3.org/2007/05/powder-s#Document"/>
  <foaf:maker rdf:resource="http://books.example.com/company.rdf#me"/>
  <dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2008-03-03T00:00:00</dcterms:issued>
  <wdrs:error_code rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">101</wdrs:error_code>
  <wdrs:data_error xml:lang="en">This POWDER document refers to a descriptor set not applying to the candidate resource.</wdrs:data_error>
</rdf:Description>
<rdf:Description rdf:about="file://localhost/users/parcher/dr-example_2_10_2.rdf">
  <wdrs:data_error rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Description Resource refers to a descriptor set that is out of scope</wdrs:data_error>
  <wdrs:err_code rdf:datatype="http://www.w3.org/2001/XMLSchema#int">101</wdrs:err_code>
</rdf:Description>
<rdf:Description rdf:about="http://education.example.org/powder1.rdf">
  <wdrs:data_error rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Description Resource refers to a descriptor set that is out of scope</wdrs:data_error>
  <wdrs:err_code rdf:datatype="http://www.w3.org/2001/XMLSchema#int">101</wdrs:err_code>
</rdf:Description>
Test 12: A correct description is returned when a DR contains a tag set, (based on DR doc Example 2-13)
http://www.example.com/page.html http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_13.xml
<rdf:Description rdf:about="http://www.example.com/page.html">
  <wdrs:tag>London</wdrs:tag>
  <wdrs:tag>Swiss Re</wdrs:tag>
  <wdrs:tag>gherkin</wdrs:tag>
  <rdfs:seeAlso rdf:resource="http://photo.example.com/gherkin.jpg" />
  <rdfs:label>Tags for the London landmark</rdfs:label>
  <rdfs:comment>Tags are linked to specific resources that contextualize them</rdfs:comment>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_13.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/page.html">
  <rdfs:label>Tags for the London landmark</rdfs:label>
  <wdrs:tag>London</wdrs:tag>
  <wdrs:tag>Swiss Re</wdrs:tag>
  <wdrs:tag>gherkin</wdrs:tag>
  <rdfs:seeAlso rdf:resource="http://encyclopaedia.example.com/gherkin.html"/>
  <rdfs:seeAlso rdf:resource="http://photo.example.com/gherkin.jpg"/>
  <rdfs:comment>Tags are linked to specific resources that contextualize them</rdfs:comment>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_13.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/page.html">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_13.rdf"/>
  <rdfs:comment>Tags are linked to specific resources that contextualize them</rdfs:comment>
  <rdfs:label>Tags for the London landmark</rdfs:label>
  <rdfs:seeAlso rdf:resource="http://photo.example.com/gherkin.jpg"/>
  <rdfs:seeAlso rdf:resource="http://encyclopaedia.example.com/gherkin.html"/>
  <wdrs:tag>gherkin</wdrs:tag>
  <wdrs:tag>Swiss Re</wdrs:tag>
  <wdrs:tag>London</wdrs:tag>
</rdf:Description> 
Test 13a: A correct description is returned when a POWDER document contains several different elements, included descriptors etc, (based on DR doc Example 2-14)
http://movie.example.com/after9pm/movie1.mpg http://philarcher.org/powder/dr/dr-example_2_14.xml
<rdf:Description rdf:about="http://movie.example.com/after9pm/movie1.mpg">
  <ex:agemin>18</ex:agemin>
  <wdrs:logo rdf:resource="http://authority.example.org/adult.png" />
  <wdrs:text>Adults Only</wdrs:text>
  <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite" />
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://movie.example.com/after9pm/movie1.mpg">
  <ex:agemin xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">18</ex:agemin>
  <wdrs:text>Adults Only</wdrs:text>
  <wdrs:logo rdf:resource="http://authority.example.org/adult.png"/>
  <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite"/>
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://movie.example.com/after9pm/movie1.mpg">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.rdf"/>
  <wdrs:logo rdf:resource="http://authority.example.org/adult.png"/>
  <wdrs:text>Adults Only</wdrs:text>
  <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite"/>
  <ex:agemin>18</ex:agemin>
</rdf:Description>
Test 13b: A correct description is returned when a POWDER document contains several different elements, included descriptors etc, (based on DR doc Example 2-14)
http://movie.example.com/movie2.mpg http://philarcher.org/powder/dr/dr-example_2_14.xml
<rdf:Description rdf:about="http://movie.example.com/movie2.mpg">
  <ex:agemin>0</ex:agemin>
  <wdrs:logo rdf:resource="http://authority.example.org/all.png" />
  <wdrs:text>All Ages</wdrs:text>
  <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite" />
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://movie.example.com/movie2.mpg">
  <ex:agemin xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">0</ex:agemin>
  <wdrs:text>All Ages</wdrs:text>
  <wdrs:logo rdf:resource="http://authority.example.org/all.png"/>
  <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite"/>
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://movie.example.com/movie2.mpg">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.rdf"/>
  <wdrs:logo rdf:resource="http://authority.example.org/all.png"/>
  <wdrs:text>All Ages</wdrs:text>
  <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite"/>
  <ex:agemin>0</ex:agemin>
</rdf:Description>
Test 13c: A correct description is returned when a POWDER document contains several different elements, included descriptors etc, (based on DR doc Example 2-14)
http://movie.example.com/latest/reviews.html http://philarcher.org/powder/dr/dr-example_2_14.xml
<rdf:Description rdf:about="http://movie.example.com/latest/reviews.html">
  <ex:agemin>0</ex:agemin>
  <wdrs:logo rdf:resource="http://authority.example.org/all.png" />
  <wdrs:text>All Ages</wdrs:text>
  <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite" />
  <wdrs:tag>New Releases</wdrs:tag>
  <wdrs:tag>What's Hot</wdrs:tag>
  <rdfs:seeAlso rdf:resource="http://cinema.example.com/nowplaying/" />
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://movie.example.com/latest/reviews.html">
  <wdrs:tag>New Releases</wdrs:tag>
  <wdrs:tag>What's Hot</wdrs:tag>
  <rdfs:seeAlso rdf:resource="http://cinema.example.com/nowplaying/"/>
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://movie.example.com/latest/reviews.html">
  <ex:agemin xmlns="http://www.w3.org/2007/05/powder#" xmlns:ex="http://example.org/vocab#">0</ex:agemin>
  <wdrs:text>All Ages</wdrs:text>
  <wdrs:logo rdf:resource="http://authority.example.org/all.png"/>
  <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite"/>
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://movie.example.com/latest/reviews.html">
  <wdrs:describedby rdf:resource="http://philarcher.org/powder/dr/dr-example_2_14.rdf"/>
  <wdrs:logo rdf:resource="http://authority.example.org/all.png"/>
  <wdrs:text>All Ages</wdrs:text>
  <rdfs:seeAlso rdf:resource="http://cinema.example.com/nowplaying/"/>
  <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite"/>
  <ex:agemin>0</ex:agemin>
  <wdrs:tag>What's Hot</wdrs:tag>
  <wdrs:tag>New Releases</wdrs:tag>
</rdf:Description>
Test 14: A correct description is returned when a descriptor set includes an XML Literal (based on DR doc Example 2-15)
http://www.example.com/ http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_15.xml
<rdf:Description rdf:about="http://www.example.com/">
  <ex:color rdf:parseType="Literal">
    <ex2:hex>ff0000</ex2:hex>
    <ex2:red>255</ex2:red>
    <ex2:green>0</ex2:green>
    <ex2:blue>0</ex2:blue>
  </ex:color>
  <wdrs:logo rdf:resource="http://example.org/icon.png" />
  <wdrs:text>Everything on example.org is red</wdrs:text>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_15.xml" />
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/">
  <ex:color xmlns:ex="http://example.org/vocab#" xmlns:ex2="http://example.org/palette#" xmlns="http://www.w3.org/2007/05/powder#" rdf:parseType="Literal">
    <ex2:hex>ff0000</ex2:hex>
    <ex2:red>255</ex2:red>
    <ex2:green>0</ex2:green>
    <ex2:blue>0</ex2:blue>
  </ex:color>
  <wdrs:text>Everything on example.org is red</wdrs:text>
  <wdrs:logo rdf:resource="http://example.org/icon.png"/>
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_15.xml"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/">
  <wdrs:describedby rdf:resource="http://www.w3.org/TR/2008/WD-powder-dr-20081114/dr-example_2_15.rdf"/>
  <wdrs:logo rdf:resource="http://example.org/icon.png"/>
  <wdrs:text>Everything on example.com is red</wdrs:text>
  <ex:color rdf:parseType="Literal">
    <ex2:hex xmlns:ex2="http://example.org/palette#">ff0000</ex2:hex>
    <ex2:red xmlns:ex2="http://example.org/palette#">255</ex2:red>
    <ex2:green xmlns:ex2="http://example.org/palette#">0</ex2:green>
    <ex2:blue xmlns:ex2="http://example.org/palette#">0</ex2:blue>
  </ex:color>
</rdf:Description>
Test 15: A suitable error message is returned when a POWDER document is invalid
http://www.example.com/ http://philarcher.org/powder_examples/example_2_1_alien_IRI_element.xml
<rdf:Description rdf:about="http://philarcher.org/powder_examples/example_2_1_alien_IRI_element.xml">
  <wdrs:err_code>103</wdrs:err_code>
  <wdrs:data_error>Data is not a valid POWDER or POWDER-BASE document (<code><ex:badidea></code> is not a valid element within an IRI set (1st <code><iriset></code>).)</wdrs:data_error>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/">
  <wdrs:notknownto rdf:resource="http://dawsec.dicom.uninsubria.it:80/andrea/ppp-new/ppp/PowderProcessor/index.php"/>
</rdf:Description>
<rdf:Description rdf:about="http://philarcher.org/powder_examples/example_2_1_alien_IRI_element.xml">
  <wdrs:error_code rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">106</wdrs:error_code>
  <wdrs:data_error xml:lang="en">This POWDER document does not apply to the candidate resource.</wdrs:data_error>
</rdf:Description>
[See Note]
No - this would be at the application layer above semPP
Test 16: An empty IRI set is treated as the empty set
http://www.example.com/ http://philarcher.org/powder_examples/example_2_1_empty_iriset.xml
<rdf:Description rdf:about="http://philarcher.org/powder_examples/example_2_1_empty_iriset.xml">
  <wdrs:err_code>103</wdrs:err_code>
  <wdrs:data_error>Data is not a valid POWDER or POWDER-BASE document (1st <code><iriset></code> is empty)</wdrs:data_error>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/">
  <wdrs:notknownto rdf:resource="http://dawsec.dicom.uninsubria.it:80/andrea/ppp-new/ppp/PowderProcessor/index.php"/>
</rdf:Description>
<rdf:Description rdf:about="http://philarcher.org/powder_examples/example_2_1_empty_iriset.xml">
  <wdrs:error_code rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">106</wdrs:error_code>
  <wdrs:data_error xml:lang="en">This POWDER document does not apply to the candidate resource.</wdrs:data_error>
</rdf:Description>
[See Note]
A POWDER doc with an empty IRI set is invalid. However, the XSLT will render such an IRI set as the owl:Nothing class to achieve the desired result. See XSLT Test 10.

Note: Test 15 and 16 rely on the processor validating the POWDER document. The particular validation errors in these tests are not detectable by the XML schema and therefore not detected in the PHP Processor. However, it does return a 'not known to' repsonse so that, importantly, an incorrect description is not returned.

Table 6: XSLT Tests and Results
Feature POWDER Document POWDER-BASE Document (from POWDER to POWDER-BASE XSLT) POWDER-S Document (from POWDER-BASE to POWDER-S XSLT) Comments
XSLT Test 1
IRI constraint transformation as defined in the Formal Semantics doc
iriset_example.xml iriset_example_base.xml iriset_example.rdf All IRI set constraints converted to correct regular expression (P to P-BASE) and thence to property restrictions in the OWL class
XSLT Test 2
Numbering of IRI sets, descriptor sets, the exclusion of previous IRI sets in DRs in ordered lists etc.
multi_example2.xml multi_example2_base.xml multi_example2.rdf The unique identification of IRI sets and descriptor sets, and the correct sub class relationship assertion, puts significant demands on the XSLT. This example contains a descriptor set that is not part of any DR, two ordered lists and one of the DRs has two IRI sets.
XSLT Test 3
POWDER-specific elements other than those in the IRI set
powder_elements.xml powder_elements_base.xml powder_elements.rdf Attribution elements are all correctly transformed. Note the creation of the Class with a nodeID of aboutset which is derived from abouthostsaboutregex. The more element is transformed into a separate rdf:Description block but is sematically equivalent to the same triple being expressed within the rest of the ontology headers. Elements like typeof and comment are correctly transformed.
XSLT Test 4
Elements such as display text support xml:lang attributes.
multi_lingual.xml multi_lingual_base.xml multi_lingual.rdf All seems well with this. xml:lang is supported in displaytext, tag, comment and label.
XSLT Test 4a
ITS Tag Set can be used in POWDER docs without affecting the RDF graph
multi_lingual2.xml multi_lingual2_base.xml multi_lingual2.rdf The ITS tags are not included in the POWDER-S file
XSLT Test 5
POWDER Flexibility (Example 2-14 in the DR doc).
dr-example_2_14.xml Example_2-14_Base.xml Example_2-14_S.rdf Note the use of owl:equivalent class to handle the include attribute of a descriptor set.
XSLT Test 6

Repeating Tests 13a - 13c with the output of the two XSLTs performed on example 2-14, and the Semantic processor gives output that includes:

<rdf:Description rdf:about="http://movie.example.com/after9pm/movie1.mpg">
   <wdrs:describedby rdf:resource="http://philarcher.org/powder/xslt/Example_2-14_S.rdf"/>
   <wdrs:text>Adults Only</wdrs:text>
   <wdrs:logo rdf:resource="http://authority.example.org/adult.png"/>
   <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite"/>
   <j.1:agemin>18</j.1:agemin>
 </rdf:Description>

 <rdf:Description rdf:about="http://movie.example.com/latest/reviews.html">
   <wdrs:describedby rdf:resource="http://philarcher.org/powder/xslt/Example_2-14_S.rdf"/>
   <rdfs:seeAlso rdf:resource="http://cinema.example.com/nowplaying/"/>
   <wdrs:text>All Ages</wdrs:text>
   <wdrs:logo rdf:resource="http://authority.example.org/all.png"/>
   <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite"/>
   <j.1:agemin>0</j.1:agemin>
   <wdrs:tag>What's Hot</wdrs:tag>
   <wdrs:tag>New Releases</wdrs:tag>
 </rdf:Description>

 <rdf:Description rdf:about="http://movie.example.com/movie2.mpg">
   <wdrs:describedby rdf:resource="http://philarcher.org/powder/xslt/Example_2-14_S.rdf"/>
   <wdrs:text>All Ages</wdrs:text>
   <wdrs:logo rdf:resource="http://authority.example.org/all.png"/>
   <rdf:type rdf:resource="http://trust.example.org/vocab#trustedsite"/>
   <j.1:agemin>0</j.1:agemin>
 </rdf:Description>
XSLT Test 7
Pred-defined descriptor sets
dr-example_2_10_1.xml example_2_10_1_base.xml example_2_10_1_S.rdf Note that the descriptor classes have an rdf:ID attribute cf. rdf:nodeID. The aboutset resriction is correctly applied
XSLT Test 8
Referring to pre-defined descriptorsets
dr-example_2_10_2.xml example_2_10_2_base.xml example_2_10_2_S.rdf Note the use of owl:equivalent class to link the internally identified classes to the external ones. Repeats of test 11 using this data confirm the veracity of the transformation
XSLT Test 9
Processor Tests 5, 6, 7a and 7b were carried out using a POWDER-S file generated from the XSLTs.
XSLT Test 10
Empty IRI sets are transfored into owl:Nothing
empty_iriset_base.xml empty_iriset.rdf The input file is invalid as a POWDER document but empty IRI sets can physically exist. The grouping doc asserts that an empty IRI set it is to be interpreted as the empty set (see end of Section 1.2).