2 * Copyright (C) 1995-2005, Index Data ApS
3 * See the file LICENSE for details.
5 * $Id: tstxmlquery.c,v 1.8 2006-02-02 15:00:58 adam Exp $
11 #include <yaz/wrbuf.h>
12 #include <yaz/xmlquery.h>
13 #include <yaz/pquery.h>
17 #include <libxml/parser.h>
18 #include <libxml/tree.h>
29 enum pqf2xml_status pqf2xml_text(const char *pqf, const char *expect_xml)
31 YAZ_PQF_Parser parser = yaz_pqf_create();
32 ODR odr = odr_createmem(ODR_ENCODE);
34 enum pqf2xml_status status = XML_NO_ERROR;
40 rpn = yaz_pqf_parse(parser, odr, pqf);
42 yaz_pqf_destroy(parser);
51 yaz_rpnquery2xml(rpn, &doc);
54 status = QUERY2XML_FAILED;
60 xmlDocDumpMemory(doc, (xmlChar **) &buf_out, &len_out);
62 if (len_out == strlen(expect_xml)
63 && memcmp(buf_out, expect_xml, len_out) == 0)
69 printf("%.*s\n", len_out, buf_out);
70 status = XML_NO_MATCH;
75 status = QUERY2XML_FAILED;
84 YAZ_CHECK_EQ(pqf2xml_text("@attr 1=4 bad query", ""), PQF_FAILED);
86 YAZ_CHECK_EQ(pqf2xml_text(
88 "<?xml version=\"1.0\"?>\n"
89 "<query set=\"Bib-1\" type=\"rpn\">"
90 "<apt><attr type=\"1\" value=\"4\"/>"
91 "<term type=\"general\">computer</term></apt>"
92 "</query>\n"), XML_MATCH);
94 YAZ_CHECK_EQ(pqf2xml_text(
95 "@attr 2=1 @attr 1=title computer",
96 "<?xml version=\"1.0\"?>\n"
97 "<query set=\"Bib-1\" type=\"rpn\">"
98 "<apt><attr type=\"1\" value=\"title\"/>"
99 "<attr type=\"2\" value=\"1\"/>"
100 "<term type=\"general\">computer</term></apt>"
101 "</query>\n"), XML_MATCH);
103 YAZ_CHECK_EQ(pqf2xml_text(
104 "@attr 2=1 @attr exp1 1=1 computer",
105 "<?xml version=\"1.0\"?>\n"
106 "<query set=\"Bib-1\" type=\"rpn\">"
107 "<apt><attr set=\"Exp-1\" type=\"1\" value=\"1\"/>"
108 "<attr type=\"2\" value=\"1\"/>"
109 "<term type=\"general\">computer</term></apt>"
110 "</query>\n"), XML_MATCH);
112 YAZ_CHECK_EQ(pqf2xml_text(
114 "<?xml version=\"1.0\"?>\n"
115 "<query set=\"Bib-1\" type=\"rpn\">"
116 "<binary type=\"and\">"
117 "<apt><term type=\"general\">a</term></apt>"
118 "<apt><term type=\"general\">b</term></apt>"
119 "</binary></query>\n"), XML_MATCH);
121 YAZ_CHECK_EQ(pqf2xml_text(
123 "<?xml version=\"1.0\"?>\n"
124 "<query set=\"Bib-1\" type=\"rpn\">"
125 "<binary type=\"or\">"
126 "<binary type=\"and\">"
127 "<apt><term type=\"general\">a</term></apt>"
128 "<apt><term type=\"general\">b</term></apt></binary>"
129 "<apt><term type=\"general\">c</term></apt>"
130 "</binary></query>\n"), XML_MATCH);
132 YAZ_CHECK_EQ(pqf2xml_text(
134 "<?xml version=\"1.0\"?>\n"
135 "<query set=\"Bib-1\" type=\"rpn\">"
136 "<rset>abe</rset></query>\n"), XML_MATCH);
138 YAZ_CHECK_EQ(pqf2xml_text(
139 /* exclusion, distance, ordered, relationtype,
140 knownunit, proxunit */
141 "@prox 0 3 1 2 k 2 a b",
142 "<?xml version=\"1.0\"?>\n"
143 "<query set=\"Bib-1\" type=\"rpn\">"
144 "<binary type=\"prox\" exclusion=\"false\" "
147 "relationType=\"2\" "
148 "knownProximityUnit=\"2\">"
149 "<apt><term type=\"general\">a</term></apt>"
150 "<apt><term type=\"general\">b</term></apt>"
151 "</binary></query>\n"), XML_MATCH);
153 YAZ_CHECK_EQ(pqf2xml_text(
155 "<?xml version=\"1.0\"?>\n"
156 "<query set=\"Bib-1\" type=\"rpn\">"
158 "<term type=\"numeric\">32</term></apt>"
159 "</query>\n"), XML_MATCH);
161 YAZ_CHECK_EQ(pqf2xml_text(
162 "@term string computer",
163 "<?xml version=\"1.0\"?>\n"
164 "<query set=\"Bib-1\" type=\"rpn\">"
166 "<term type=\"string\">computer</term></apt>"
167 "</query>\n"), XML_MATCH);
169 YAZ_CHECK_EQ(pqf2xml_text(
171 "<?xml version=\"1.0\"?>\n"
172 "<query set=\"Bib-1\" type=\"rpn\">"
174 "<term type=\"null\"/></apt>"
175 "</query>\n"), XML_MATCH);
180 int main (int argc, char **argv)
182 YAZ_CHECK_INIT(argc, argv);
190 * indent-tabs-mode: nil
192 * vim: shiftwidth=4 tabstop=8 expandtab