1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- $Id: zeerex-explain.xml,v 1.3 2006-09-08 12:52:02 marc Exp $ -->
5 <!-- this file configures the SRU/SRW explain response -->
6 <!-- see: http://explain.z3950.org/dtd/commentary.html -->
7 <!-- validate this using zeerex-2.0.xsd -->
8 <!-- http://explain.z3950.org/dtd/zeerex-2.0.xsd -->
9 <!-- Extensions see: http://explain.z3950.org/dtd/extensions.html -->
10 <!-- Other info: Z39.92 -->
12 <explain xmlns="http://explain.z3950.org/dtd/2.0/"
13 xmlns:izx="http://indexdata.com/zeerex/1.0">
15 <!-- try stylesheet url: http://./?stylesheet=docpath/sru2.xsl -->
16 <serverInfo protocol="SRW/SRU/Z39.50">
18 <host>foo.indexdata.dk</host>
20 <!-- <database numRecs="1314" lastUpdate="2006-03-15 09-05-33">
21 Default</database> -->
22 <database>Default</database>
26 <password>squirrelfish</password>
32 <title lang="en" primary="true">Metaproxy SRU/SRW/Z39.50 server</title>
34 <description lang="en" primary="true">
35 Test ZeeRex Explain for SRU and CQL-to-PQF query Metaproxy filter
38 <author>Marc Cromme, Index Data Aps,
39 http://www.indexdata.dk</author>
41 <contact>Marc Cromme, marc(at)indexdata(dot)com</contact>
43 <!--<langUsage codes="en fr">
44 The records are in English and French.
46 <!-- <extend>Partially crawled web data</extend> -->
52 <implementation identifier="Metaproxy" version="0.??">
53 <title>Index Data Metaproxy http://www.indexdata.dk</title>
57 <link type="z39.50">http://foo.indexdata.dk:80</link>
58 <link type="srw">http://foo.indexdata.dk:80</link>
59 <link type="sru">http://foo.indexdata.dk:80</link>
66 <dateModified>2002-03-29 19:00:00</dateModified>
67 <aggregatedFrom> z39.50r://gondolin.hist.liv.ac.uk:210/IR-Explain-1?
68 id=ghlau-1;esn=F;rs=XML </aggregatedFrom>
69 <dateAggregated>2002-03-30 06:30:00</dateAggregated>
75 <!-- tricky problem of mapping PQF to CQL or
76 other query forms (Opensearch?? -->
78 PQF query language evaluation in most natural order
79 boolean: @and, @or, @not, @prox
80 boolean modifier: @prox exclusion distance ordered relation which unit
81 @prox 0 3 1 2 k 2 term1 term2
82 attrset: bib-1, exp-1, gils
83 1=Use: 4=Title 7=ISBN 8=ISSN 30=Date 62=Abstract
85 4=Structure: 1=Phrase 2=Word 3=Key 4=Year 5=Date 6=WordList
86 2=Relation: 1< 2<= 3= 4>= 5> 6!= 102=Relevance
87 5=Truncation: 1=Right 2=Left 3=L&R 100=No 101=# 102=Re-1 103=Re-2
88 6=Completeness: 1=Incompl subfield 2=Complete subfield 3=Complete field
89 3=Position: 1=First in Field 2=First in subfield 3=Any position
90 term: fish, "fish and chips"
94 CQL query language evaluation in most natural order
95 boolean: and, or, not, prox
96 boolean mod set: and/rel.sum (cql is default)
97 boolean modifier: distance, unit, ordered, unordered
98 boolean mod rel: =, <, >, prox/distance=1, prox/distance>2
99 boolean mod qual: prox/distance=1/unit=word, prox/distance>2/ordered
100 set name: cql, rec, dc
101 index name: cql.all, cql.serverChoice, rec.id, dc.title
102 relation: <, <=, =, >, >=, <>, exact, all, any
103 relation mod set: cql (default), rel
104 relation mod name: relevant, phonetic, stem
105 any/relevant/rel.CORI
106 relation mod qual: word, string, isoDate, number, uri, masked, unmasked
108 anchoring: ^left, right^, "^cat in the hat"
109 masking char: *, ?, c*t, c?t
110 term: fish, "fish and chips"
114 xmlns="http://indexdata.com/query"
119 <boolean name="and"/>
121 <boolean name="not"/>
123 <boolean name="prox">
124 <boolean_mod_rel name="="/>
125 <boolean_mod name="distance">
126 <boolean_mod_rel name="="/>
127 <boolean_mod_rel name="<"/>
128 <boolean_mod_rel name=">"/>
130 <boolean_mod name="unit">
131 <boolean_mod_qual name="sentence"/>
132 <boolean_mod_qual name="word"/>
134 <boolean_modifier name="ordered" name=""/>
135 <boolean_modifier name="unordered" name=""/>
139 <relation name="=" default="true"/>
141 <set name="cql" default="true"
142 identifier="info:srw/cql-context-set/1/cql-v1.1">
143 <title>CQL Standard Set</title>
144 <index name="all" default="true">
145 <relation name="=" default="true">
146 <relation_mod_set name="cql" default="true">
147 <relation_mod name="relevant"/>
149 <relation_mod_set name="rel">
150 <relation_mod name="foo"/>
151 <relation_mod name="bar"/>
156 <anchor name="^" type="right"/>
157 <anchor name="^" type="left"/>
159 <index name="serverChoice"/>
161 <set name="rec" identifier="info:srw/cql-context-set/2/rec-1.0">
162 <title>Record Standard Set</title>
163 <index name="id" default="true"/>
165 <set name="dc" identifier="info:srw/cql-context-set/1/dc-v1.1">
166 <title>Dublin Core Set</title>
167 <index name="title"/>
168 <index name="description"/>
169 <index name="author" identifier="creator"/>
170 <index name="creator"/>
172 <relation name="=" default="true"/>
173 <relation name="<"/>
174 <relation name=">"/>
176 <index name="publisher"/>
182 <set name="bib1" identifier="1.2.840.10003.3.1">
183 <title>BIB-1 Z39.50 Standard Set</title>
184 <structure name="2" default="true"/>
185 <structure name="1"/>
187 <truncation name="100"/>
188 <completeness name="3"/>
196 <relation name="3" default="true"/>
203 <structure name="3"/>
207 <structure name="5"/>
210 <title>Abstract</title>
213 <title>Author</title>
218 <relation name="3" default="true"/>
219 <relation name="102">
220 <truncation name="100" default="true"/>
221 <truncation name="101"/>
222 <truncation name="102"/>
227 <set name="exp1" identifier="">
228 <title>Explain Z39.50 Standard Set</title>
230 <set name="gils" identifier="">
231 <title>Gils Z39.50 Standard Set</title>
237 <title xml:lang="en">CCL Query Language - English Configuration</title>
238 <title xml:lang="da">CCL Søgesprog - Dansk Konfiguration</title>
239 <boolean xml:lang="en" name="and" default="true" identifier="and"/>
240 <boolean xml:lang="en" name="or" identifier="or"/>
241 <boolean xml:lang="en" name="not" identifier="not"/>
242 <boolean xml:lang="da" name="og" default="true" identifier="and"/>
243 <boolean xml:lang="da" name="eller" identifier="or"/>
244 <boolean xml:lang="da" name="ikke" identifier="not"/>
246 <relation name="=" default="true"/>
248 <index xml:lang="en" name="title"/>
249 <index xml:lang="en" name="description" default="true"/>
250 <index xml:lang="en" name="author" identifier="creator"/>
251 <index xml:lang="en" name="creator"/>
252 <index xml:lang="en" name="publisher"/>
253 <index xml:lang="da" name="titel" identifier="title"/>
254 <index xml:lang="da" name="beskrivelse" default="true"
255 identifier="description"/>
256 <index xml:lang="da" name="author" identifier="creator"/>
257 <index xml:lang="da" name="ophav" identifier="creator"/>
258 <index xml:lang="da" name="editor" identifier="publisher"/>
265 <set name="cql" identifier="info:srw/cql-context-set/1/cql-v1.1">
266 <title>CQL Standard Set</title>
268 <set name="rec" identifier="info:srw/cql-context-set/2/rec-1.0">
269 <title>Record Standard Set</title>
271 <set name="dc" identifier="info:srw/cql-context-set/1/dc-v1.1">
272 <title>Dublin Core Set</title>
274 <set name="bib1" identifier="1.2.840.10003.3.1">
275 <title>BIB-1 Z39.50 Standard Set</title>
279 <!-- CQL standard index -->
280 <index search="true" scan="true" sort="false">
281 <title lang="en">CQL Server Choice</title>
282 <map><name set="cql">serverChoice</name></map>
284 <attr type="1" set="bib1">text</attr>
287 <index search="true" scan="true" sort="false">
288 <title lang="en">CQL All</title>
289 <map><name set="cql">all</name></map>
291 <attr type="1" set="bib1">text</attr>
295 <!-- Record ID index -->
296 <index search="true" scan="true" sort="false">
297 <title lang="en">Record ID</title>
298 <map><name set="rec">id</name></map>
300 <attr type="1" set="bib1">rec:id</attr>
301 <attr type="4" set="bib1">3</attr>
305 <!-- Dublin Core Indexes -->
306 <index search="true" scan="true" sort="false">
307 <izx:cost value="0"/>
308 <title lang="en">DC Title</title>
309 <map><name set="dc">title</name></map>
311 <attr type="1" set="bib1">dc:title</attr>
314 <index search="true" scan="true" sort="false">
315 <title lang="en">DC Creator</title>
316 <map><name set="dc">creator</name></map>
318 <attr type="1" set="bib1">dc:creator</attr>
321 <index search="true" scan="true" sort="false">
322 <title lang="en">DC Subject</title>
323 <map><name set="dc">subject</name></map>
325 <attr type="1" set="bib1">dc:subject</attr>
328 <index search="true" scan="true" sort="false">
329 <title lang="en">DC Description</title>
330 <map><name set="dc">description</name></map>
332 <attr type="1" set="bib1">dc:description</attr>
333 <!-- <attr type="2" set="bib1">102</attr> -->
336 <index search="true" scan="true" sort="false">
337 <title lang="en">DC Publisher</title>
338 <map><name set="dc">publisher</name></map>
340 <attr type="1" set="bib1">dc:publisher</attr>
343 <index search="true" scan="true" sort="false">
344 <title lang="en">DC Contributor</title>
345 <map><name set="dc">contributor</name></map>
347 <attr type="1" set="bib1">dc:contributor</attr>
350 <index search="true" scan="true" sort="false">
351 <title lang="en">DC Date</title>
352 <map><name set="dc">date</name></map>
354 <attr type="1" set="bib1">dc:date</attr>
357 <index search="true" scan="true" sort="false">
358 <title lang="en">DC Type</title>
359 <map><name set="dc">type</name></map>
361 <attr type="1" set="bib1">dc:type</attr>
364 <index search="true" scan="true" sort="false">
365 <title lang="en">DC Format</title>
366 <map><name set="dc">format</name></map>
368 <attr type="1" set="bib1"></attr>
371 <index search="true" scan="true" sort="false">
372 <title lang="en">DC Identifier</title>
373 <map><name set="dc">identifier</name></map>
375 <attr type="1" set="bib1">dc:identifier</attr>
378 <index search="true" scan="true" sort="false">
379 <title lang="en">DC Source</title>
380 <map><name set="dc">source</name></map>
382 <attr type="1" set="bib1">dc:source</attr>
385 <index search="true" scan="true" sort="false">
386 <title lang="en">DC Language</title>
387 <map><name set="dc">language</name></map>
389 <attr type="1" set="bib1">dc:language</attr>
392 <index search="true" scan="true" sort="false">
393 <title lang="en">DC Relation</title>
394 <map><name set="dc">relation</name></map>
396 <attr type="1" set="bib1">dc:relation</attr>
399 <index search="true" scan="true" sort="false">
400 <title lang="en">DC Coverage</title>
401 <map><name set="dc">coverage</name></map>
403 <attr type="1" set="bib1">dc:coverage</attr>
406 <index search="true" scan="true" sort="false">
407 <title lang="en">DC Rights</title>
408 <map><name set="dc">rights</name></map>
410 <attr type="1" set="bib1">dc:rights</attr>
416 <!-- Z39.50 stuff ... not allowed in one and the same explain together with
419 <recordSyntax identifier="1.2.840.10003.5.109.10">
420 <elementSet name="F">
421 <title lang="en" primary="true">Full XML Record</title>
423 <elementSet name="B">
424 <title lang="en" primary="true">Brief XML Record</title>
431 xmlns="http://indexdata.com/retrieval"
435 identifier="1.2.840.10003.5.105"
436 location="http://www.loc.gov/z3950/agency/asn1.html#RecordSyntax-generic"/>
439 identifier="1.2.840.10003.5.10"
440 location="http://www.loc.gov/marc/">
441 <title lang="en">Marc21</title>
442 <elementset name="F">
443 <title lang="en" primary="true">Full Marc21 Record</title>
444 <backend syntax="usmarc" name="F"/>
446 <elementset name="B">
447 <title lang="en" primary="true">Brief Marc21 Record</title>
448 <backend syntax="usmarc" name="B"/>
454 identifier="1.2.840.10003.5.109.10"
455 location="http://www.w3.org/XML/">
456 <!-- location="http://www.w3.org/TR/2006/REC-xml-20060816/" -->
457 <title lang="en">XML</title>
459 identifier="info:srw/schema/1/marcxml-v1.1"
460 location="http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
462 <title lang="en">MarcXML</title>
463 <backend syntax="usmarc" name="F"/>
465 <marc inputformat="marc" outputformat="marcxml"
466 inputcharset="marc-8"/>
472 <title lang="en">Marc XChange</title>
473 <backend syntax="usmarc" name="F"/>
475 <marc inputformat="marc" outputformat="marcxchange"
476 inputcharset="marc-8"/>
481 identifier="info:srw/schema/1/dc-v1.1"
482 location="http://www.loc.gov/standards/sru/dc-schema.xsd"
484 <title lang="en">Dublin Core</title>
485 <backend syntax="usmarc" name="F"/>
487 <marc inputformat="marc" outputformat="marcxml"
488 inputcharset="marc-8"/>
489 <xslt stylesheet="../etc/MARC21slim2DC.xsl"/>
497 <schema identifier="info:srw/schema/2/rec-1.0"
498 location="http://srw.cheshire3.org/schemas/rec/1.0/rec.xsd"
501 <title lang="en">Record Metadata</title>
504 <schema identifier="info:srw/schema/1/dc-v1.1"
505 location="http://www.loc.gov/standards/sru/dc-schema.xsd"
508 <title lang="en">Dublin Core</title>
510 <schema identifier="info:srw/schema/1/mods-v3.0"
511 location="http://www.loc.gov/standards/mods/v3/mods-3-0.xsd"
514 <title lang="en">Mods</title>
516 <schema identifier="info:srw/schema/1/marcxml-v1.1"
517 location="http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
520 <title lang="en">MarcXML</title>
527 <!-- searchRetrieve settings -->
529 <!-- default context set -->
530 <default type="contextSet">cql</default>
532 <default type="index">all</default>
534 <!-- default relation -->
535 <default type="relation">=</default>
537 <supports type="relation"
538 izx:type="2" izx:set="bib1" izx:value="1"><</supports>
539 <supports type="relation"
540 izx:type="2" izx:set="bib1" izx:value="2"><=</supports>
541 <supports type="relation"
542 izx:type="2" izx:set="bib1" izx:value="3">=</supports>
543 <supports type="relation"
544 izx:type="2" izx:set="bib1" izx:value="4">>=</supports>
545 <supports type="relation"
546 izx:type="2" izx:set="bib1" izx:value="5">></supports>
549 <!-- <supports type="relation"><></supports> --><!-- 2=6 DEAD !!! -->
550 <!-- <supports type="relation">all</supports> --><!-- 2=3 OK -->
551 <!-- <supports type="relation">any</supports> --><!-- 2=3 OK -->
553 <supports type="relationModifier"
554 izx:type="2" izx:set="bib1" izx:value="102">relevant</supports>
556 <!-- <supports type="relationModifier"
557 izx:type="2" izx:set="bib1" izx:value="100">phonetic</supports> -->
558 <!-- <supports type="relationModifier"
559 izx:type="2" izx:set="bib1" izx:value="101">stem</supports> -->
562 <!-- support proximity (Empty) -->
563 <!-- <supports type="proximity"></supports> --> <!-- DEAD, title = (house prox/distance=1/unit=word the) FAILS -->
566 <!-- proximity modifier supported by the server or index
567 (relation, distance, unit, ordering) -->
568 <!-- <supports type="proximityModifier"></supports> -->
570 <!-- boolean modifier supported by the server or index -->
571 <!-- <supports type="booleanModifier"></supports> -->
573 <!-- masking character supported (* or ?) -->
574 <supports type="maskingCharacter">*</supports>
575 <supports type="maskingCharacter">?</supports>
577 <!-- anchoring supported? (^ character) -->
578 <!-- MARC: how do I express that I only support left anchoring in
579 the beginning of the field ( bib1 3=1 ), but no right anchoring ?? -->
580 <!-- MIKE: You can't. The ZeeRex documentation should be changed
581 to allow this, as <supports type="anchoring">left</supports> -->
582 <!-- <supports type="anchoring"></supports> -->
584 <!-- empty terms supported (Empty) -->
585 <!-- MARC: what's the use case of this ?? -->
586 <!-- MIKE: lots of uses! For example, scanning from the very
587 start of the index with 'scan @attr 1=text ""'. Or searching
588 for bibliographic records with no title, etc. -->
589 <!-- MARC: I see, and we can if we always use '""'
590 (the empty string), as in 'scan @attr 1=text ""' -->
591 <supports type="emptyTerm"></supports>
594 <!-- sorting settings -->
596 <!-- default schema used in sorting, in short name form -->
597 <!-- <default type="sortSchema"></default> -->
598 <!-- MIKE: deprecated -->
600 <!-- server support sort -->
601 <!-- MARC: why stating this redundant info here?? it's already in the
602 <index sort="true" attribute -->
603 <!-- MIKE: that's not quite the same thing. This is saying
604 whether the server can do sorting at all. Since
605 sort="true|false" attributes can be omitted entirely from
606 indexes, you can't deduce from a set of <index> elements
607 without sorting specified that the server doesn't support
609 <!-- MARC: which ought to be the same thing than saying that sorting is
610 _not_ possible. In short, one simple <index sort="true" attribute
611 should be enough to tell that sorting _is_ possible. Or we have the
612 same discussion about overruling general sorting capabilities in
613 specific indexes ?? Quite confusing ... -->
614 <!-- MIKE: no, within an <index>, saying sort="true" means that
615 you can sort on it, sort="false" means that you can't, and
616 not saying anything means you're not saying anything. Three
617 different cases. That's as it should be, since Explain
618 records might be auto-generated by systems that can't do the
619 necessary probes. So a ZeeRex record might not have "sort"
620 attributes on any of its <index>es, but still say that
621 sorting is supported. The client (or user) has to experiment
622 to find out what indexes support it. Check the mailing list
623 archives if you want a rationale, I forget the details. -->
624 <!-- <supports type="sort"></supports> -->
626 <!-- supported sortmodifier (ascending, missingValue, caseSensitive) -->
627 <!-- <supports type="sortModifier"></supports> -->
628 <!-- MIKE: this is for the new CQL "sortby" sorting, which Zebra
629 doesn't yet do at all, so you're right to omit this for now. -->
631 <!-- presentation settings -->
633 <!-- default number of records that a server will return at once -->
634 <default type="numberOfRecords">0</default>
636 <!-- default schema used for retrieved records -->
637 <default type="retrieveSchema">index</default>
638 <!-- MIKE: That's not what I get by default. A URL such as
639 http://localhost:1314/Default?version=1.1&operation=searchRetrieve&query=1&maximumRecords=10
640 gives me a weird sort of hybrid record with <metadata>
641 sections and <z:index> elements. Unfortunately, the SRU
642 response doesn't see to explicitly state what schema is
644 <!-- MARC: Right, the default seems to be the 'index' schema. I have to
645 talk to Adam to get a better way to choose the default schema -->
647 <!-- default stylesheet URL, or if stylesheets are supported -->
648 <!-- MARC: here I want to express: no default, but you kan use this
649 and only this one - should I use 'setting' ?? -->
650 <!-- MIKE: There is no way to say this at present, but what you
651 suggest is sensible. Please suggest it to the list -->
652 <setting type="stylesheet">docpath/sru.xsl</setting>
654 <!-- default record packing returned (string or xml) -->
655 <default type="recordPacking">xml</default>
657 <!-- maximum number of records that a server will return at once -->
658 <!-- <setting type="maximumRecords">1000</setting> -->
660 <!-- support result sets (Empty) -->
661 <!-- MARC: this one is for result sets in Z39.50, right ?? -->
662 <!-- MIKE: No, this also applies for SRU -->
663 <!-- MARC: Rrrrriiiight! That's why the section about this is called
664 <schemaInfo>, and the word resultSet never appears in a SRU Explain.
666 <!-- MIKE: I don't understand what point you're making. SRU, like
667 Z39.50, has specifications for how to do result sets. But I
668 don't know whether Zebra supports them or not -->
669 <!-- MARC: open question, then, I'll better comment out -->
670 <!-- <supports type="resultSets"></supports> -->
672 <!-- XPath retrieval supported -->
673 <!-- <supports type="recordXPath"></supports> -->
676 <!-- scan settings -->
678 <!-- scan operation supported -->
679 <supports type="scan"></supports>
681 <!-- default number of terms to be returned in scan -->
682 <default type="numberOfTerms">20</default>
686 <!-- other server settings -->
688 <!-- older version of the protocol supported -->
689 <!-- MARC: why only older versions of the protocol ?? It seems
690 natural just to list what you understand, including the one the
691 client sucesfully used -->
692 <!-- MIKE: it may seem natural, but it ain't what it means! -->
693 <!-- MARC: but makes sense, and makes determining the list of protocol
694 versions easier in a thin client -->
695 <!-- MIKE: if you want to change the meaning of this, then propose
696 it on-list. I doubt you'll get much support. Thin clients
697 won't use this anyway, they will just speak one version and
698 hope for the best -->
699 <!-- <supports type="version">1.1</supports> -->
701 <!-- number of seconds that a result set will be maintained for -->
702 <setting type="resultSetTTL">0</setting>
704 <!-- A type of extraRequestData available in the
705 searchRetrieveRequest. The extra*Data fields are represented as two
706 space separated words, the first the identifier for the extension and
707 the second the individual element name from the extension. If there is
708 only one word, then it is the extension id and all elements from
709 within are supported. -->
710 <!-- <supports type="extraSearchData"></supports> -->
711 <!-- MIKE: we could explain x-pquery here -->
712 <!-- MARC: I talked to Adam about this. We should make a new 'x-type'
713 with possible values PQF, CQL, CCL , .. such that 'query' still is
714 obligatory, and carries the query string, be it PQF, CCL, or CQL. -->
715 <!-- MIKE: Yes, that would be _much_ better -->
717 <!-- A type of extraRequestData available in the explainRequest -->
718 <!-- <supports type="extraExplainData"></supports> -->
720 <!-- A type of extraRequestData available in the scanRequest -->
721 <!-- <supports type="extraScanData"></supports> -->
722 <!-- MIKE: we could explain x-pscan here -->
723 <!-- MARC: re-use of 'x-type' here .. drop 'x-pscan' -->
725 <!-- The URI identifier of a supported profile -->
726 <!-- MARC: what's this ?? -->
727 <!-- <supports type="profile"></supports> -->
728 <!-- MIKE: this is a very good thing, which we should use when the
729 time is right. A "profile" is a complete set of
730 specifications for using Z39.50 and/or SRU within a
731 particular application domain. We should write a (brief)
732 "Alvis Profile for SRU", assign it an opaque identifier URI,
733 and point to it here. (Not today, though!) -->
734 <!-- MARC: so this is some HTML prosa text ?? -->
735 <!-- MIKE: see for example
736 http://zthes2.z3950.org/srw/zthes-srw-1.0.html