Hi all,
[Matthew]At the moment the intent is that the same URL is used for both
the SRU endpoint and the SRW endpoint.
[Mike](Aside: is that intent documented anywhere?)
Well, the ZeeRex record contains the following info:
<serverInfo protocol="SRU" version="1.1" transport="http">
<host>gondolin.hist.liv.ac.uk</host>
<port>210</port>
<database>IR-Explain---1</database>
</serverInfo>
Since serverInfo is non-repeatable (if my understanding of DTD is
up-to-date) there is no way to supply more than one
host/port/protocol/transport combo..
[Hedzer] What reasons are there for not allowing it, then? I'm all for
[Hedzer] allowing it (mostly because of the GET length problem).
[Matthew]The server has to be able to determine whether it is getting an
SRU request or an SRW request, and at
[Matthew]present the server can distinguish that by whether it gets a
HTTP GET (hence SRU) or HTTP POST (hence [Matthew]SRW).
[Matthew] Allowing a HTTP POST to be either SRW (i.e. SOAP) or an SRU
based POST (or potentially a more REST like
[Matthew]POST with the SearchRetrieveRequest cast in XML but not within
a SOAP envelope) would
[Matthew]A) require some fiddly logic at the server end which would
often mean hacking the SOAP toolkits to do
That's just a technicality..
[Matthew]B) potentially break existing implementations
How?
[Mike]But there are other ways. The YAZ implementation of SRW allows the
same port to be used for both
[Mike]SRW and Z39.50 -- we just peek ahead at the first few bytes of the
request and switch on what we see there.
[Mike]They same could certainly be done, pretty trivially, for determing
whether a POST payload is SRW or SRU.
I agree. Not being able to program POST content-type checking for
certain implementations should not mean that the SRW/SRU protocol should
forbid it.
And I'm all for *not* dropping SOAP, just because not many people
implement it now. Who knows how many well optimized SOAP toolkits will
emerge in the future?
[Mike]What we're proposing here is a really, really simple fix which
doesn't seem to have any downside
[Mike](theoretically at least): we let SRU client implementors change
[Mike] <form method="GET">
[Mike]to
[Mike] <form method="POST">
[Mike]when their URLs get too long.
Hmm, that's just a simple client-side fix. But the client should be able
to find out whether the server actually supports it..
I propose to extend ZeeRex:
- make serverInfo repeatable
- add an attribute @method to <serverInfo>
like this:
<serverInfo protocol="SRU" version="1.1" transport="http"
method="post,get">
<host>gondolin.hist.liv.ac.uk</host>
<port>80</port>
<database>IR-Explain---1</database>
</serverInfo>
<serverInfo protocol="SRW" version="1.1" transport="http" method="post">
<host>gondolin.hist.liv.ac.uk</host>
<port>8080</port>
<database>IR-Explain---1</database>
</serverInfo>
This configures SRU on gondolin.hist.liv.ac.uk:80, POST and GET
and SRW on gondolin.hist.liv.ac.uk:8080, POST
<serverInfo protocol="SRW/U" version="1.1" transport="http"
method="post,get">
<host>gondolin.hist.liv.ac.uk</host>
<port>80</port>
<database>IR-Explain---1</database>
</serverInfo>
This configures SRU and SRW on gondolin.hist.liv.ac.uk:80, POST and GET.
(Although GET probably bites with SOAP, so maybe this is a bad example.)
Question: does protocol="SRW" need extra attributes like RPC or
doc/literal ?? I don't know enough about SOAP for that..
Best regards,
Hedzer Westra, Systems Developer
Adlib | Information Systems
Reactorweg 291
3542 AD Utrecht
Postbus 1436
3600 BK Maarssen
tel: +31-30-241 1885
www: http://www.adlibsoft.com
|