# $Id: pqf.properties,v 1.13 2006/09/20 10:12:29 mike Exp $
#
# Propeties file to drive org.z3950.zing.cql.CQLNode's toPQF()
# back-end and the YAZ CQL-to-PQF converter.  This specifies the
# interpretation of various CQL indexes, relations, etc. in terms
# of Type-1 query attributes.
#
# This configuration file generates queries using BIB-1 attributes.
# See http://www.loc.gov/z3950/agency/zing/cql/dc-indexes.html
# for the Maintenance Agency's work-in-progress mapping of Dublin Core
# indexes to Attribute Architecture (util, XD and BIB-2)
# attributes.

# Identifiers for prefixes used in this file. (index.*)
set.cql		= info:srw/cql-context-set/1/cql-v1.1
set.rec		= info:srw/cql-context-set/2/rec-1.1
set.dc		= info:srw/cql-context-set/1/dc-v1.1
set.bath	= http://zing.z3950.org/cql/bath/2.0/

# The default set when an index doesn't specify one: Dublin Core
set		= info:srw/cql-context-set/1/dc-v1.1

# The default index when none is specified by the query
#index.cql.serverChoice			= 1=1016
index.cql.serverChoice			= 1=any 2=102
	# srw.serverChoice is deprecated in favour of cql.serverChoice
	# BIB-1 "any"
index.cql.allRecords			= 1=_ALLRECORDS 2=103

index.rec.id				= 1=12

#index.dc.title				= 1=4
index.dc.title				= 1=title 2=102
#index.dc.subject			= 1=21
index.dc.subject			= 1=subject 2=102
index.dc.creator			= 1=1003 2=102
#index.dc.author				= 1=1003
index.dc.author				= 1=author 2=102
	### Unofficial synonym for "creator"
index.dc.editor				= 1=1020
#index.dc.publisher			= 1=1018
index.dc.publisher			= 1=publisher
index.dc.description			= 1=62
	# "abstract"
index.dc.date				= 1=30
index.dc.resourceType			= 1=1031
	# guesswork: "Material-type"
index.dc.format				= 1=1034
	# guesswork: "Content-type"
index.dc.resourceIdentifier		= 1=key
	# "Local number"
index.dc.source				= 1=1019
	# "Record-source"
index.dc.language			= 1=54
	# "Code--language"
index.dc.relation			= 1=?
	### No idea how to represent this
index.dc.coverage			= 1=?
	### No idea how to represent this
index.dc.rights				= 1=?
	### No idea how to represent this

# Relation attributes are selected according to the CQL relation by
# looking up the "relation.<relation>" property:
#
relation.<				= 2=1
relation.le				= 2=2
relation.eq				= 2=3
relation.exact				= 2=3
relation.ge				= 2=4
relation.>				= 2=5
relation.<>				= 2=6

# These two are what Zebra uses -- may not work on other servers
relation.all				= 4=6
relation.any				= 4=105

# BIB-1 doesn't have a server choice relation, so we just make the
# choice here, and use equality (which is clearly correct).
relation.scr				= 2=3

# Relation modifiers.
#
relationModifier.relevant		= 2=102
relationModifier.fuzzy			= 5=103
	### truncation=regExpr-2 (5=103) in Zebra is "fuzzy matching"
relationModifier.stem			= 2=101
relationModifier.phonetic		= 2=100

# Non-standard extensions to provoke Zebra's inline sorting
relationModifier.sort			= 7=1
relationModifier.sort-desc		= 7=2
relationModifier.numeric		= 4=109

# Position attributes may be specified for anchored terms (those
# beginning with "^", which is stripped) and unanchored (those not
# beginning with "^").  This may change when we get a BIB-1 truncation
# attribute that says "do what CQL does".
#
position.first				= 3=1 6=1
	# "first in field"
position.any				= 3=3 6=1
	# "any position in field"
position.last				= 3=4 6=1
	# not a standard BIB-1 attribute
position.firstAndLast			= 3=3 6=3
	# search term is anchored to be complete field

# Structure attributes may be specified for individual relations; a
# default structure attribute my be specified by the pseudo-relation
# "*", to be used whenever a relation not listed here occurs.
#
structure.exact				= 4=108
	# string
structure.all				= 4=2
structure.any				= 4=2
structure.*				= 4=1
	# phrase

# Truncation attributes used to implement CQL wildcard patterns.  The
# simpler forms, left, right- and both-truncation will be used for the
# simplest patterns, so that we produce PQF queries that conform more
# closely to the Bath Profile.  However, when a more complex pattern
# such as "foo*bar" is used, we fall back on Z39.58-style masking.
#
truncation.right			= 5=1
truncation.left				= 5=2
truncation.both				= 5=3
truncation.none				= 5=100
truncation.regexp			= 5=102
truncation.z3958			= 5=104

# Finally, any additional attributes that should always be included
# with each term can be specified in the "always" property.
#
always					= 6=1
# 6=1: completeness = incomplete subfield


# Bath Profile support, added Thu Dec 18 13:06:20 GMT 2003
# See the Bath Profile for SRW at
#	http://zing.z3950.org/cql/bath.html
# including the Bath Context Set defined within that document.
#
# In this file, we only map index-names to BIB-1 use attributes, doing
# so in accordance with the specifications of the Z39.50 Bath Profile,
# and leaving the relations, wildcards, etc. to fend for themselves.

index.bath.keyTitle			= 1=33
index.bath.possessingInstitution	= 1=1044
index.bath.name				= 1=1002
index.bath.personalName			= 1=1
index.bath.corporateName		= 1=2
index.bath.conferenceName		= 1=3
index.bath.uniformTitle			= 1=6
index.bath.isbn				= 1=7
index.bath.issn				= 1=8
index.bath.geographicName		= 1=58
index.bath.notes			= 1=63
index.bath.topicalSubject		= 1=1079
index.bath.genreForm			= 1=1075

## From: marc <marc@indexdata.dk>
## Date: December 20, 2006 9:55:24 AM EST
## To: Zebra Information Server <zebralist@lists.indexdata.dk>
## Subject: Re: [Zebralist] pqf.properties
## Reply-To: Zebra Information Server <zebralist@lists.indexdata.dk>
## 
## Eric Lease Morgan wrote:
## > On Dec 19, 2006, at 4:45 PM, marc wrote:
## >>> How do I edit pqf.properties so I can get zebra to search my  
## >>> indexes via SRU?
## >>> I suppose I get this because etc/pqf.properties does not know  
## >>> about my field names.
## >>
## >> Right.
## >>
## >> The CQL-to-PQF conversion configuration has always been a bit of a  
## >> hassle, and I'd really like this to improve.
## >>
## >> The problem is, of course, that one needs to type the same index  
## >> names over-and-over again in different parts of the zebra configs.
## > Maybe I could work the other way around.
## > For example, how might I re-write my alvis indexing XSLT file so  
## > they conform to the pqf.properties file that comes with the Zebra  
## > distribution? Specifically, how might I change the value of the  
## > name attribute below so I could use CQL and search by title:
## >   <xsl:template match="rdf:RDF/rdf:Description/dc:Title">
## >     <z:index name="title" type="w"><xsl:value-of select="." /></ 
## > z:index>
## >   </xsl:template>
## 
## The crucial part is that the CQLtoPQF config file needs to hit an  
## existing index.
## 
## so the lines and
## 
## index.dc.title                          = 1=4
##   <z:index name="title" type="w"><xsl:value-of select="." /></z:index>
## 
## need to match
## 
## If string indexes are used, easiest is to correct the standard config  
## file to
## 
## index.dc.title                          = 1=title
## 
## and so forth. The numeric value '4' refers to the specific bib-1  
## numeric attribute set, and is more confusion than help, so I suggest  
## you stick to your own defined string index names.
## 
## In addition, you have to take into account if the indexes are of type  
## 'p', 'w', '0' or otherwise specified.
## 
## so for  example:
##   <z:index name="thisandthat" type="p">...</z:index>
## 
## would be
## index.dc.something = 1=thisandthat 6=3
## 
## and
##   <z:index name="thisandthat" type="0">...</z:index>
## would be
## index.dc.something = 1=thisandthat 4=3
## 
## The reason why this is so complex is that people often want only to  
## provide a subset of functionality to CQL queries, and therefore those  
## are independent config files.
## 
## A better view of the way PQF queries are mapped to zebra indexes is  
## here:
## 
## http://www.indexdata.com/zebra/doc/querymodel-zebra.tkl#querymodel- 
## pqf-apt-mapping
## 
## section:
## Mapping of PQF APT structure and completeness to register type
## 
## and you need to run a PQF query to test that at least this part  
## works, before attempting a CQL-to-PQF query conversion.
## 
## 
## So, the way to build a working config is:
## 
## 1) define your indexing rues in the indexation stylesheet
## i.e define and index with
## 
##   <z:index name="thisandthat" type="0">...</z:index>
## 
## 
## 2) test that you worked out the correct PQF queries to acces them  
## using the above mentioned documentation section.
## 
## i.e test
## Z> querytype prefix
## Z> scan attr 1=thisandthat @attr 4=3 aterm
## 
## 3) showel that query into the right hand side of the index  
## definitions of the CQL to PQF converter
## 
## write
## index.dc.something = 1=thisandthat 4=3
## 
## 
## 4) test that the CQL is performed correctly
## 
## test (yes, yaz-client can send CQL queries)
## Z> querytype cql
## Z> scan dc.title=aterm
## 
## -- 
## Marc Cromme
## M.Sc and Ph.D in Mathematical Modelling and Computation
## Senior Developer, Project Manager
