#!/usr/bin/env ruby
#
# RubyRDF Query Service: tests
# http://www.w3.org/2001/12/rubyrdf/ 
#
# We test each of our query services against each of several 
# rdf queries. Data is copied locally. For the DBI/SQL service, 
# load it first, eg using:
#    psql test1 < ../samples/_query_tests.sql
# note that SQL stores are (ahem) stateful, so take note if you change
# anything. Note also that some of these .sql scripts are DESTRUCTIVE!
# ie. they'll DELETE both your 'triples' and 'resources' table.
# Use with care.
#
# Dan Brickley <danbri@w3.org>
# $Id: query_tests.rb,v 1.6 2002/03/31 23:12:56 danbri Exp $
#
# Todo:
#   - represent test cases and dependencies better
#   - use RubyUni
#   - figure out what the right answers are for the test queries!
#   - ...especially when addAllSuperProperties() and defrag() are used
#   - ...andused together...
#   - add Inkling tests

# TODO:
# why only 17 hits for RSS, missing one? leading whitespace? 
# maybe one of the sha1 hash functions trims, another doesn't???
# grep Spice ../samples/_query_tests.sql
#insert into resources values ( '-1806394676', ' Spice Up Your Seminars
#- Promoting Active Learning (One-Day Seminar)' );
# I tried removing leading whitespace fro ' Spice', no workie.
#
# the mr mega example: premature node convergence (same 
# node has User and Person types) depite defrag() not being called.
# investigating!

# BIG TODO:
# 
# Found a big mistake. We are merging RDF from N-Triple files without
# watching out for blank-node / genid clashes. This may be the cause of
# the example.rdf problem.

require '../squish'
require '../../basicrdf'
require 'dbi'

DBI_DRIVER = 'DBI:Pg:test1'
DBI_USER = 'danbri'
DBI_PASS=''


tests = 
  [ 
	{ 
	'squish' => 
	'SELECT ?item, ?title, ?etype, ?org, ?loc, ?start, ?end, 
	WHERE 
	(rss::title ?item ?title) 
	(ev::type ?item ?etype)
	(ev::organizer ?item ?org)
        (ev::location ?item ?loc)
	(ev::startdate ?item ?start)
	(ev::enddate ?item ?end)
	USING
	rss for http://purl.org/rss/1.0/
	ev for http://purl.org/rss/1.0/modules/event/
   	foaf for http://xmlns.com/foaf/0.1/ ',
	 'ntriples' => 'events.nt',
	'rawhits'=>'18',
	'defraghits'=>'18',
	'subprophits'=>'18',	

	},

	{
	'squish' => 'SELECT ?x, ?name, ?mbox, ?hp, ?rdftype, WHERE 
	(eg::personalMailbox ?x ?mbox) 
	(eg::name ?x ?name) 
	(eg::personalHomepage ?x ?hp) 
	(rdf::type ?x ?rdftype) 
	using eg for http://example.com/xmlns/aggregation-demo#
	      rdf for http://www.w3.org/1999/02/22-rdf-syntax-ns# ',
	'ntriples' => 'examples.nt' ,
	'rawhits'=>'1',
	'defraghits'=>'2',
	'subprophits'=>'1',
	},

	{
	'squish' => 'SELECT ?signer, ?signerMail, ?signee, ?signeeMail, ?hex,   
	WHERE 
	(wot::identity ?pk ?id)
	(foaf::name ?id ?signee)
	(foaf::mbox ?id ?signeeMail)
	(wot::signed ?id ?e)
	(foaf::name ?e ?signer)
	(foaf::mbox ?e ?signerMail)
	(wot::signerLongHexID ?e ?hex) 
	USING wot for http://xmlns.com/wot/0.1/
	     foaf for http://xmlns.com/foaf/0.1/',
	'ntriples' => '../samples/danbri.wot.nt' ,
	'rawhits'=>'?',
	'defraghits'=>'?',
	'subprophits'=>'?' 
	}

  ]


tests.each do |test|
  puts "===================================================================\n\n"
  squish = test['squish']
  query = SquishQuery.new.parseFromText squish
  puts "Test query against '#{test['ntriples']}':\n #{query.toSquish} \n"
  puts "rawhits: #{test['rawhits']} " 
  puts "defraghits': #{test['defraghits']} " 
  puts "subprophits: #{test['subprophits']} " 

  db = Loader.ntfile2graph test['ntriples']
  total = SquishQuery.ask(query,db)

  puts "Running this query against in-memory query service: #{total.size} " 
  total.each do |row|
    row.values.each_key do |field| puts "\t#{field}: #{row.values[field]} \n" end
    puts "\n\n"
  end


  total = ResultSet.new
  service = DBIDataService.new('DBI:Pg:test1','danbri','')
  # service.defrag
  # service.addAllSuperProperties
  results=ResultSet.new
  DBI.connect( DBI_DRIVER, DBI_USER, DBI_PASS) do | dbh |
    dbh.select_all( query.toSQLQuery  ) do | row |  
      total.push ResultRow.new(row.to_h.clone) 
    end
  end
  puts "Running query against DBI query service: #{total.size} : " 
  total.each do |row|
    row.values.each_key do |field| puts "\t#{field}: #{row.values[field]} \n" end
    puts "\n\n"
  end

end 






=begin

===================================================================
			Recent sample output:
===================================================================



Test query against 'events.nt':
 SELECT ?item, ?title, ?etype, ?org, ?loc, ?start, ?end 
WHERE 
 ( rss::title ?item ?title ) 
 ( ev::type ?item ?etype ) 
 ( ev::organizer ?item ?org ) 
 ( ev::location ?item ?loc ) 
 ( ev::startdate ?item ?start ) 
 ( ev::enddate ?item ?end ) 
USING rss for http://purl.org/rss/1.0/ 	ev for http://purl.org/rss/1.0/modules/event/    	foaf for http://xmlns.com/foaf/0.1/  
 
rawhits: 18 
defraghits': 18 
subprophits: 18 
Calling chooseTable with current vars: titleitem

TABLE MATCHER:
 table 1 vars:   title  item 
t1.size: 20 
 table 2 vars:   item  etype 
t2.size: 18 

matching on common field(s) jv: item 
Calling chooseTable with current vars: titleitemetype

TABLE MATCHER:
 table 1 vars:   title  item  etype 
t1.size: 18 
 table 2 vars:   org  item 
t2.size: 18 

matching on common field(s) jv: item 
Calling chooseTable with current vars: titleorgitemetype

TABLE MATCHER:
 table 1 vars:   title  org  item  etype 
t1.size: 18 
 table 2 vars:   loc  item 
t2.size: 18 

matching on common field(s) jv: item 
Calling chooseTable with current vars: loctitleorgitemetype

TABLE MATCHER:
 table 1 vars:   loc  title  org  item  etype 
t1.size: 18 
 table 2 vars:   start  item 
t2.size: 18 

matching on common field(s) jv: item 
Calling chooseTable with current vars: loctitleorgstartitemetype

TABLE MATCHER:
 table 1 vars:   loc  title  org  start  item  etype 
t1.size: 18 
 table 2 vars:   end  item 
t2.size: 18 

matching on common field(s) jv: item 
Running this query against in-memory query service: 18 
	loc: "Dubai, United Arab Emirates " 
	title: "Bridging the Divide - Strategies for Change" 
	org: "IVETA (International Vocational Education and Teaching Association) / TEND (Technological Education and National Development)" 
	end: "2002-04-09" 
	start: "2002-04-07" 
	item: http://crm.hct.ac.ae/tend2002/ 
	etype: "Conference" 


	loc: "Birmingham, UK" 
	title: "UK Conference on Peer Observation of Teaching " 
	org: "LTSN Generic Centre" 
	end: "2002-05-29" 
	start: "2002-05-29" 
	item: http://www.ltsn.ac.uk/genericcentre/docs/POTBookingForMay2002.rtf 
	etype: "Conference" 


	loc: "Paris, France" 
	title: "VII Spring Meeting of Young Economists" 
	org: _:genid20 
	end: "2002-04-20" 
	start: "2002-04-18" 
	item: http://smye2002.univ-paris1.fr/smye/welcome.htm 
	etype: "Conference" 


	loc: "Coventry, UK" 
	title: " E-tutoring for effective online learning workshop" 
	org: "LTSN Generic Centre" 
	end: "2002-04-17" 
	start: "2002-04-17" 
	item: http://www.ltsn.ac.uk/genericcentre/e-learning.asp 
	etype: "Workshop" 


	loc: "Dundee, UK" 
	title: "SEA Annual Conference" 
	org: "Scottish Economic Association" 
	end: "2002-04-12" 
	start: "2002-04-11" 
	item: http://www.scoteconsoc.org/ses2002.html 
	etype: "Conference" 


	loc: "De Pere, USA " 
	title: "5th International Business and Economics Conference" 
	org: "St. Norbert College" 
	end: "2002-10-12" 
	start: "2002-10-11" 
	item: http://www.sncibec.org/ 
	etype: "Conference" 


	loc: "Brussels, Belgium" 
	title: "Summer School in Economic Modeling with GAMS and TROLL " 
	org: "EcoMod" 
	end: "2002-07-27" 
	start: "2002-07-08" 
	item: http://www.ecomod.net/Courses/Summer2002/Summer2002.htm 
	etype: "Course" 


	loc: "London, UK" 
	title: "Mentoring and Supervision (One-Day Seminar)" 
	org: "School of Education and Training" 
	end: "2002-05-10" 
	start: "2002-05-10" 
	item: http://www.gre.ac.uk/directory/pcet/seminar10.html 
	etype: "Course" 


	loc: "Aix en Provence, France" 
	title: "Computing in Economics and Finance (8th International Conference)" 
	org: "Society for Computational Economics" 
	end: "2002-06-29" 
	start: "2002-06-26" 
	item: http://pythie.cepremap.cnrs.fr/sce2002/ 
	etype: "Conference" 


	loc: "London, UK" 
	title: "8th Stata User Group Meeting" 
	org: "Timberlake consultants" 
	end: "2002-05-21" 
	start: "2002-05-20" 
	item: http://www.timberlake.co.uk/courses/callforpaper.htm 
	etype: "Conference" 


	loc: "Montreal, Canada" 
	title: "BESI Annual Conference 2002" 
	org: "Business and Economics Society International" 
	end: "2002-07-29" 
	start: "2002-07-24" 
	item: http://www.assumption.edu/html/faculty/kantar/HKANTAR2.html 
	etype: "Conference" 


	loc: "Seattle, USA" 
	title: "WEA 7th International Conference" 
	org: "Western Economic Association International" 
	end: "2002-07-03" 
	start: "2002-06-29" 
	item: http://www.weainternational.org/conferences.htm 
	etype: "Conference" 


	loc: "Loughborough, UK" 
	title: "6th International Computer Assisted Assessment (CAA) Conference" 
	org: "CAA Unit, Loughborough University" 
	end: "2002-07-10" 
	start: "2002-07-09" 
	item: http://caa2002.lboro.ac.uk/caaconference/ 
	etype: "Conference" 


	loc: "London, UK" 
	title: " Spice Up Your Seminars - Promoting Active Learning (One-Day Seminar)" 
	org: "School of Education and Training" 
	end: "2002-04-19" 
	start: "2002-04-19" 
	item: http://www.gre.ac.uk/directory/pcet/seminar7.html 
	etype: "Course" 


	loc: "Guadalajara, Mexico" 
	title: " Breaking Boundaries for Global Learning (9th Annual Conference)" 
	org: "Educational Innovation in Economics and Business (EDiNEB)" 
	end: "2002-06-21" 
	start: "2002-06-19" 
	item: http://www4.fdewb.unimaas.nl/edinebweb/conference.asp 
	etype: "Conference" 


	loc: "Edinburgh, UK" 
	title: "Supporting the Teacher: Challenging the Learner" 
	org: "Business Education Support Team (BEST)" 
	end: "2002-04-10" 
	start: "2002-04-08" 
	item: http://www.business.ltsn.ac.uk/events/BEST%20conference/Call%202002.html 
	etype: "Conference" 


	loc: "Coventry, UK" 
	title: "RES 2002 Annual Conference" 
	org: "Royal Economic Society" 
	end: "2002-03-27" 
	start: "2002-03-25" 
	item: http://www.res.org.uk/conf.html#2002 
	etype: "Conference" 


	loc: "Mullingar, Republic of Ireland" 
	title: "IEA Annual Conference 2002" 
	org: "Irish Economic Association" 
	end: "2002-04-14" 
	start: "2002-04-12" 
	item: http://www.iea.ie/conferences/ 
	etype: "Conference" 


Running query against DBI query service: 17 : 
	loc: Aix en Provence, France 
	title: Computing in Economics and Finance (8th International Conference) 
	org: Society for Computational Economics 
	end: 2002-06-29 
	start: 2002-06-26 
	item: http://pythie.cepremap.cnrs.fr/sce2002/ 
	etype: Conference 


	loc: Birmingham, UK 
	title: UK Conference on Peer Observation of Teaching  
	org: LTSN Generic Centre 
	end: 2002-05-29 
	start: 2002-05-29 
	item: http://www.ltsn.ac.uk/genericcentre/docs/POTBookingForMay2002.rtf 
	etype: Conference 


	loc: Brussels, Belgium 
	title: Summer School in Economic Modeling with GAMS and TROLL  
	org: EcoMod 
	end: 2002-07-27 
	start: 2002-07-08 
	item: http://www.ecomod.net/Courses/Summer2002/Summer2002.htm 
	etype: Course 


	loc: Coventry, UK 
	title:  E-tutoring for effective online learning workshop 
	org: LTSN Generic Centre 
	end: 2002-04-17 
	start: 2002-04-17 
	item: http://www.ltsn.ac.uk/genericcentre/e-learning.asp 
	etype: Workshop 


	loc: Coventry, UK 
	title: RES 2002 Annual Conference 
	org: Royal Economic Society 
	end: 2002-03-27 
	start: 2002-03-25 
	item: http://www.res.org.uk/conf.html#2002 
	etype: Conference 


	loc: De Pere, USA  
	title: 5th International Business and Economics Conference 
	org: St. Norbert College 
	end: 2002-10-12 
	start: 2002-10-11 
	item: http://www.sncibec.org/ 
	etype: Conference 


	loc: Dubai, United Arab Emirates  
	title: Bridging the Divide - Strategies for Change 
	org: IVETA (International Vocational Education and Teaching Association) / TEND (Technological Education and National Development) 
	end: 2002-04-09 
	start: 2002-04-07 
	item: http://crm.hct.ac.ae/tend2002/ 
	etype: Conference 


	loc: Dundee, UK 
	title: SEA Annual Conference 
	org: Scottish Economic Association 
	end: 2002-04-12 
	start: 2002-04-11 
	item: http://www.scoteconsoc.org/ses2002.html 
	etype: Conference 


	loc: Edinburgh, UK 
	title: Supporting the Teacher: Challenging the Learner 
	org: Business Education Support Team (BEST) 
	end: 2002-04-10 
	start: 2002-04-08 
	item: http://www.business.ltsn.ac.uk/events/BEST%20conference/Call%202002.html 
	etype: Conference 


	loc: Guadalajara, Mexico 
	title:  Breaking Boundaries for Global Learning (9th Annual Conference) 
	org: Educational Innovation in Economics and Business (EDiNEB) 
	end: 2002-06-21 
	start: 2002-06-19 
	item: http://www4.fdewb.unimaas.nl/edinebweb/conference.asp 
	etype: Conference 


	loc: London, UK 
	title: 8th Stata User Group Meeting 
	org: Timberlake consultants 
	end: 2002-05-21 
	start: 2002-05-20 
	item: http://www.timberlake.co.uk/courses/callforpaper.htm 
	etype: Conference 


	loc: London, UK 
	title: Mentoring and Supervision (One-Day Seminar) 
	org: School of Education and Training 
	end: 2002-05-10 
	start: 2002-05-10 
	item: http://www.gre.ac.uk/directory/pcet/seminar10.html 
	etype: Course 


	loc: Loughborough, UK 
	title: 6th International Computer Assisted Assessment (CAA) Conference 
	org: CAA Unit, Loughborough University 
	end: 2002-07-10 
	start: 2002-07-09 
	item: http://caa2002.lboro.ac.uk/caaconference/ 
	etype: Conference 


	loc: Montreal, Canada 
	title: BESI Annual Conference 2002 
	org: Business and Economics Society International 
	end: 2002-07-29 
	start: 2002-07-24 
	item: http://www.assumption.edu/html/faculty/kantar/HKANTAR2.html 
	etype: Conference 


	loc: Mullingar, Republic of Ireland 
	title: IEA Annual Conference 2002 
	org: Irish Economic Association 
	end: 2002-04-14 
	start: 2002-04-12 
	item: http://www.iea.ie/conferences/ 
	etype: Conference 


	loc: Paris, France 
	title: VII Spring Meeting of Young Economists 
	org: _:genid20 
	end: 2002-04-20 
	start: 2002-04-18 
	item: http://smye2002.univ-paris1.fr/smye/welcome.htm 
	etype: Conference 


	loc: Seattle, USA 
	title: WEA 7th International Conference 
	org: Western Economic Association International 
	end: 2002-07-03 
	start: 2002-06-29 
	item: http://www.weainternational.org/conferences.htm 
	etype: Conference 


===================================================================

Test query against 'examples.nt':
 SELECT ?name, ?mbox, ?hp, ?rdftype 
WHERE 
 ( eg::personalMailbox ?x ?mbox ) 
 ( eg::name ?x ?name ) 
 ( eg::personalHomepage ?x ?hp ) 
 ( rdf::type ?x ?rdftype ) 
USING eg for http://example.com/xmlns/aggregation-demo# 	      rdf for http://www.w3.org/1999/02/22-rdf-syntax-ns#  
 
rawhits: 1 
defraghits': 2 
subprophits: 1 
Calling chooseTable with current vars: xmbox

TABLE MATCHER:
 table 1 vars:   x  mbox 
t1.size: 2 
 table 2 vars:   name  x 
t2.size: 2 

matching on common field(s) jv: x 
Calling chooseTable with current vars: namexmbox

TABLE MATCHER:
 table 1 vars:   name  x  mbox 
t1.size: 1 
 table 2 vars:   x  hp 
t2.size: 1 

matching on common field(s) jv: x 
Calling chooseTable with current vars: namexmboxhp

TABLE MATCHER:
 table 1 vars:   name  x  mbox  hp 
t1.size: 1 
 table 2 vars:   x  rdftype 
t2.size: 10 

matching on common field(s) jv: x 
Running this query against in-memory query service: 1 
	name: "Mr Mega" 
	x: _:genid2 
	rdftype: http://example.com/xmlns/aggregation-demo#Person 
	hp: http://megacorp.example.com/~mega 
	mbox: mailto:mega@megacorp.example.com 


Running query against DBI query service: 2 : 
	name: Mr Mega 
	rdftype: http://example.com/xmlns/aggregation-demo#Person 
	hp: http://megacorp.example.com/~mega 
	mbox: mailto:mega@megacorp.example.com 


	name: Mr Mega 
	rdftype: http://xmlns.com/wot/0.1/User 
	hp: http://megacorp.example.com/~mega 
	mbox: mailto:mega@megacorp.example.com 


===================================================================

Test query against '../samples/danbri.wot.nt':
 SELECT ?signer, ?signerMail, ?signee, ?signeeMail, ?hex 
WHERE 
 ( wot::identity ?pk ?id ) 
 ( foaf::name ?id ?signee ) 
 ( foaf::mbox ?id ?signeeMail ) 
 ( wot::signed ?id ?e ) 
 ( foaf::name ?e ?signer ) 
 ( foaf::mbox ?e ?signerMail ) 
 ( wot::signerLongHexID ?e ?hex ) 
USING wot for http://xmlns.com/wot/0.1/ 	     foaf for http://xmlns.com/foaf/0.1/ 
 
rawhits: ? 
defraghits': ? 
subprophits: ? 
Calling chooseTable with current vars: idpk

TABLE MATCHER:
 table 1 vars:   id  pk 
t1.size: 2 
 table 2 vars:   signee  id 
t2.size: 10 

matching on common field(s) jv: id 
Calling chooseTable with current vars: signeepkid

TABLE MATCHER:
 table 1 vars:   signee  pk  id 
t1.size: 2 
 table 2 vars:   signeeMail  id 
t2.size: 10 

matching on common field(s) jv: id 
Calling chooseTable with current vars: signeesigneeMailpkid

TABLE MATCHER:
 table 1 vars:   signee  signeeMail  pk  id 
t1.size: 2 
 table 2 vars:   e  id 
t2.size: 8 

matching on common field(s) jv: id 
Calling chooseTable with current vars: signeesigneeMailpkeid

TABLE MATCHER:
 table 1 vars:   signee  signeeMail  pk  e  id 
t1.size: 8 
 table 2 vars:   signer  e 
t2.size: 10 

matching on common field(s) jv: e 
Calling chooseTable with current vars: signeesigneeMailsigneridpke

TABLE MATCHER:
 table 1 vars:   signee  signeeMail  signer  id  pk  e 
t1.size: 8 
 table 2 vars:   signerMail  e 
t2.size: 10 

matching on common field(s) jv: e 
Calling chooseTable with current vars: signeesignerMailsigneeMailsignerpkide

TABLE MATCHER:
 table 1 vars:   signee  signerMail  signeeMail  signer  pk  id  e 
t1.size: 8 
 table 2 vars:   hex  e 
t2.size: 8 

matching on common field(s) jv: e 
Running this query against in-memory query service: 8 
	signee: "Dan Brickley" 
	signerMail: mailto:rael@oreilly.com 
	signeeMail: mailto:daniel.brickley@bristol.ac.uk 
	signer: "Rael Dornfest" 
	id: _:genid5 
	pk: _:genid1 
	hex: "48ED0B89A43F0ACC" 
	e: _:genid8 


	signee: "Dan Brickley" 
	signerMail: mailto:m.l.poulter@bristol.ac.uk 
	signeeMail: mailto:daniel.brickley@bristol.ac.uk 
	signer: "Martin L Poulter" 
	id: _:genid5 
	pk: _:genid1 
	hex: "89A42BA6151070B3" 
	e: _:genid9 


	signee: "Dan Brickley" 
	signerMail: mailto:D.M.Steer@lse.ac.uk 
	signeeMail: mailto:daniel.brickley@bristol.ac.uk 
	signer: "Damian Steer" 
	id: _:genid5 
	pk: _:genid1 
	hex: "0322C207E993B729" 
	e: _:genid10 


	signee: "Dan Brickley" 
	signerMail: mailto:D.M.Steer@lse.ac.uk 
	signeeMail: mailto:danbri@w3.org 
	signer: "Damian Steer" 
	id: _:genid2 
	pk: _:genid1 
	hex: "0322C207E993B729" 
	e: _:genid4 


	signee: "Dan Brickley" 
	signerMail: mailto:charles@w3.org 
	signeeMail: mailto:daniel.brickley@bristol.ac.uk 
	signer: "Charles McCathieNevile (Chaals)" 
	id: _:genid5 
	pk: _:genid1 
	hex: "5283E15798F3CE71" 
	e: _:genid11 


	signee: "Dan Brickley" 
	signerMail: mailto:danbri@w3.org 
	signeeMail: mailto:danbri@w3.org 
	signer: "Dan Brickley" 
	id: _:genid2 
	pk: _:genid1 
	hex: "3E15EF2F73228FE4" 
	e: _:genid3 


	signee: "Dan Brickley" 
	signerMail: mailto:danbri@w3.org 
	signeeMail: mailto:daniel.brickley@bristol.ac.uk 
	signer: "Dan Brickley" 
	id: _:genid5 
	pk: _:genid1 
	hex: "3E15EF2F73228FE4" 
	e: _:genid6 


	signee: "Dan Brickley" 
	signerMail: mailto:edd@xmlhack.com 
	signeeMail: mailto:daniel.brickley@bristol.ac.uk 
	signer: "Edd Dumbill" 
	id: _:genid5 
	pk: _:genid1 
	hex: "AF16EDB1BB9B8711" 
	e: _:genid7 


Running query against DBI query service: 8 : 
	signee: Dan Brickley 
	signer: Damian Steer 
	signermail: mailto:D.M.Steer@lse.ac.uk 
	hex: 0322C207E993B729 
	signeemail: mailto:danbri@w3.org 


	signee: Dan Brickley 
	signer: Damian Steer 
	signermail: mailto:D.M.Steer@lse.ac.uk 
	hex: 0322C207E993B729 
	signeemail: mailto:daniel.brickley@bristol.ac.uk 


	signee: Dan Brickley 
	signer: Charles McCathieNevile (Chaals) 
	signermail: mailto:charles@w3.org 
	hex: 5283E15798F3CE71 
	signeemail: mailto:daniel.brickley@bristol.ac.uk 


	signee: Dan Brickley 
	signer: Dan Brickley 
	signermail: mailto:danbri@w3.org 
	hex: 3E15EF2F73228FE4 
	signeemail: mailto:danbri@w3.org 


	signee: Dan Brickley 
	signer: Dan Brickley 
	signermail: mailto:danbri@w3.org 
	hex: 3E15EF2F73228FE4 
	signeemail: mailto:daniel.brickley@bristol.ac.uk 


	signee: Dan Brickley 
	signer: Edd Dumbill 
	signermail: mailto:edd@xmlhack.com 
	hex: AF16EDB1BB9B8711 
	signeemail: mailto:daniel.brickley@bristol.ac.uk 


	signee: Dan Brickley 
	signer: Martin L Poulter 
	signermail: mailto:m.l.poulter@bristol.ac.uk 
	hex: 89A42BA6151070B3 
	signeemail: mailto:daniel.brickley@bristol.ac.uk 


	signee: Dan Brickley 
	signer: Rael Dornfest 
	signermail: mailto:rael@oreilly.com 
	hex: 48ED0B89A43F0ACC 
	signeemail: mailto:daniel.brickley@bristol.ac.uk 


=end
