prototype: scalable VOSI-tables-1.1
Patrick Dowler
patrick.dowler at nrc-cnrc.gc.ca
Mon May 4 22:56:08 CEST 2015
I have implemented a prototype VOSI-tables-1.1 resource to deal with the
issues that came up in the TAP discussion in Banff: some services have
many tables and many columns and the top-level VOSI-tables document can
be very large.
The basic aproach is to define a RESTful resource tree following the
VODataService model: tableset, schema, table. All the example URLs below
work but note that the table names are fully qualified because that is
how it works in TAP right now. There are separate discussions on that so
it isn't really relevant here.
The VOSI-tables-1.0 resource returns a <tableset> document, so the
"tables" resource name really means "the tableset". This remains unchanged:
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables
Any schema name can be used as a child; this returns a <schema> document:
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables/TAP_SCHEMA
Any table name found in a schema can be used as a child; this returns a
<table> document:
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables/TAP_SCHEMA/TAP_SCHEMA.tables
There is no REST binding to get a single <column> within a <table> as I
don't see the use case for that. The abvoe by itself is nice but doesn't
solve the scalability problem. For that we need to ask for less than
"all the details" of VOSI-tables-1.0 using the "detail" parameter (name
taken from the VOSpace spec as it seems to be the same sort of thing:
ask for a certain amount of detail. The default (as the above
URLs show) is to get all the details below the resource. The detail
parameter can taken two values: schema, table.
To get a <tableset> document with a list of <schema> only:
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables?detail=schema
To get a <tableset> docuemnt with <schema> and <table> (no <column>):
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables?detail=table
Somewhat useless*: get a <schema> document without the <table>(s):
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables/TAP_SCHEMA?detail=schema
To get a <schema> doccument with only the list of <table> (no <column>):
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables/TAP_SCHEMA?detail=table
To get a <table> document (a single table):
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables/TAP_SCHEMA/TAP_SCHEMA.tables
Somewhat useless*: get a <table> document without the <column>(s):
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables/TAP_SCHEMA/TAP_SCHEMA.tables?detail=table
* it was simpler to implement this response than to come up with some
logic for denying such a request; it can check the existence of the
schema or table.
Given the size of the documents when detail=schema or detail=table is
used (very small), I don't see an obvious need for a pagination
mechanism. VOSpace has such a feature so we could model something on
that but I'd like to see the practical need.
These would all return a 404 response code:
testSchemaNotFound:
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables/no_such_schema
testTableNotFound:
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables/TAP_SCHEMA/no_such_table
testExtraPathComponentNotFound (trying to get a <column>):
http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/tap/tables/TAP_SCHEMA/tables/table_name
The base resource complies to VOSI-tables-1.0 so 1.0 clients could use a
VOSI-tables-1.1 resource. The only outstanding issue is how would a
service force clients to use 1.1 and forbid them from getting the whole
<tableset> document from the base resource? That is already an issue and
right now I think the only compliant choice (for TAPvizier, for example)
would be to respond with a 403 "Forbidden": only authorized callers can
get the whole tableset in full detail. This is already how some services
handle things like a GET to a UWS job-list. I think any oter kind of
response to indicate that some of the requests are not supported would
mess wit backwards compatibility. Making the default "detail" not be
"all" would likewise trod on compatibility. Obviously, the tap
capabilities would express that the VOSI-tables resource implemented 1.0
or 1.1 and I don't see any obvious reason to require a specific one in
TAP-1.1 (at least).
The change to the VOSI-tables XSD is to add <schema> and <table> as
valid document root elements with types taken from VODataService-1.1 xsd.
--
Patrick Dowler
Canadian Astronomy Data Centre
National Research Council Canada
5071 West Saanich Road
Victoria, BC V9E 2E7
250-363-0044 (office) 250-363-0045 (fax)
More information about the grid
mailing list