[dais-wg] Updates Based on DAIS Factory Results

Norman Paton norm at cs.man.ac.uk
Mon May 23 08:30:53 CDT 2005


The DAIS specifications support Factory operations, which return 
identifiers for
the results of queries.  However, there is a lack of symmetry in the 
handling of
such results in the specs, in that their identifiers cannot currently be 
provided
as inputs to update operations.  This note comments on options for 
extending this
capability. 

1. Relational

In the relational model, data access and manipulation requests are directed
at data services using the SQLAccess operation.  Additional operations could
be defined on the relational data access service or on the SQLRowSet that
in some way push the contents of the row set to the relational data access
service.

1.1 Insert

The following operation could be defined:

SQLAccess::Insert(TableName, FieldMapping, RowsetIdentifier) -> 
SQLExecuteResponse

Given the name of a table, insert the tuples from the rowset into the 
given table.

Faults:
- Unable to access Rowset.

The semantics might most easily be assumed to be those of the existing 
SQL clause:

insert into TableName [(FieldName1 [, FieldName2, ...])] SelectClause

where the SelectClause is assumed to range over the tuples in the 
RowSet.  The
SQLExecuteResponse provides access to the SQLCommunicationsArea, and 
thus is able
to provide access to a wide range of error conditions.

The FieldMapping would represent a list of pairs, associating each named 
field in
TableName with each of the fields in the SQLRowSetSchema; it could be 
optional if
the names in the two settings had a 1:1 mapping.


1.2 Delete

The following operation could be defined:

SQLAccess::Delete(TableName, FieldMapping, RowsetIdentifier) -> 
SQLExecuteResponse

Given the name of a table, delete the tuples from the rowset from the 
given table.

Faults:
- Unable to access Rowset.

The semantics might most easily be assumed to be those of the existing 
SQL clause:

delete from TableName WHERE <condition>

where the condition is assumed to test for tuples that match those in 
the RowSet,
given the name mapping in FieldMapping.  The match should probably 
involve equality
on all attributes, but matching only on key is also an option. 
SQLExecuteResponse
provides access to the SQLCommunicationsArea, and thus is able to 
provide access
to a wide range of error conditions.

The FieldMapping would represent a list of pairs, associating each named 
field in
TableName with each of the fields in the SQLRowSetSchema; it could be 
optional if
the names in the two settings had a 1:1 mapping.


2. XML

Unlike the WS-DAIR specification, the WS-DAIX spec contains top-level 
update operations,
namely:

XMLCollectionAccess::AddDocuments([Name, Collection, Data]) -> 
ResponseDocument
XMLCollectionAccess::RemoveDocuments([Name], Collection) -> ResponseDocument
XMLCollectionAccess::BulkLoad([Collections],[Name, Collection, Data]) -> 
ResponseDocument

Where the above operations take Data as a parameter (for insertion only 
- deletes are
by document name, which seems more natural than by document matching), 
one could
envisage variants in which an XMLSequenceIdentifier is passed as a 
parameter.


Anyway, these are some initial thoughts on how the named results of DAIS 
factory operations
might be able to be used as inputs to other DAIS operations; comments 
invited. 

Norman





More information about the dais-wg mailing list