</tool>
</toolChain>
</folderInfo>
- <folderInfo id="cdt.managedbuild.config.gnu.macosx.exe.debug.1350738082.48114312" name="/" resourcePath="src">
- <toolChain id="cdt.managedbuild.toolchain.gnu.macosx.exe.debug.1120388387" name="MacOSX GCC" superClass="cdt.managedbuild.toolchain.gnu.macosx.exe.debug" unusedChildren="">
- <tool id="cdt.managedbuild.tool.macosx.c.linker.macosx.exe.debug.407949997" name="MacOS X C Linker" superClass="cdt.managedbuild.tool.macosx.c.linker.macosx.exe.debug.937721886"/>
- <tool id="cdt.managedbuild.tool.macosx.cpp.linker.macosx.exe.debug.2115682336" name="MacOS X C++ Linker" superClass="cdt.managedbuild.tool.macosx.cpp.linker.macosx.exe.debug.301077445"/>
- <tool id="cdt.managedbuild.tool.gnu.assembler.macosx.exe.debug.1441890307" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.macosx.exe.debug.558303931">
- <inputType id="cdt.managedbuild.tool.gnu.assembler.input.2113422069" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
- </tool>
- <tool id="cdt.managedbuild.tool.gnu.archiver.macosx.base.341888168" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.macosx.base.1147822956"/>
- <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.macosx.exe.debug.791617477" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.macosx.exe.debug.1794369284"/>
- <tool id="cdt.managedbuild.tool.gnu.c.compiler.macosx.exe.debug.743084521" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.macosx.exe.debug.2080175189">
- <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1792646124" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
- </tool>
- </toolChain>
- </folderInfo>
- <sourceEntries>
- <entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="src"/>
- <entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="test"/>
- </sourceEntries>
</configuration>
</storageModule>
- <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
- <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
- <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.macosx.exe.debug.1350738082;cdt.managedbuild.config.gnu.macosx.exe.debug.1350738082.48114312;cdt.managedbuild.tool.gnu.c.compiler.macosx.exe.debug.743084521;cdt.managedbuild.tool.gnu.c.compiler.input.1792646124">
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="makefileGenerator">
- <runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- </scannerConfigBuildInfo>
</storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
</cconfiguration>
<cconfiguration id="cdt.managedbuild.config.macosx.exe.release.397760623">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.macosx.exe.release.397760623" moduleId="org.eclipse.cdt.core.settings" name="Release">
</folderInfo>
</configuration>
</storageModule>
- <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
- <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
- <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.macosx.exe.debug.1350738082;cdt.managedbuild.config.gnu.macosx.exe.debug.1350738082.48114312;cdt.managedbuild.tool.gnu.c.compiler.macosx.exe.debug.743084521;cdt.managedbuild.tool.gnu.c.compiler.input.1792646124">
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="makefileGenerator">
- <runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- </scannerConfigBuildInfo>
</storageModule>
+ <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>pazpar2.master</name>
+ <name>pazpar2</name>
<comment></comment>
<projects>
</projects>
<value>make</value>
</dictionary>
<dictionary>
- <key>org.eclipse.cdt.make.core.buildLocation</key>
- <value>${workspace_loc:/pazpar2.master/Debug}</value>
- </dictionary>
- <dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
-DEBIAN_DIST="squeeze lenny"
-UBUNTU_DIST="maverick lucid karmic"
+DEBIAN_DIST="wheezy squeeze lenny"
+UBUNTU_DIST="natty maverick lucid karmic"
for d in etc etc/settings etc/services www/test1 www/jsdemo www/iphone; do \
mkdir -p $(distdir)/$$d; cp -r $$d/* $(distdir)/$$d; \
done; rm -f $(distdir)/etc/pazpar2.cfg; exit 0
+ mkdir $(distdir)/rpm
+ -cp $(srcdir)/rpm/* $(distdir)/rpm
.PHONY:debian
debian:
+--- 1.5.6 2011/04/15
+
+Fix a problem with skiparticle sortkey that could be completely
+ignored (and reduced to "").
+
+Fix dependency problem in pazpar2 RPM package (did not require
+libyaz4 as it should).
+
--- 1.5.5 2011/03/28
Fix memory leak that occurred for command=termlist&name=xtargets .
dpkg-buildpackage -rfakeroot
When building from Git, you need these Debian packages:
- autoconf, automake, libtool, gcc, bison, any tcl,
- xsltproc, docbook, docbook-xml, docbook-xsl,
- libxslt1-dev, libssl-dev, libreadline5-dev, libwrap0-dev,
- libpcap0.8-dev, pkg-config
-
-Also perhaps: libgnutls-dev libicu-dev
+ autoconf automake libtool gcc tcl8.4
+ xsltproc docbook docbook-xml docbook-xsl
+ libxslt1-dev libgnutls-dev libreadline5-dev libicu-dev
And if you want to make a Debian package: dpkg-dev fakeroot debhelper
(Then run "dpkg-buildpackage -rfakeroot" in this directory.)
# Autoconf and automake setup
AC_PREREQ(2.60)
-AC_INIT([pazpar2],[1.5.5],[pazpar2-help@indexdata.dk])
+AC_INIT([pazpar2],[1.5.6],[pazpar2-help@indexdata.dk])
AC_CONFIG_HEADERS(src/config.h)
AC_C_INLINE
-YAZ_INIT([static icu],[4.1.0])
+YAZ_INIT([static icu],[4.2.0])
if test -z "$YAZLIB"; then
AC_MSG_ERROR([YAZ development libraries missing])
fi
YAZ_DOC
+AC_SEARCH_LIBS([log],[m])
AC_CHECK_HEADERS([sys/time.h sys/socket.h unistd.h netinet/in.h netdb.h arpa/inet.h])
checkBoth=0
AC_CHECK_FUNC([connect])
AC_CHECK_FUNC([accept], , [LIBS=$oldLibs])
fi
AC_CHECK_FUNC([gethostbyname], ,[AC_CHECK_LIB(nsl, main, [LIBS="$LIBS -lnsl"])])
-AC_CHECK_FUNCS([getaddrinfo])
-
-AC_CHECK_FUNCS([mallinfo])
+AC_CHECK_FUNCS([getaddrinfo mallinfo])
if test -d ${srcdir}/.git; then
sha=`git show --pretty=format:%H|head -1`
-Alias /pazpar2 /usr/share/pazpar2
-
+# Note: this alias is a global defintion and will override any alias
+# configuration for virtual hosts. Uncommend this line if you want
+# configure the alias inside a <VirtualHost> directive!
+Alias /pazpar2 /usr/share/pazpar2
+pazpar2 (1.5.6-1indexdata) unstable; urgency=low
+
+ * Upstream.
+
+ -- Adam Dickmeiss <adam@indexdata.dk> Fri, 15 Apr 2011 11:42:25 +0000
+
pazpar2 (1.5.5-1indexdata) unstable; urgency=low
* Upstream.
Section: net
Priority: extra
Maintainer: Adam Dickmeiss <adam@indexdata.dk>
-Build-Depends: debhelper (>= 5), autotools-dev, libyaz4-dev (>= 4.1.0), docbook-xsl, libgnutls-dev
+Build-Depends: debhelper (>= 5), autotools-dev, libyaz4-dev (>= 4.2.0), docbook-xsl, libgnutls-dev
Standards-Version: 3.7.2
Package: pazpar2
</varlistentry>
<varlistentry>
- <term>pz:termlist_term_count</term>
- <listitem>
- <para>
- Specifies that the target should return up to n terms for each facets (where termlist="yes"). This implies
- that the target can return facets on the search command. Requesting facets on targets that doesn't,
- will return unpredictable or error result.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>pz:termlist_term_sort</term>
+ <term>pz:preferred</term>
<listitem>
<para>
- Specifies how the terms should be sorted. (Not yet implemented)
+ Specifies that a target is preferred, e.g. possible local, faster target. Using block=pref on show command
+ will wait for all these targets to return records before releasing the block. If no target is preferred,
+ the block=pref will identical to block=1, which release when one target has returned records.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>pz:preferred</term>
+ <term>pz:block_timeout</term>
<listitem>
<para>
- Specifies that a target is preferred, e.g. possible local, faster target. Using block=pref on show command
- will wait for all these targets to return records before releasing the block. If no target is preferred,
- the block=pref will identical to block=1, which release when one target has returned records.
+ (Not yet implemented). Specifies the time for which a block should be released anyway.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>pz:block_timeout</term>
+ <term>pz:facetmap:<replaceable>name</replaceable></term>
<listitem>
<para>
- (Not yet implemented). Specifies the time for which a block should be released anyway.
+ Specifies that for field <replaceable>name</replaceable>, the target
+ supports (native) facets. The value is the name of the
+ field on the target.
</para>
+ <note>
+ <para>
+ At this point only SOLR targets have been tested with this
+ facility.
+ </para>
+ </note>
</listitem>
</varlistentry>
</pz:metadata>
</xsl:template>
+ <xsl:template match="page">
+ <pz:metadata type="page">
+ <xsl:value-of select="."/>
+ </pz:metadata>
+ </xsl:template>
+
+ <xsl:template match="endpage">
+ <pz:metadata type="endpage">
+ <xsl:value-of select="."/>
+ </pz:metadata>
+ </xsl:template>
+
<xsl:template match="item">
<pz:metadata type="locallocation">
<xsl:choose>
--- /dev/null
+<settings target="opencontent-solr.index:8984/solr">
+ <set name="pz:name" value="opencontent-solr"/>
+
+ <set name="pz:apdulog" value="1"/>
+ <!-- mapping for unqualified search -->
+ <set name="pz:cclmap:term" value="1=title"/>
+
+ <!-- field-specific mappings -->
+ <set name="pz:cclmap:au" value="1=author" />
+ <set name="pz:cclmap:ti" value="1=title" />
+ <set name="pz:cclmap:su" value="1=subject"/>
+ <set name="pz:cclmap:isbn" value="1=isbn" />
+ <set name="pz:cclmap:issn" value="1=issn" />
+ <set name="pz:cclmap:date" value="1=date" />
+
+ <!-- Retrieval settings -->
+
+ <set name="pz:sru" value="solr"/>
+ <set name="pz:requestsyntax" value="tmarc"/>
+
+ <!-- Termlist/facet settings -->
+ <set name="pz:termlist_term_count" value="0"/>
+ <set name="pz:termlist_term_sort" value="1"/>
+
+ <set name="pz:facetmap:date" value="date"/>
+ <set name="pz:facetmap:subject" value="subject_exact"/>
+ <set name="pz:facetmap:author" value="author_exact"/>
+ <!-- Result normalization settings -->
+
+ <set name="pz:nativesyntax" value="txml"/>
+ <set name="pz:xslt" value="solr-pz2.xsl"/>
+</settings>
+<!-- Keep this comment at the end of the file
+ Local variables:
+ mode: nxml
+ End:
+-->
+
</xsl:choose>
</xsl:variable>
+ <xsl:variable name="date_008">
+ <xsl:choose>
+ <xsl:when test="contains('cestpudikmr', substring(tmarc:c008, 7, 1))">
+ <xsl:value-of select="substring(tmarc:c008, 8, 4)" />
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="date_end_008">
+ <xsl:choose>
+ <xsl:when test="contains('dikmr', substring(tmarc:c008, 7, 1))">
+ <xsl:value-of select="substring(tmarc:c008, 12, 4)" />
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+
<pz:record>
<!--
<xsl:attribute name="mergekey">
</pz:metadata>
</xsl:for-each>
+ <xsl:if test="$date_008 and not(tmarc:d260)">
+ <pz:metadata type="date">
+ <xsl:choose>
+ <xsl:when test="$date_end_008">
+ <xsl:value-of select="concat($date_008,'-',$date_end_008)" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$date_008" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </pz:metadata>
+ </xsl:if>
+
+
<xsl:for-each select="tmarc:d130">
<pz:metadata type="title-uniform">
<xsl:value-of select="tmarc:sa" />
</xsl:if>
</xsl:for-each>
+ <xsl:for-each select="tmarc:d876">
+ <xsl:if test="tmarc:sf">
+ <pz:metadata type="loan-period">
+ <xsl:value-of select="tmarc:sf" />
+ </pz:metadata>
+ </xsl:if>
+ </xsl:for-each>
+
<pz:metadata type="medium">
<xsl:value-of select="$vmedium" />
<xsl:if test="string-length($electronic) and $vmedium != 'electronic'">
var context = this;
var request = new pzHttpRequest(this.pz2String, this.errorHandler);
request.safeGet(
- { "command": "ping", "session": this.sessionID },
+ { "command": "ping", "session": this.sessionID, "windowid" : window.name },
function(data) {
if ( data.getElementsByTagName("status")[0]
.childNodes[0].nodeValue == "OK" ) {
else
var start = 0;
- var searchParams = {
- "command": "search",
- "query": this.currQuery,
- "session": this.sessionID
+ var searchParams = {
+ "command": "search",
+ "query": this.currQuery,
+ "session": this.sessionID,
+ "windowid" : window.name
};
if (filter !== undefined)
- searchParams["filter"] = filter;
+ searchParams["filter"] = filter;
// copy additional parmeters, do not overwrite
if (addParamsArr != undefined) {
var context = this;
var request = new pzHttpRequest(this.pz2String, this.errorHandler);
request.safeGet(
- { "command": "stat", "session": this.sessionID },
+ { "command": "stat", "session": this.sessionID, "windowid" : window.name },
function(data) {
if ( data.getElementsByTagName("stat") ) {
var activeClients =
"num": this.currentNum,
"sort": this.currentSort,
"block": 1,
- "type": this.showResponseType
+ "type": this.showResponseType,
+ "windowid" : window.name
},
function(data, type) {
var show = null;
var recordParams = {
"command": "record",
"session": this.sessionID,
- "id": this.currRecID
+ "id": this.currRecID,
+ "windowid" : window.name
};
this.currRecOffset = null;
{
"command": "termlist",
"session": this.sessionID,
- "name": this.termKeys
+ "name": this.termKeys,
+ "windowid" : window.name
},
function(data) {
if ( data.getElementsByTagName("termlist") ) {
var context = this;
var request = new pzHttpRequest(this.pz2String, this.errorHandler);
request.safeGet(
- { "command": "bytarget", "session": this.sessionID },
+ { "command": "bytarget", "session": this.sessionID, "windowid" : window.name},
function(data) {
if ( data.getElementsByTagName("status")[0]
.childNodes[0].nodeValue == "OK" ) {
-Subproject commit f7d7eb4b44b7fdad1942e32856d6afc2e6dcabda
+Subproject commit 96ff03f91b4539e315dadd50ab2564412c076394
Summary: Metasearcher
Name: pazpar2
-Version: 1.5.5
+Version: 1.5.6
Release: 1indexdata
License: GPL
Group: Applications/Internet
Vendor: Index Data ApS <info@indexdata.dk>
Source: pazpar2-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-root
-BuildRequires: libyaz4-devel
+BuildRequires: libyaz4-devel >= 4.2.0
Packager: Adam Dickmeiss <adam@indexdata.dk>
URL: http://www.indexdata.com/pazpar2
+Summary: pazpar2 daemon
+Requires: libyaz4
%description
Pazpar2 is a high-performance, user interface-independent, data
model-independent metasearching middleware featuring merging, relevance
ranking, record sorting, and faceted results.
-Summary: pazpar2 daemon
-Requires: libyaz4
-
%package -n pazpar2-js
Summary: pazpar2 JS
Group: Data
cp etc/settings/*.xml ${RPM_BUILD_ROOT}/etc/pazpar2/settings/
cp etc/*.xsl ${RPM_BUILD_ROOT}/etc/pazpar2/
mkdir -p ${RPM_BUILD_ROOT}/etc/rc.d/init.d
-install -m755 src/pazpar2.rpm.init ${RPM_BUILD_ROOT}/etc/rc.d/init.d/pazpar2
+install -m755 rpm/pazpar2.init ${RPM_BUILD_ROOT}/etc/rc.d/init.d/pazpar2
echo "Alias /pazpar2 /usr/share/pazpar2" >${RPM_BUILD_ROOT}/etc/pazpar2/ap2pazpar2-js.cfg
mkdir -p ${RPM_BUILD_ROOT}/etc/logrotate.d
-install -m644 src/pazpar2.rpm.logrotate ${RPM_BUILD_ROOT}/etc/logrotate.d/pazpar2
+install -m644 rpm/pazpar2.logrotate ${RPM_BUILD_ROOT}/etc/logrotate.d/pazpar2
%clean
rm -fr ${RPM_BUILD_ROOT}
--- /dev/null
+#!/bin/bash
+#
+# pazpar2 Startup script for Pazpar2
+#
+# chkconfig: 2345 85 15
+# description: Pazpar2 Metasearcher
+# processname: pazpar2
+# config: /etc/pazpar2/server.xml
+# config: /etc/sysconfig/pazpar2
+# pidfile: /var/run/pazpar2.pid
+
+# Source function library.
+OPTIONS="-l /var/log/pazpar2.log -f /etc/pazpar2/server.xml"
+. /etc/rc.d/init.d/functions
+
+if [ -f /etc/sysconfig/pazpar2 ]; then
+ . /etc/sysconfig/pazpar2
+fi
+
+# Path to the apachectl script, server binary, and short-form for messages.
+DAEMON=${DAEMON-/usr/sbin/pazpar2}
+prog=pazpar2
+pidfile=${PIDFILE-/var/run/pazpar2.pid}
+lockfile=${LOCKFILE-/var/lock/subsys/pazpar2}
+RETVAL=0
+
+start() {
+ echo -n $"Starting $prog: "
+ daemon --pidfile=${pidfile} $DAEMON $OPTIONS -D -p ${pidfile}
+ RETVAL=$?
+ echo
+ [ $RETVAL = 0 ] && touch ${lockfile}
+ return $RETVAL
+}
+
+stop() {
+ echo -n $"Stopping $prog: "
+ killproc -p ${pidfile} -d 10 $DAEMON
+ RETVAL=$?
+ echo
+ [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
+}
+reload() {
+ stop
+ start
+}
+
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ status)
+ status -p ${pidfile} $DAEMON
+ RETVAL=$?
+ ;;
+ restart)
+ stop
+ start
+ ;;
+ condrestart)
+ if [ -f ${pidfile} ] ; then
+ stop
+ start
+ fi
+ ;;
+ reload)
+ reload
+ ;;
+ configtest)
+ $DAEMON $OPTIONS -t
+ RETVAL=$?
+ ;;
+ *)
+ echo $"Usage: $prog {start|stop|restart|help|configtest}"
+ exit 1
+esac
+
+exit $RETVAL
--- /dev/null
+/var/log/pazpar2.log {
+ weekly
+ missingok
+ rotate 4
+ compress
+ delaycompress
+ notifempty
+ postrotate
+ if [ -f /var/run/pazpar2.pid ]; then
+ /sbin/service pazpar2 restart > /dev/null
+ fi
+ endscript
+}
sbin_PROGRAMS = pazpar2
noinst_PROGRAMS = pazpar2_play
-EXTRA_DIST = pazpar2.rpm.init pazpar2.rpm.logrotate
-
check_PROGRAMS = \
test_sel_thread \
test_normalize
record.h record.c reclists.c reclists.h \
relevance.c relevance.h termlists.c termlists.h \
normalize7bit.h normalize7bit.c \
- zeerex.c zeerex.h database.c database.h \
+ database.c database.h \
settings.h settings.c sel_thread.c sel_thread.h getaddrinfo.c \
charsets.c charsets.h \
client.c client.h connection.c connection.h host.h parameters.h \
* TODO Consider thread safety!!!
*
*/
-int client_report_facets(struct client *cl, ZOOM_resultset rs) {
- int facet_idx;
+void client_report_facets(struct client *cl, ZOOM_resultset rs)
+{
+ struct session_database *sdb = client_get_database(cl);
ZOOM_facet_field *facets = ZOOM_resultset_facets(rs);
- int facet_num;
- struct session *se = client_get_session(cl);
- facet_num = ZOOM_resultset_facets_size(rs);
- yaz_log(YLOG_DEBUG, "client_report_facets: %d", facet_num);
-
- for (facet_idx = 0; facet_idx < facet_num; facet_idx++) {
- const char *name = ZOOM_facet_field_name(facets[facet_idx]);
- size_t term_idx;
- size_t term_num = ZOOM_facet_field_term_count(facets[facet_idx]);
- for (term_idx = 0; term_idx < term_num; term_idx++ ) {
- int freq;
- const char *term = ZOOM_facet_field_get_term(facets[facet_idx], term_idx, &freq);
- if (term)
- add_facet(se, name, term, freq);
+
+ if (sdb && facets)
+ {
+ struct session *se = client_get_session(cl);
+ int facet_num = ZOOM_resultset_facets_size(rs);
+ struct setting *s;
+
+ for (s = sdb->settings[PZ_FACETMAP]; s; s = s->next)
+ {
+ const char *p = strchr(s->name + 3, ':');
+ if (p && p[1] && s->value && s->value[0])
+ {
+ int facet_idx;
+ p++; /* p now holds logical facet name */
+ for (facet_idx = 0; facet_idx < facet_num; facet_idx++)
+ {
+ const char *native_name =
+ ZOOM_facet_field_name(facets[facet_idx]);
+ if (native_name && !strcmp(s->value, native_name))
+ {
+ size_t term_idx;
+ size_t term_num =
+ ZOOM_facet_field_term_count(facets[facet_idx]);
+ for (term_idx = 0; term_idx < term_num; term_idx++ )
+ {
+ int freq;
+ const char *term =
+ ZOOM_facet_field_get_term(facets[facet_idx],
+ term_idx, &freq);
+ if (term)
+ add_facet(se, p, term, freq);
+ }
+ break;
+ }
+ }
+ }
}
}
-
- return 0;
}
static void ingest_raw_record(struct client *cl, ZOOM_record rec)
}
}
-static int client_set_facets_request(struct client *cl, ZOOM_connection link)
+static void client_set_facets_request(struct client *cl, ZOOM_connection link)
{
struct session_database *sdb = client_get_database(cl);
- const char *opt_facet_term_sort = session_setting_oneval(sdb, PZ_TERMLIST_TERM_SORT);
- const char *opt_facet_term_count = session_setting_oneval(sdb, PZ_TERMLIST_TERM_COUNT);
- /* Future record filtering on target */
- /* const char *opt_facet_record_filter = session_setting_oneval(sdb, PZ_RECORDFILTER); */
+ WRBUF w = wrbuf_alloc();
+
+ struct setting *s;
- /* Disable when no count is set */
- /* TODO Verify: Do we need to reset the ZOOM facets if a ZOOM Connection is being reused??? */
- if (opt_facet_term_count && *opt_facet_term_count)
+ for (s = sdb->settings[PZ_FACETMAP]; s; s = s->next)
{
- int index = 0;
- struct session *session = client_get_session(cl);
- struct conf_service *service = session->service;
- int num = service->num_metadata;
- WRBUF wrbuf = wrbuf_alloc();
- yaz_log(YLOG_DEBUG, "Facet settings, sort: %s count: %s",
- opt_facet_term_sort, opt_facet_term_count);
- for (index = 0; index < num; index++)
+ const char *p = strchr(s->name + 3, ':');
+ if (!p)
{
- struct conf_metadata *conf_meta = &service->metadata[index];
- if (conf_meta->termlist)
- {
- if (wrbuf_len(wrbuf))
- wrbuf_puts(wrbuf, ", ");
- wrbuf_printf(wrbuf, "@attr 1=%s", conf_meta->name);
-
- if (opt_facet_term_sort && *opt_facet_term_sort)
- wrbuf_printf(wrbuf, " @attr 2=%s", opt_facet_term_sort);
- wrbuf_printf(wrbuf, " @attr 3=%s", opt_facet_term_count);
- }
+ yaz_log(YLOG_WARN, "Malformed facetmap name: %s", s->name);
}
- if (wrbuf_len(wrbuf))
+ else if (s->value && s->value[0])
{
- yaz_log(YLOG_LOG, "Setting ZOOM facets option: %s", wrbuf_cstr(wrbuf));
- ZOOM_connection_option_set(link, "facets", wrbuf_cstr(wrbuf));
- return 1;
+ wrbuf_puts(w, "@attr 1=");
+ yaz_encode_pqf_term(w, s->value, strlen(s->value));
+ if (s->next)
+ wrbuf_puts(w, ",");
}
}
- return 0;
+ yaz_log(YLOG_LOG, "using facets str: %s", wrbuf_cstr(w));
+ ZOOM_connection_option_set(link, "facets",
+ wrbuf_len(w) ? wrbuf_cstr(w) : 0);
+ wrbuf_destroy(w);
}
-int client_has_facet(struct client *cl, const char *name) {
- ZOOM_facet_field facet_field;
- if (!cl || !cl->resultset || !name) {
- return 0;
- }
- facet_field = ZOOM_resultset_get_facet_field(cl->resultset, name);
- if (facet_field) {
- return 1;
+int client_has_facet(struct client *cl, const char *name)
+{
+ struct session_database *sdb = client_get_database(cl);
+ struct setting *s;
+
+ for (s = sdb->settings[PZ_FACETMAP]; s; s = s->next)
+ {
+ const char *p = strchr(s->name + 3, ':');
+ if (p && !strcmp(name, p + 1))
+ return 1;
}
return 0;
}
-
void client_start_search(struct client *cl)
{
struct session_database *sdb = client_get_database(cl);
return result;
}
-int connections_count() {
+int connections_count(void)
+{
return connection_use(0);
}
#include "pazpar2_config.h"
#include "settings.h"
#include "http.h"
-#include "zeerex.h"
#include "database.h"
#include <sys/types.h>
YAZ_MUTEX mutex;
};
-static xmlDoc *get_explain_xml(struct conf_targetprofiles *targetprofiles,
- const char *id)
-{
- struct stat st;
- char *dir;
- char path[256];
- char ide[256];
- if (targetprofiles->type != Targetprofiles_local)
- {
- yaz_log(YLOG_FATAL, "Only supports local type");
- return 0;
- }
- dir = targetprofiles->src;
- urlencode(id, ide);
- sprintf(path, "%s/%s", dir, ide);
- if (!stat(path, &st))
- return xmlParseFile(path);
- else
- return 0;
-}
-
// Create a new host structure for hostport
static struct host *create_host(const char *hostport, iochan_man_t iochan_man)
{
{
struct database *db;
struct zr_explain *explain = 0;
- xmlDoc *doc = 0;
- if (service->targetprofiles
- && (doc = get_explain_xml(service->targetprofiles, id)))
- {
- explain = zr_read_xml(service->nmem, xmlDocGetRootElement(doc));
- if (!explain)
- return 0;
- }
db = new_database(id, service->nmem);
db->explain = explain;
db->next = service->databases;
#ifdef HAVE_MALLINFO
#include <malloc.h>
-void print_meminfo(WRBUF wrbuf) {
-
+void print_meminfo(WRBUF wrbuf)
+{
struct mallinfo minfo;
minfo = mallinfo();
wrbuf_printf(wrbuf, " <memory>\n"
g_http_sessions += delta;
sessions = g_http_sessions;
yaz_mutex_leave(g_http_session_mutex);
- yaz_log(YLOG_DEBUG, "%s sesions=%d", delta == 0 ? "" : (delta > 0 ? "INC" : "DEC"), sessions);
+ yaz_log(YLOG_DEBUG, "%s sessions=%d", delta == 0 ? "" : (delta > 0 ? "INC" : "DEC"), sessions);
return sessions;
}
yaz_log(http_sessions->log_level, "%p HTTP Session %u destroyed", s, s->session_id);
yaz_mutex_enter(http_sessions->mutex);
/* only if http_session has no active http sessions on it can be destroyed */
- if (s->destroy_counter == s->activity_counter) {
+ if (s->destroy_counter == s->activity_counter)
+ {
struct http_session **p = 0;
must_destroy = 1;
for (p = &http_sessions->session_list; *p; p = &(*p)->next)
}
// Call after use of locate_session, in order to increment the destroy_counter
-static void release_session(struct http_channel *c, struct http_session *session) {
+static void release_session(struct http_channel *c,
+ struct http_session *session)
+{
http_sessions_t http_sessions = c->http_sessions;
yaz_mutex_enter(http_sessions->mutex);
if (session)
xmlFreeDoc(doc);
}
- if (process_settings(s->psession, rq, rs) < 0) {
- release_session(c,s);
+ if (process_settings(s->psession, rq, rs) < 0)
+ {
+ release_session(c, s);
return;
}
rs->payload = HTTP_COMMAND_RESPONSE_PREFIX "<settings><status>OK</status></settings>";
http_send_response(c);
- release_session(c,s);
+ release_session(c, s);
}
// Compares two hitsbytarget nodes by hitcount
struct http_response *rs = c->response;
struct http_request *rq = c->request;
struct http_session *s = locate_session(c);
- struct termlist_score **p;
- int len;
- int i;
const char *name = http_argbyname(rq, "name");
const char *nums = http_argbyname(rq, "num");
int num = 15;
int status;
- WRBUF debug_log = wrbuf_alloc();
+ WRBUF debug_log = 0;
if (!s)
return;
if (nums)
num = atoi(nums);
+ debug_log = wrbuf_alloc();
+
wrbuf_rewind(c->wrbuf);
wrbuf_puts(c->wrbuf, "<termlist>\n");
wrbuf_puts(c->wrbuf, "<list name=\"");
wrbuf_xmlputs(c->wrbuf, tname);
wrbuf_puts(c->wrbuf, "\">\n");
- if (!strcmp(tname, "xtargets")) {
+ if (!strcmp(tname, "xtargets"))
+ {
int targets = targets_termlist(c->wrbuf, s->psession, num, c->nmem);
wrbuf_printf(debug_log, " xtargets: %d", targets);
}
else
{
- p = termlist(s->psession, tname, &len);
+ int len;
+ struct termlist_score **p =
+ get_termlist_score(s->psession, tname, &len);
if (p && len)
wrbuf_printf(debug_log, " %s: %d", tname, len);
- if (p) {
- for (i = 0; i < len && i < num; i++){
+ if (p)
+ {
+ int i;
+ for (i = 0; i < len && i < num; i++)
+ {
// prevnt sending empty term elements
if (!p[i]->term || !p[i]->term[0])
continue;
wrbuf_puts(c->wrbuf, "<name>");
wrbuf_xmlputs(c->wrbuf, p[i]->term);
wrbuf_puts(c->wrbuf, "</name>");
-
+
wrbuf_printf(c->wrbuf,
"<frequency>%d</frequency>",
p[i]->frequency);
wrbuf_puts(c->wrbuf, "</term>\n");
- }
+ }
}
}
wrbuf_puts(c->wrbuf, "</list>\n");
wrbuf_destroy(debug_log);
rs->payload = nmem_strdup(rq->channel->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
- release_session(c,s);
+ release_session(c, s);
}
size_t session_get_memory_status(struct session *session);
wrbuf_printf(c->wrbuf, "<session_nmem>%zu</session_nmem>\n", session_nmem);
}
-static void cmd_session_status(struct http_channel *c) {
+static void cmd_session_status(struct http_channel *c)
+{
struct http_response *rs = c->response;
struct http_session *s = locate_session(c);
if (!s)
wrbuf_puts(c->wrbuf, "</sessionstatus>\n");
rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
- release_session(c,s);
+ release_session(c, s);
}
/* struct http_session *p; */
/*
yaz_mutex_enter(http_sessions->mutex);
- for (p = http_sessions->session_list; p; p = p->next) {
+ for (p = http_sessions->session_list; p; p = p->next)
+ {
p->activity_counter++;
wrbuf_puts(c->wrbuf, "<session-status>\n");
wrbuf_printf(c->wrbuf, "<id>%s</id>\n", p->session_id);
wrbuf_puts(c->wrbuf, "</bytarget>");
rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
- release_session(c,s);
+ release_session(c, s);
}
static void write_metadata(WRBUF w, struct conf_service *service,
if (block)
{
- if (!strcmp(block, "preferred") && !session_is_preferred_clients_ready(s->psession) && reclist_get_num_records(s->psession->reclist) == 0) {
+ if (!strcmp(block, "preferred") && !session_is_preferred_clients_ready(s->psession) && reclist_get_num_records(s->psession->reclist) == 0)
+ {
// if there is already a watch/block. we do not block this one
if (session_set_watch(s->psession, SESSION_WATCH_SHOW_PREF,
show_records_ready, c, c) != 0)
yaz_log(c->http_sessions->log_level,
"%p Session %u: Blocking on cmd_show. Waiting for preferred targets", s, s->session_id);
}
- release_session(c,s);
+ release_session(c, s);
return;
}
{
yaz_log(c->http_sessions->log_level, "%p Session %u: Blocking on cmd_show", s, s->session_id);
}
- release_session(c,s);
+ release_session(c, s);
return;
}
}
show_records(c, status);
- release_session(c,s);
+ release_session(c, s);
}
static void cmd_ping(struct http_channel *c)
release_session(c, s);
}
-static int utf_8_valid(const char *str)
-{
- yaz_iconv_t cd = yaz_iconv_open("utf-8", "utf-8");
- if (cd)
- {
- /* check that query is UTF-8 encoded */
- char *inbuf = (char *) str; /* we know iconv does not alter this */
- size_t inbytesleft = strlen(inbuf);
-
- size_t outbytesleft = strlen(inbuf) + 10;
- char *out = xmalloc(outbytesleft);
- char *outbuf = out;
- size_t r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
-
- /* if OK, try flushing the rest */
- if (r != (size_t) (-1))
- r = yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft);
- yaz_iconv_close(cd);
- xfree(out);
- if (r == (size_t) (-1))
- return 0;
- }
- return 1;
-}
-
static void cmd_search(struct http_channel *c)
{
struct http_request *rq = c->request;
if (!query)
{
error(rs, PAZPAR2_MISSING_PARAMETER, "query");
- release_session(c,s);
+ release_session(c, s);
return;
}
- if (!utf_8_valid(query))
+ if (!yaz_utf8_check(query))
{
error(rs, PAZPAR2_MALFORMED_PARAMETER_ENCODING, "query");
- release_session(c,s);
+ release_session(c, s);
return;
}
code = search(s->psession, query, startrecs, maxrecs, filter, &addinfo);
if (code)
{
error(rs, code, addinfo);
- release_session(c,s);
+ release_session(c, s);
return;
}
rs->payload = HTTP_COMMAND_RESPONSE_PREFIX "<search><status>OK</status></search>";
http_send_response(c);
- release_session(c,s);
+ release_session(c, s);
}
clients = session_active_clients(s->psession);
statistics(s->psession, &stat);
- if (stat.num_clients > 0) {
+ if (stat.num_clients > 0)
+ {
progress = (stat.num_clients - clients) / (float)stat.num_clients;
}
wrbuf_puts(c->wrbuf, "</stat>");
rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
- release_session(c,s);
+ release_session(c, s);
}
static void cmd_info(struct http_channel *c)
+++ /dev/null
-#!/bin/bash
-#
-# pazpar2 Startup script for Pazpar2
-#
-# chkconfig: - 85 15
-# description: Pazpar2 Metasearcher
-# processname: pazpar2
-# config: /etc/pazpar2/server.xml
-# config: /etc/sysconfig/pazpar2
-# pidfile: /var/run/pazpar2.pid
-
-# Source function library.
-OPTIONS="-l /var/log/pazpar2.log -f /etc/pazpar2/server.xml"
-. /etc/rc.d/init.d/functions
-
-if [ -f /etc/sysconfig/pazpar2 ]; then
- . /etc/sysconfig/pazpar2
-fi
-
-# Path to the apachectl script, server binary, and short-form for messages.
-DAEMON=${DAEMON-/usr/sbin/pazpar2}
-prog=pazpar2
-pidfile=${PIDFILE-/var/run/pazpar2.pid}
-lockfile=${LOCKFILE-/var/lock/subsys/pazpar2}
-RETVAL=0
-
-start() {
- echo -n $"Starting $prog: "
- daemon --pidfile=${pidfile} $DAEMON $OPTIONS -D -p ${pidfile}
- RETVAL=$?
- echo
- [ $RETVAL = 0 ] && touch ${lockfile}
- return $RETVAL
-}
-
-stop() {
- echo -n $"Stopping $prog: "
- killproc -p ${pidfile} -d 10 $DAEMON
- RETVAL=$?
- echo
- [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
-}
-reload() {
- stop
- start
-}
-
-# See how we were called.
-case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- status)
- status -p ${pidfile} $DAEMON
- RETVAL=$?
- ;;
- restart)
- stop
- start
- ;;
- condrestart)
- if [ -f ${pidfile} ] ; then
- stop
- start
- fi
- ;;
- reload)
- reload
- ;;
- configtest)
- $DAEMON $OPTIONS -t
- RETVAL=$?
- ;;
- *)
- echo $"Usage: $prog {start|stop|restart|help|configtest}"
- exit 1
-esac
-
-exit $RETVAL
+++ /dev/null
-/var/log/pazpar2.log {
- weekly
- missingok
- rotate 4
- compress
- delaycompress
- notifempty
- postrotate
- if [ -f /var/run/pazpar2.pid ]; then
- /sbin/service pazpar2 restart > /dev/null
- fi
- endscript
-}
static char *parse_settings(struct conf_config *config,
NMEM nmem, xmlNode *node);
-static struct conf_targetprofiles *parse_targetprofiles(NMEM nmem,
- xmlNode *node);
-
static void conf_metadata_assign(NMEM nmem,
struct conf_metadata * metadata,
const char *name,
service->next = 0;
service->settings = 0;
service->databases = 0;
- service->targetprofiles = 0;
service->server = server;
service->session_timeout = 60; /* default session timeout */
service->z3950_session_timeout = 180;
}
else if (!strcmp((const char *) n->name, "settings"))
got_settings++;
- else if (!strcmp((const char *) n->name, (const char *) "targetprofiles"))
- {
- if (service->targetprofiles)
- {
- yaz_log(YLOG_FATAL, "Can't repeat targetprofiles");
- return 0;
- }
- if (!(service->targetprofiles =
- parse_targetprofiles(service->nmem, n)))
- return 0;
- }
else if (!strcmp((const char *) n->name, "relevance"))
{
if (service->relevance_pct)
return w;
}
-static struct conf_targetprofiles *parse_targetprofiles(NMEM nmem,
- xmlNode *node)
-{
- struct conf_targetprofiles *r = nmem_malloc(nmem, sizeof(*r));
- xmlChar *type = xmlGetProp(node, (xmlChar *) "type");
- xmlChar *src = xmlGetProp(node, (xmlChar *) "src");
-
- memset(r, 0, sizeof(*r));
-
- if (type)
- {
- if (!strcmp((const char *) type, "local"))
- r->type = Targetprofiles_local;
- else
- {
- yaz_log(YLOG_FATAL, "Unknown targetprofile type");
- return 0;
- }
- }
- else
- {
- yaz_log(YLOG_FATAL, "Must specify type for targetprofile");
- return 0;
- }
-
- if (src)
- r->src = nmem_strdup(nmem, (const char *) src);
- else
- {
- yaz_log(YLOG_FATAL, "Must specify src in targetprofile");
- return 0;
- }
- xmlFree(type);
- xmlFree(src);
- return r;
-}
-
struct conf_service *locate_service(struct conf_server *server,
const char *service_id)
{
pp2_charset_t facet_pct;
struct database *databases;
- struct conf_targetprofiles *targetprofiles;
struct conf_server *server;
};
database_hosts_t database_hosts;
};
-struct conf_targetprofiles
-{
- enum {
- Targetprofiles_local
- } type;
- char *src;
-};
-
struct conf_config *config_create(const char *fname, int verbose);
void config_destroy(struct conf_config *config);
void config_process_events(struct conf_config *config);
return res == 0;
}
-
-
enum pazpar2_error_code search(struct session *se,
const char *query,
const char *startrecs, const char *maxrecs,
return res;
}
-struct termlist_score **termlist(struct session *se, const char *name, int *num)
+struct termlist_score **get_termlist_score(struct session *se,
+ const char *name, int *num)
{
int i;
struct termlist_score **tl = 0;
// construct facets ... unless the client already has reported them
if (ser_md->termlist && !client_has_facet(cl, (char *) type))
{
-
if (ser_md->type == Metadata_type_year)
{
char year[64];
struct record_cluster **prev_r,
struct record_cluster **next_r);
void show_single_stop(struct session *s, struct record_cluster *rec);
-struct termlist_score **termlist(struct session *s, const char *name, int *num);
+struct termlist_score **get_termlist_score(struct session *s,
+ const char *name, int *num);
int session_set_watch(struct session *s, int what, session_watchfun fun, void *data, struct http_channel *c);
int session_active_clients(struct session *s);
int session_is_preferred_clients_ready(struct session *s);
"pz:negotiation_charset",
"pz:max_connections",
"pz:reuse_connections", /* PZ_REUSE_CONNECTION */
- "pz:termlist_term_sort", /* PZ_TERMLIST_TERM_SORT */
- "pz:termlist_term_count", /* PZ_TERMLIST_TERM_COUNT */
"pz:termlist_term_factor", /* PZ_TERMLIST_TERM_FACTOR*/
"pz:preferred", /* PZ_PREFERRED */
"pz:extra_args", /* PZ_EXTRA_ARGS */
"pz:query_syntax", /* PZ_QUERY_SYNTAX */
"pz:option_recordfilter", /* PZ_OPTION_RECORDFILTER */
-
+ "pz:facetmap:", /* PZ_FACETMAP */
0
};
#define PZ_NEGOTIATION_CHARSET 21
#define PZ_MAX_CONNECTIONS 22
#define PZ_REUSE_CONNECTIONS 23
-#define PZ_TERMLIST_TERM_SORT 24
-#define PZ_TERMLIST_TERM_COUNT 25
-#define PZ_TERMLIST_TERM_FACTOR 26
-#define PZ_PREFERRED 27
-#define PZ_EXTRA_ARGS 28
-#define PZ_QUERY_SYNTAX 29
-#define PZ_OPTION_RECORDFILTER 30
-#define PZ_MAX_EOF 31
+#define PZ_TERMLIST_TERM_FACTOR 24
+#define PZ_PREFERRED 25
+#define PZ_EXTRA_ARGS 26
+#define PZ_QUERY_SYNTAX 27
+#define PZ_OPTION_RECORDFILTER 28
+#define PZ_FACETMAP 29
+#define PZ_MAX_EOF 30
struct setting
{
+++ /dev/null
-/* This file is part of Pazpar2.
- Copyright (C) 2006-2011 Index Data
-
-Pazpar2 is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-Pazpar2 is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-*/
-
-// Reads Zeerex records into a set of structures
-
-#include <string.h>
-
-#include <yaz/yaz-util.h>
-
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-#include "zeerex.h"
-
-// Replace this with something that will take a callback
-static void fail(const char *s, xmlNode *n)
-{
- yaz_log(YLOG_WARN, "Zeerex Err '%s'; elem '%s/%s'",
- s, n->parent->name, n->name);
-}
-
-// returns an nmem-allocated string if attr is present, or null
-static char *attrtostr(NMEM m, xmlNode *n, const char *name)
-{
- char *s = (char *) xmlGetProp(n, (xmlChar *) name);
- if (s)
- {
- char *r = nmem_strdup(m, s);
- xmlFree(s);
- return r;
- }
- else
- return 0;
-}
-
-static int attrtoint(xmlNode *n, const char *name)
-{
- char *s = (char *)xmlGetProp(n, (xmlChar *) name);
- if (s)
- {
- int val = atoi(s);
- xmlFree(s);
- return val;
- }
- else
- return 0;
-}
-
-static Zr_bool attrtobool(xmlNode *node, const char *name)
-{
- char *v = (char *) xmlGetProp(node, (xmlChar *) name);
- if (v)
- {
- Zr_bool res;
- if (!strcmp(v, "true"))
- res = Zr_bool_true;
- else if (!strcmp(v, "false"))
- res = Zr_bool_false;
- else
- res = Zr_bool_unknown;
- xmlFree(v);
- return res;
- }
- else
- return Zr_bool_unknown;
-}
-
-static char *valuetostr(NMEM m, xmlNode *n)
-{
- char *val = (char *) xmlNodeGetContent(n);
- if (val)
- {
- char *res = nmem_strdup(m, val);
- xmlFree(val);
- return res;
- }
- else
- return 0;
-}
-
-static int valuetoint(xmlNode *n)
-{
- char *s = (char *) xmlNodeGetContent(n);
- if (s)
- {
- int res = atoi(s);
- xmlFree(s);
- return res;
- }
- else
- return 0;
-}
-
-static Zr_langstr *findlangstr(NMEM m, xmlNode *node, const char *name)
-{
- xmlNode *n;
- Zr_langstr *res = 0;
- for (n = node->children; n; n = n->next)
- {
- if (n->type == XML_ELEMENT_NODE
- && !strcmp((const char *) n->name, name))
- {
- Zr_langstr *new = nmem_malloc(m, sizeof(*new));
- memset(new, 0, sizeof(*new));
- new->primary = attrtobool(n, "primary");
- new->lang = attrtostr(m, n, "lang");
- new->str = valuetostr(m, n);
- new->next = res;
- res = new;
- }
- }
- return res;
-}
-
-const char *zr_langstr(Zr_langstr *s, const char *lang)
-{
- Zr_langstr *p;
- for (p = s; p; p = p->next)
- if ((!lang && p->primary == Zr_bool_true) ||
- (lang && p->lang && !strcmp(lang, p->lang)))
- return p->str;
- return s->str;
-}
-
-static struct zr_authentication *authentication(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_authentication *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
- r->type = attrtostr(m, node, "type");
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "open"))
- r->open = valuetostr(m, n);
- else if (!strcmp((const char *) n->name, "user"))
- r->user = valuetostr(m, n);
- else if (!strcmp((const char *) n->name, "group"))
- r->group = valuetostr(m, n);
- else if (!strcmp((const char *) n->name, "password"))
- r->password = valuetostr(m, n);
- else
- {
- fail("Unexpected element", n);
- return 0;
- }
- }
- return r;
-}
-
-
-static struct zr_serverInfo *serverInfo(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_serverInfo *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
-
- r->protocol = attrtostr(m, node, "protocol");
- r->version = attrtostr(m, node, "version");
- r->transport = attrtostr(m, node, "transport");
- r->method = attrtostr(m, node, "method");
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "host"))
- r->host = valuetostr(m, n);
- else if (!strcmp((const char *) n->name, "port"))
- r->port = valuetoint(n);
- else if (!strcmp((const char *) n->name, "database"))
- r->database = valuetostr(m, n);
- else if (!strcmp((const char *) n->name, "authentication"))
- {
- if (!(r->authentication = authentication(m, n)))
- return 0;
- }
- else
- {
- fail("Unexpected element", n);
- return 0;
- }
- }
- return r;
-}
-
-static struct zr_agent *agent(NMEM m, xmlNode *node)
-{
- struct zr_agent *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
- r->type = attrtostr(m, node, "type");
- r->identifier = attrtostr(m, node, "identifier");
- r->value = valuetostr(m, node);
- return r;
-}
-
-static struct zr_implementation *implementation(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_implementation *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
- r->identifier = attrtostr(m, node, "identifier");
- r->version = attrtostr(m, node, "version");
- r->title = findlangstr(m, node, "title");
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "agent"))
- {
- struct zr_agent *ag = agent(m, node);
- if (!ag)
- return 0;
- ag->next = r->agents;
- r->agents = ag;
- }
- }
- return r;
-}
-
-struct zr_databaseInfo *databaseInfo(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_databaseInfo *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
-
- r->title = findlangstr(m, node, "title");
- r->description = findlangstr(m, node, "description");
- r->history = findlangstr(m, node, "history");
- r->extent = findlangstr(m, node, "extent");
- r->restrictions = findlangstr(m, node, "restrictions");
- r->langUsage = findlangstr(m, node, "langUsage");
-
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "agents"))
- {
- xmlNode *n2;
- for (n2 = n->children; n2; n2 = n2->next)
- {
- if (n2->type != XML_ELEMENT_NODE)
- continue;
- if (strcmp((const char *) n2->name, "agent"))
- continue;
- else
- {
- struct zr_agent *ag = agent(m, n2);
- if (!ag)
- return 0;
- ag->next = r->agents;
- r->agents = ag;
- }
- }
- }
- else if (!strcmp((const char *) n->name, "implementation"))
- {
- if (!(r->implementation = implementation(m, n)))
- return 0;
- }
- else if (!strcmp((const char *) n->name, "links"))
- {
- xmlNode *n2;
- for (n2 = n->children; n2; n2 = n2->next)
- {
- if (n2->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n2->name, "link"))
- continue;
- else
- {
- struct zr_link *li = nmem_malloc(m, sizeof(*li));
- memset(li, 0, sizeof(*li));
- li->type = attrtostr(m, n2, "type");
- li->value = valuetostr(m, n2);
- li->next = r->links;
- r->links = li;
- }
- }
- }
- else if (!strcmp((const char *) n->name, "history") && !r->lastUpdate)
- r->lastUpdate = attrtostr(m, n, "lastUpdate");
- else if (!strcmp((const char *) n->name, "extent") && !r->numberOfRecords)
- r->numberOfRecords = attrtoint(n, "numberOfRecords");
- else if (!strcmp((const char *) n->name, "langUsage") && !r->codes)
- r->codes = attrtostr(m, n, "codes");
- }
- return r;
-}
-
-struct zr_metaInfo *metaInfo(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_metaInfo *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
-
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "dateModified"))
- r->dateModified = valuetostr(m, n);
- else if (!strcmp((const char *) n->name, "dateAggregated"))
- r->dateAggregated = valuetostr(m, n);
- else if (!strcmp((const char *) n->name, "aggregatedFrom"))
- r->aggregatedFrom = valuetostr(m, n);
- else
- {
- fail("Unexpected element", n);
- return 0;
- }
- }
- return r;
-}
-
-struct zr_set *set(NMEM m, xmlNode *node)
-{
- struct zr_set *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
- r->name = attrtostr(m, node, "name");
- r->identifier = attrtostr(m, node, "identifier");
- r->title = findlangstr(m, node, "title");
- return r;
-}
-
-struct zr_attr *attr(NMEM m, xmlNode *node)
-{
- struct zr_attr *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
- r->type = attrtoint(node, "type");
- r->set = attrtostr(m, node, "set");
- return r;
-}
-
-static struct zr_map *map(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_map *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
-
- r->lang = attrtostr(m, node, "lang");
- r->primary = attrtobool(node, "primary");
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "name"))
- {
- r->set = attrtostr(m, n, "set");
- r->name = valuetostr(m, n);
- }
- else if (!strcmp((const char *) n->name, "attr"))
- {
- struct zr_attr *new = attr(m, n);
- if (!new)
- return 0;
- new->next = r->attrs;
- r->attrs = new;
- }
- else
- {
- fail("Unexpected element", n);
- return 0;
- }
- }
- return r;
-}
-
-static Zr_setting *findsetting(NMEM m, xmlNode *node, char *name)
-{
- static Zr_setting *r = 0; /* thread pr */
- xmlNode *n;
- for (n = node->children; n; n = n->next)
- {
- if (node->type == XML_ELEMENT_NODE && !strcmp((const char *) n->name, name))
- {
- xmlNode *n2;
- struct zr_setting *new = nmem_malloc(m, sizeof(*new));
- memset(new, 0, sizeof(*new));
- new->type = attrtostr(m, n, "type");
- for (n2 = n->children; n2; n2 = n2->next)
- {
- if (n2->type == XML_ELEMENT_NODE && !strcmp((const char *) n2->name, "map"))
- {
- new->map = map(m, n2);
- if (!new)
- return 0;
- break;
- }
- }
- if (!new->map)
- new->value = (char *) xmlNodeGetContent(n);
- new->next = r;
- r = new;
- }
- }
- return r;
-}
-
-static struct zr_configInfo *configInfo(NMEM m, xmlNode *node)
-{
- struct zr_configInfo *r = nmem_malloc(m, sizeof(*r));
-
- r->defaultv = findsetting(m, node, "default");
- r->setting = findsetting(m, node, "setting");
- r->supports = findsetting(m, node, "supports");
- return r;
-}
-
-static struct zr_index *parse_index(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_index *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
-
- r->search = attrtobool(node, "search");
- r->scan = attrtobool(node, "scan");
- r->sort = attrtobool(node, "sort");
- r->id = attrtostr(m, node, "id");
- r->title = findlangstr(m, node, "title");
-
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "map"))
- {
- struct zr_map *new = map(m, n);
- if (!new)
- return 0;
- new->next = r->maps;
- r->maps = new;
- }
- else if (!strcmp((const char *) n->name, "configInfo"))
- {
- if (!(r->configInfo = configInfo(m, n)))
- return 0;
- }
- else if (strcmp((const char *) n->name, "title"))
- {
- fail("Unknown child element", n);
- return 0;
- }
- }
- return r;
-}
-
-static struct zr_sortKeyword *sortKeyword(NMEM m, xmlNode *node)
-{
- struct zr_sortKeyword *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
- r->value = valuetostr(m, node);
- return r;
-}
-
-static struct zr_indexInfo *indexInfo(NMEM m , xmlNode *node)
-{
- xmlNode *n;
- struct zr_indexInfo *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
-
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "set"))
- {
- struct zr_set *new = set(m, n);
- if (!new)
- return 0;
- new->next = r->sets;
- r->sets = new;
- }
- else if (!strcmp((const char *) n->name, "index"))
- {
- struct zr_index *new = parse_index(m, n);
- if (!new)
- return 0;
- new->next = r->indexes;
- r->indexes = new;
- }
- else if (!strcmp((const char *) n->name, "sortKeyword"))
- {
- struct zr_sortKeyword *new = sortKeyword(m, n);
- if (!new)
- return 0;
- new->next = r->sortKeywords;
- r->sortKeywords = new;
- }
- else if (!strcmp((const char *) n->name, "sortKeyword"))
- {
- if (!(r->configInfo = configInfo(m, n)))
- return 0;
- }
- else
- {
- fail("Unknown child element", n);
- return 0;
- }
- }
- return r;
-}
-
-static struct zr_elementSet *elementSet(NMEM m, xmlNode *node)
-{
- struct zr_elementSet *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
- r->name = attrtostr(m, node, "name");
- r->identifier = attrtostr(m, node, "identifier");
- r->title = findlangstr(m, node, "title");
- return r;
-}
-
-static struct zr_recordSyntax *recordSyntax(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_recordSyntax *r = nmem_malloc(m, sizeof(*r));
- struct zr_elementSet **elementp = &r->elementSets;
-
- memset(r, 0, sizeof(*r));
- r->name = attrtostr(m, node, "name");
- r->identifier = attrtostr(m, node, "identifier");
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "elementSet"))
- {
- if (!(*elementp = elementSet(m, n)))
- return 0;
- elementp = &(*elementp)->next;
- }
- else
- {
- fail("Unknown child element", n);
- return 0;
- }
- }
- return r;
-}
-
-static struct zr_recordInfo *recordInfo(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_recordInfo *r = nmem_malloc(m, sizeof(*r));
- struct zr_recordSyntax **syntaxp = &r->recordSyntaxes;
-
- memset(r, 0, sizeof(*r));
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "recordSyntax"))
- {
- if (!(*syntaxp = recordSyntax(m, n)))
- return 0;
- syntaxp = &(*syntaxp)->next;
- }
- else
- {
- fail("Unknown child element", n);
- return 0;
- }
- }
- return r;
-}
-
-
-static struct zr_schema *schema(NMEM m, xmlNode *node)
-{
- struct zr_schema *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
-
- r->name = attrtostr(m, node, "name");
- r->identifier = attrtostr(m, node, "identifier");
- r->retrieve = attrtobool(node, "retrieve");
- r->sort = attrtobool(node, "sort");
- r->location = attrtostr(m, node, "location");
- r->title = findlangstr(m, node, "title");
- return r;
-}
-
-static struct zr_schemaInfo *schemaInfo(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_schemaInfo *r = nmem_malloc(m, sizeof(*r));
- struct zr_schema **schemap = &r->schemas;
-
- memset(r, 0, sizeof(*r));
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "schema"))
- {
- if (!(*schemap = schema(m, n)))
- return 0;
- schemap = &(*schemap)->next;
- }
- else
- {
- fail("Unknown child element", n);
- return 0;
- }
- }
- return r;
-}
-
-static struct zr_explain *explain(NMEM m, xmlNode *node)
-{
- xmlNode *n;
- struct zr_explain *r = nmem_malloc(m, sizeof(*r));
- memset(r, 0, sizeof(*r));
-
- for (n = node->children; n; n = n->next)
- {
- if (n->type != XML_ELEMENT_NODE)
- continue;
- if (!strcmp((const char *) n->name, "serverInfo"))
- {
- if (!(r->serverInfo = serverInfo(m, n)))
- return 0;
- }
- else if (!strcmp((const char *) n->name, "databaseInfo"))
- {
- if (!(r->databaseInfo = databaseInfo(m, n)))
- return 0;
- }
- else if (!strcmp((const char *) n->name, "metaInfo"))
- {
- if (!(r->metaInfo = metaInfo(m, n)))
- return 0;
- }
- else if (!strcmp((const char *) n->name, "indexInfo"))
- {
- if (!(r->indexInfo = indexInfo(m, n)))
- return 0;
- }
- else if (!strcmp((const char *) n->name, "recordInfo"))
- {
- if (!(r->recordInfo = recordInfo(m, n)))
- return 0;
- }
- else if (!strcmp((const char *) n->name, "schemaInfo"))
- {
- if (!(r->schemaInfo = schemaInfo(m, n)))
- return 0;
- }
- else if (!strcmp((const char *) n->name, "configInfo"))
- {
- if (!(r->configInfo = configInfo(m, n)))
- return 0;
- }
- else if (!strcmp((const char *) n->name, "status"))
- continue;
- else
- {
- fail("Unknown child element of root node", n);
- return 0;
- }
- }
- return r;
-}
-
-struct zr_explain *zr_read_xml(NMEM m, xmlNode *n)
-{
- return explain(m, n);
-}
-
-struct zr_explain *zr_read_file(NMEM m, const char *fn)
-{
- xmlDoc *doc = xmlParseFile(fn);
- struct zr_explain *r;
- if (!doc)
- {
- yaz_log(YLOG_WARN|YLOG_ERRNO, "Unable to open %s", fn);
- return 0;
- }
- r = explain(m, xmlDocGetRootElement(doc));
- xmlFree(doc);
- return r;
-}
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * c-file-style: "Stroustrup"
- * indent-tabs-mode: nil
- * End:
- * vim: shiftwidth=4 tabstop=8 expandtab
- */
-
+++ /dev/null
-/* This file is part of Pazpar2.
- Copyright (C) 2006-2011 Index Data
-
-Pazpar2 is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-Pazpar2 is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-*/
-
-#ifndef ZEEREX_H
-#define ZEEREX_H
-
-// Structures representing a Zeerex record.
-
-typedef enum zr_bool
-{
- Zr_bool_unknown,
- Zr_bool_false,
- Zr_bool_true
-} Zr_bool;
-
-typedef struct zr_langstr
-{
- Zr_bool primary;
- char *lang;
- char *str;
- struct zr_langstr *next;
-} Zr_langstr;
-
-struct zr_authentication
-{
- char *type;
- char *open;
- char *user;
- char *group;
- char *password;
-};
-
-struct zr_serverInfo
-{
- char *protocol;
- char *version;
- char *transport;
- char *method;
- char *host;
- int port;
- char *database;
- struct zr_authentication *authentication;
-};
-
-struct zr_agent
-{
- char *type;
- char *identifier;
- char *value;
- struct zr_agent *next;
-};
-
-struct zr_link
-{
- char *type;
- char *value;
- struct zr_link *next;
-};
-
-struct zr_implementation
-{
- char *identifier;
- char *version;
- struct zr_agent *agents;
- Zr_langstr *title;
-};
-
-struct zr_databaseInfo
-{
- Zr_langstr *title;
- Zr_langstr *description;
- Zr_langstr *history;
- char *lastUpdate;
- Zr_langstr *extent;
- int numberOfRecords;
- Zr_langstr *restrictions;
- Zr_langstr *langUsage;
- char *codes;
- struct zr_agent *agents;
- struct zr_implementation *implementation;
- struct zr_link *links;
-};
-
-struct zr_metaInfo
-{
- char *dateModified;
- char *dateAggregated;
- char *aggregatedFrom;
-};
-
-struct zr_set
-{
- Zr_langstr *title;
- char *name;
- char *identifier;
- struct zr_set *next;
-};
-
-struct zr_attr
-{
- int type;
- char *set;
- char *value;
- struct zr_attr *next;
-};
-
-struct zr_map
-{
- Zr_bool primary;
- char *lang;
- char *name;
- char *set;
- struct zr_attr *attrs;
- struct zr_map *next;
-};
-
-typedef struct zr_setting
-{
- char *type;
- char *value;
- struct zr_map *map;
- struct zr_setting *next;
-} Zr_setting;
-
-struct zr_configInfo
-{
- Zr_setting *defaultv;
- Zr_setting *setting;
- Zr_setting *supports;
-};
-
-struct zr_index
-{
- Zr_bool search;
- Zr_bool scan;
- Zr_bool sort;
- char *id;
- Zr_langstr *title;
- struct zr_map *maps;
- struct zr_configInfo *configInfo;
- struct zr_index *next;
-};
-
-struct zr_sortKeyword
-{
- char *value;
- struct zr_sortKeyword *next;
-};
-
-struct zr_indexInfo
-{
- struct zr_set *sets;
- struct zr_index *indexes;
- struct zr_sortKeyword *sortKeywords;
- struct zr_configInfo *configInfo;
-};
-
-struct zr_elementSet
-{
- char *name;
- char *identifier;
- Zr_langstr *title;
- struct zr_elementSet *next;
-};
-
-struct zr_recordSyntax
-{
- char *name;
- char *identifier;
- struct zr_elementSet *elementSets;
- struct zr_recordSyntax *next;
-};
-
-struct zr_recordInfo
-{
- struct zr_recordSyntax *recordSyntaxes;
-};
-
-struct zr_schema
-{
- char *name;
- char *identifier;
- Zr_bool retrieve;
- Zr_bool sort;
- char *location;
- Zr_langstr *title;
- struct zr_schema *next;
-};
-
-struct zr_schemaInfo
-{
- struct zr_schema *schemas;
-};
-
-struct zr_explain
-{
- struct zr_serverInfo *serverInfo;
- struct zr_databaseInfo *databaseInfo;
- struct zr_metaInfo *metaInfo;
- struct zr_indexInfo *indexInfo;
- struct zr_recordInfo *recordInfo;
- struct zr_schemaInfo *schemaInfo;
- struct zr_configInfo *configInfo;
-};
-
-struct zr_explain *zr_read_xml(NMEM m, xmlNode *n);
-struct zr_explain *zr_read_file(NMEM m, const char *fn);
-const char *zr_langstr(Zr_langstr *s, const char *lang);
-
-#endif
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * c-file-style: "Stroustrup"
- * indent-tabs-mode: nil
- * End:
- * vim: shiftwidth=4 tabstop=8 expandtab
- */
-
<service>
<include src="z3950_indexdata_com_marc.xml"/>
- <targetprofiles type="local" src="../zeerex/records/"/>
<metadata name="url" merge="unique"/>
<metadata name="title" brief="yes" sortkey="skiparticle" merge="longest" rank="6" mergekey="required" />
<metadata name="title-remainder" brief="yes" merge="longest" rank="5"/>
for p in $PATH; do
if test -x $p/yaz-ztest -a -x $p/yaz-config; then
VERSION=`$p/yaz-config -V|awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
- if test $VERSION -ge 4000012; then
+ if test $VERSION -ge 4002000; then
F=$p/yaz-ztest
break
fi
http://localhost:9763/search.pz2?command=init&clear=1
-http://localhost:9763/search.pz2?session=1&command=settings&pz:name%5Blocalhost:9999%2Fdb1%5D=db1&pz:requestsyntax%5Blocalhost:9999%2Fdb1%5D=usmarc&pz:nativesyntax%5Blocalhost:9999%2Fdb1%5D=txml&pz:xslt%5Blocalhost:9999%2Fdb1%5D=tmarc.xsl&pz:termlist_term_count%5Blocalhost:9999%2Fdb1%5D=0
+http://localhost:9763/search.pz2?session=1&command=settings&pz:name%5Blocalhost:9999%2Fdb1%5D=db1&pz:requestsyntax%5Blocalhost:9999%2Fdb1%5D=usmarc&pz:nativesyntax%5Blocalhost:9999%2Fdb1%5D=txml&pz:xslt%5Blocalhost:9999%2Fdb1%5D=tmarc.xsl
http://localhost:9763/search.pz2?session=1&command=search&query=7+and+computer
http://localhost:9763/search.pz2?session=1&command=show&block=1
http://localhost:9763/search.pz2?session=1&command=bytarget
4 http://localhost:9763/search.pz2?session=1&command=termlist&name=xtargets%2Cauthor%2Csubject%2Cdate%2Cmedium
-http://localhost:9763/search.pz2?session=1&command=settings&pz:name%5Blocalhost:9999%2Fdb1%5D=db1&pz:requestsyntax%5Blocalhost:9999%2Fdb1%5D=usmarc&pz:nativesyntax%5Blocalhost:9999%2Fdb1%5D=txml&pz:xslt%5Blocalhost:9999%2Fdb1%5D=tmarc.xsl&pz:termlist_term_count%5Blocalhost:9999%2Fdb1%5D=5&pz:maxrecs%5Blocalhost:9999%2Fdb1%5D=2
+http://localhost:9763/search.pz2?session=1&command=settings&pz:name%5Blocalhost:9999%2Fdb1%5D=db1&pz:requestsyntax%5Blocalhost:9999%2Fdb1%5D=usmarc&pz:nativesyntax%5Blocalhost:9999%2Fdb1%5D=txml&pz:xslt%5Blocalhost:9999%2Fdb1%5D=tmarc.xsl&pz:maxrecs%5Blocalhost:9999%2Fdb1%5D=2&pz:facetmap:author%5Blocalhost:9999%2Fdb1%5D=author&pz:facetmap:subject%5Blocalhost:9999%2Fdb1%5D=subject&pz:facetmap:date%5Blocalhost:9999%2Fdb1%5D=date
http://localhost:9763/search.pz2?session=1&command=search&query=4+and+computer
http://localhost:9763/search.pz2?session=1&command=show&block=1
http://localhost:9763/search.pz2?session=1&command=bytarget
10 http://localhost:9763/search.pz2?session=1&command=termlist&name=xtargets%2Cauthor%2Csubject%2Cdate%2Cmedium
http://localhost:9763/search.pz2?session=1&command=bytarget
http://localhost:9763/search.pz2?command=init
-http://localhost:9763/search.pz2?session=2&command=settings&pz:name%5Blocalhost:9999%2Fdb1%5D=db1&pz:requestsyntax%5Blocalhost:9999%2Fdb1%5D=usmarc&pz:nativesyntax%5Blocalhost:9999%2Fdb1%5D=txml&pz:xslt%5Blocalhost:9999%2Fdb1%5D=tmarc.xsl&pz:apdulog%5Blocalhost:9999%2Fdb1%5D=1
+http://localhost:9763/search.pz2?session=2&command=settings&pz:name%5Blocalhost:9999%2Fdb1%5D=db1&pz:requestsyntax%5Blocalhost:9999%2Fdb1%5D=usmarc&pz:nativesyntax%5Blocalhost:9999%2Fdb1%5D=txml&pz:xslt%5Blocalhost:9999%2Fdb1%5D=tmarc.xsl&pz:apdulog%5Blocalhost:9999%2Fdb1%5D=1&pz:facetmap:date%5Blocalhost:9999%2Fdb1%5D=date
http://localhost:9763/search.pz2?session=2&command=search&query=9+and+computer
10 http://localhost:9763/search.pz2?session=2&command=show&block=1
http://localhost:9763/search.pz2?session=2&command=termlist&name=xtargets%2Cauthor%2Csubject%2Cdate%2Cmedium
<term><name>author2</name><frequency>80</frequency></term>
<term><name>author3</name><frequency>70</frequency></term>
<term><name>author4</name><frequency>60</frequency></term>
+<term><name>author5</name><frequency>50</frequency></term>
+<term><name>author6</name><frequency>40</frequency></term>
+<term><name>author7</name><frequency>30</frequency></term>
+<term><name>author8</name><frequency>20</frequency></term>
+<term><name>author9</name><frequency>10</frequency></term>
</list>
<list name="subject">
<term><name>subject0</name><frequency>100</frequency></term>
<term><name>subject2</name><frequency>80</frequency></term>
<term><name>subject3</name><frequency>70</frequency></term>
<term><name>subject4</name><frequency>60</frequency></term>
+<term><name>subject5</name><frequency>50</frequency></term>
+<term><name>subject6</name><frequency>40</frequency></term>
+<term><name>subject7</name><frequency>30</frequency></term>
+<term><name>subject8</name><frequency>20</frequency></term>
+<term><name>subject9</name><frequency>10</frequency></term>
</list>
<list name="date">
<term><name>date0</name><frequency>100</frequency></term>
<term><name>date2</name><frequency>80</frequency></term>
<term><name>date3</name><frequency>70</frequency></term>
<term><name>date4</name><frequency>60</frequency></term>
+<term><name>date5</name><frequency>50</frequency></term>
+<term><name>date6</name><frequency>40</frequency></term>
+<term><name>date7</name><frequency>30</frequency></term>
+<term><name>date8</name><frequency>20</frequency></term>
+<term><name>date9</name><frequency>10</frequency></term>
</list>
<list name="medium">
</list>
<term><name>author2</name><frequency>80</frequency></term>
<term><name>author3</name><frequency>70</frequency></term>
<term><name>author4</name><frequency>60</frequency></term>
+<term><name>author5</name><frequency>50</frequency></term>
+<term><name>author6</name><frequency>40</frequency></term>
+<term><name>author7</name><frequency>30</frequency></term>
+<term><name>author8</name><frequency>20</frequency></term>
+<term><name>author9</name><frequency>10</frequency></term>
</list>
<list name="subject">
<term><name>subject0</name><frequency>100</frequency></term>
<term><name>subject2</name><frequency>80</frequency></term>
<term><name>subject3</name><frequency>70</frequency></term>
<term><name>subject4</name><frequency>60</frequency></term>
+<term><name>subject5</name><frequency>50</frequency></term>
+<term><name>subject6</name><frequency>40</frequency></term>
+<term><name>subject7</name><frequency>30</frequency></term>
+<term><name>subject8</name><frequency>20</frequency></term>
+<term><name>subject9</name><frequency>10</frequency></term>
</list>
<list name="date">
<term><name>date0</name><frequency>100</frequency></term>
<term><name>date2</name><frequency>80</frequency></term>
<term><name>date3</name><frequency>70</frequency></term>
<term><name>date4</name><frequency>60</frequency></term>
+<term><name>date5</name><frequency>50</frequency></term>
+<term><name>date6</name><frequency>40</frequency></term>
+<term><name>date7</name><frequency>30</frequency></term>
+<term><name>date8</name><frequency>20</frequency></term>
+<term><name>date9</name><frequency>10</frequency></term>
</list>
<list name="medium">
</list>
<term><name>author2</name><frequency>80</frequency></term>
<term><name>author3</name><frequency>70</frequency></term>
<term><name>author4</name><frequency>60</frequency></term>
+<term><name>author5</name><frequency>50</frequency></term>
+<term><name>author6</name><frequency>40</frequency></term>
+<term><name>author7</name><frequency>30</frequency></term>
+<term><name>author8</name><frequency>20</frequency></term>
+<term><name>author9</name><frequency>10</frequency></term>
</list>
<list name="subject">
<term><name>subject0</name><frequency>100</frequency></term>
<term><name>subject2</name><frequency>80</frequency></term>
<term><name>subject3</name><frequency>70</frequency></term>
<term><name>subject4</name><frequency>60</frequency></term>
+<term><name>subject5</name><frequency>50</frequency></term>
+<term><name>subject6</name><frequency>40</frequency></term>
+<term><name>subject7</name><frequency>30</frequency></term>
+<term><name>subject8</name><frequency>20</frequency></term>
+<term><name>subject9</name><frequency>10</frequency></term>
</list>
<list name="date">
<term><name>date0</name><frequency>100</frequency></term>
<term><name>date2</name><frequency>80</frequency></term>
<term><name>date3</name><frequency>70</frequency></term>
<term><name>date4</name><frequency>60</frequency></term>
+<term><name>date5</name><frequency>50</frequency></term>
+<term><name>date6</name><frequency>40</frequency></term>
+<term><name>date7</name><frequency>30</frequency></term>
+<term><name>date8</name><frequency>20</frequency></term>
+<term><name>date9</name><frequency>10</frequency></term>
</list>
<list name="medium">
</list>
<term><name>author2</name><frequency>80</frequency></term>
<term><name>author3</name><frequency>70</frequency></term>
<term><name>author4</name><frequency>60</frequency></term>
+<term><name>author5</name><frequency>50</frequency></term>
+<term><name>author6</name><frequency>40</frequency></term>
+<term><name>author7</name><frequency>30</frequency></term>
+<term><name>author8</name><frequency>20</frequency></term>
+<term><name>author9</name><frequency>10</frequency></term>
</list>
<list name="subject">
<term><name>subject0</name><frequency>100</frequency></term>
<term><name>subject2</name><frequency>80</frequency></term>
<term><name>subject3</name><frequency>70</frequency></term>
<term><name>subject4</name><frequency>60</frequency></term>
+<term><name>subject5</name><frequency>50</frequency></term>
+<term><name>subject6</name><frequency>40</frequency></term>
+<term><name>subject7</name><frequency>30</frequency></term>
+<term><name>subject8</name><frequency>20</frequency></term>
+<term><name>subject9</name><frequency>10</frequency></term>
</list>
<list name="date">
<term><name>date0</name><frequency>100</frequency></term>
<term><name>date2</name><frequency>80</frequency></term>
<term><name>date3</name><frequency>70</frequency></term>
<term><name>date4</name><frequency>60</frequency></term>
+<term><name>date5</name><frequency>50</frequency></term>
+<term><name>date6</name><frequency>40</frequency></term>
+<term><name>date7</name><frequency>30</frequency></term>
+<term><name>date8</name><frequency>20</frequency></term>
+<term><name>date9</name><frequency>10</frequency></term>
</list>
<list name="medium">
</list>
</term>
</list>
<list name="author">
-<term><name>author0</name><frequency>100</frequency></term>
-<term><name>author1</name><frequency>90</frequency></term>
-<term><name>author2</name><frequency>80</frequency></term>
-<term><name>author3</name><frequency>70</frequency></term>
-<term><name>author4</name><frequency>60</frequency></term>
+<term><name>Jack Collins</name><frequency>2</frequency></term>
+<term><name>Mairs, John W</name><frequency>1</frequency></term>
+<term><name>Wood, Helen M</name><frequency>1</frequency></term>
+<term><name>Englund, Carl R</name><frequency>1</frequency></term>
</list>
<list name="subject">
-<term><name>subject0</name><frequency>100</frequency></term>
-<term><name>subject1</name><frequency>90</frequency></term>
-<term><name>subject2</name><frequency>80</frequency></term>
-<term><name>subject3</name><frequency>70</frequency></term>
-<term><name>subject4</name><frequency>60</frequency></term>
+<term><name>Radioisotope scanning</name><frequency>1</frequency></term>
+<term><name>Scintillation cameras</name><frequency>1</frequency></term>
+<term><name>Imaging systems in medicine</name><frequency>1</frequency></term>
+<term><name>Bible. O.T</name><frequency>1</frequency></term>
+<term><name>Bible</name><frequency>1</frequency></term>
+<term><name>Cartography</name><frequency>1</frequency></term>
+<term><name>Puget Sound region (Wash.)</name><frequency>1</frequency></term>
+<term><name>Tomography</name><frequency>1</frequency></term>
+<term><name>Optical pattern recognition</name><frequency>1</frequency></term>
+<term><name>Computers</name><frequency>1</frequency></term>
+<term><name>Railroads</name><frequency>1</frequency></term>
</list>
<list name="date">
<term><name>date0</name><frequency>100</frequency></term>
<term><name>date2</name><frequency>80</frequency></term>
<term><name>date3</name><frequency>70</frequency></term>
<term><name>date4</name><frequency>60</frequency></term>
+<term><name>date5</name><frequency>50</frequency></term>
+<term><name>date6</name><frequency>40</frequency></term>
+<term><name>date7</name><frequency>30</frequency></term>
+<term><name>date8</name><frequency>20</frequency></term>
+<term><name>date9</name><frequency>10</frequency></term>
</list>
<list name="medium">
</list>
<service>
<include src="z3950_indexdata_com_marc.xml"/>
- <targetprofiles type="local" src="../zeerex/records/"/>
<metadata name="url" merge="unique"/>
<metadata name="title" brief="yes" sortkey="skiparticle" merge="longest" rank="6" mergekey="required" />
<metadata name="title-remainder" brief="yes" merge="longest" rank="5"/>
<service>
<include src="z3950_indexdata_com_marc.xml"/>
- <targetprofiles type="local" src="../zeerex/records/"/>
<metadata name="url" merge="unique"/>
<metadata name="title" brief="yes" sortkey="skiparticle" merge="longest" rank="6" mergekey="required" />
<metadata name="title-remainder" brief="yes" merge="longest" rank="5"/>
<service>
<include src="z3950_indexdata_com_marc.xml"/>
- <targetprofiles type="local" src="../zeerex/records/"/>
<metadata name="url" merge="unique"/>
<metadata name="title" brief="yes" sortkey="skiparticle" merge="longest" rank="6" mergekey="required" />
<metadata name="title-remainder" brief="yes" merge="longest" rank="5"/>
<service>
<include src="gbv-sru-marc.xml"/>
- <targetprofiles type="local" src="../zeerex/records/"/>
<metadata name="url" merge="unique"/>
<metadata name="title" brief="yes" sortkey="skiparticle" merge="longest" rank="6" mergekey="required" />
<metadata name="title-remainder" brief="yes" merge="longest" rank="5"/>
<service>
<include src="z3950_indexdata_com_marc.xml"/>
- <targetprofiles type="local" src="../zeerex/records/"/>
<metadata name="url" merge="unique"/>
<metadata name="title" brief="yes" sortkey="skiparticle" merge="longest" rank="6" mergekey="required" />
<metadata name="title-remainder" brief="yes" merge="longest" rank="5"/>
DEBUG=0 # 0 for release, 1 for debug
USE_MANIFEST = 1 # Can be enabled Visual Studio 2005/2008
PACKAGE_NAME=pazpar2
-PACKAGE_VERSION=1.5.5
+PACKAGE_VERSION=1.5.6
# YAZ
YAZ_DIR=..\..\yaz
"$(OBJDIR)\relevance.obj" \
"$(OBJDIR)\termlists.obj" \
"$(OBJDIR)\normalize7bit.obj" \
- "$(OBJDIR)\zeerex.obj" \
"$(OBJDIR)\database.obj" \
"$(OBJDIR)\settings.obj" \
"$(OBJDIR)\getaddrinfo.obj" \
showResponseType = 'json';
}
-my_paz = new pz2( { "onshow": my_onshow,
+var my_paz = new pz2( { "onshow": my_onshow,
"showtime": 500, //each timer (show, stat, term, bytarget) can be specified this way
"pazpar2path": pazpar2path,
"oninit": my_oninit,
var prev = '<span id="prev"><< Prev</span><b> | </b>';
if (curPage > 1)
- var prev = '<a href="#" id="prev" onclick="pagerPrev();">'
+ prev = '<a href="#" id="prev" onclick="pagerPrev();">'
+'<< Prev</a><b> | </b>';
var middle = '';
var next = '<b> | </b><span id="next">Next >></span>';
if (pages - curPage > 0)
- var next = '<b> | </b><a href="#" id="next" onclick="pagerNext()">'
+ next = '<b> | </b><a href="#" id="next" onclick="pagerNext()">'
+'Next >></a>';
- predots = '';
+ var predots = '';
if (firstClkbl > 1)
predots = '...';
- postdots = '';
+ var postdots = '';
if (lastClkbl < pages)
postdots = '...';