1 # $Id: PQF.pm,v 1.2 2004-12-17 15:28:30 mike Exp $
3 package Net::Z3950::PQF;
9 use Net::Z3950::PQF::Node;
11 our $VERSION = '0.02';
16 Net::Z3950::PQF - Perl extension for parsing PQF (Prefix Query Format)
21 $parser = new Net::Z3950::PQF();
22 $node = $parser->parse('@and @attr 1=1003 kernighan @attr 1=4 unix');
23 print $node->render(0);
27 This library provides a parser for PQF (Prefix Query Format), an ugly
28 but precise string format for expressing Z39.50 Type-1 queries. This
29 format is widely used behind the scenes of Z39.50 applications, and is
30 also used extensively with test-harness programs such as the YAZ
31 command-line client, C<yaz-client>.
33 It is simple to use. Create a parser object, then pass PQF strings
34 into its C<parse()> method to yield parse-trees. The trees are made
35 up of nodes whose types are subclasses of
36 C<Net::Z3950::PQF::Node>.
37 and have names of the form
38 C<Net::Z3950::PQF::somethingNode>. You may find it helpful to use
39 C<Data::Dumper> to visualise the structure of the returned
42 What is a PQF parse-tree good for? Not much. You can render a
43 human-readable version by invoking the top node's C<render()> method,
44 which is probably useful only for debugging. If you want to do
45 anything useful, such as implementing an actual query server that
46 understands PQF, you'll have to walk the tree.
52 $parser = new Net::Z3950::PQF();
54 Creates a new parser object.
69 $query = '@and @attr 1=1003 kernighan @attr 1=4 unix';
70 $node = $parser->parse($query);
72 die "parse($query) failed: " . $parser->errmsg();
75 Parses the PQF string provided as its argument. If an error occurs,
76 then an undefined value is returned, and the error message can be
77 obtained by calling the C<errmsg()> method. Otherwise, the top node
78 of the parse tree is returned.
80 $node2 = $parser->parse($query, "zthes");
81 $node3 = $parser->parse($query, "1.2.840.10003.3.13");
83 A second argument may be provided, after the query itself. If it is
84 provided, then it is taken to be either the name or the OID of a
85 default attribute set, which attributes specified in the query belong
86 to if no alternative attribute set is explicitly specified. When this
87 second argument is absent, the default attribute set is BIB-1.
94 $attrset = "bib-1" if !defined $attrset;
96 die "parse($this) not yet implemented";
102 print $parser->errmsg();
108 return $this->{errmsg};
114 The definition of the Type-1 query in the Z39.50 standard, the
115 relevant section of which is on-line at
116 http://www.loc.gov/z3950/agency/markup/09.html#3.7
118 The documentation of Prefix Query Format in the YAZ Manual, the
119 relevant section of which is on-line at
120 http://indexdata.com/yaz/doc/tools.tkl#PQF
124 Mike Taylor, E<lt>mike@indexdata.comE<gt>
126 =head1 COPYRIGHT AND LICENSE
128 Copyright 2004 by Index Data ApS.
130 This library is free software; you can redistribute it and/or modify
131 it under the same terms as Perl itself.