2 * Copyright (C) 1995-2005, Index Data ApS
3 * See the file LICENSE for details.
5 * $Id: tstxmlquery.c,v 1.6 2006-01-30 14:02:07 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);
48 status = QUERY2XML_FAILED;
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;
82 YAZ_CHECK_EQ(pqf2xml_text("@attr 1=4 bad query", ""), PQF_FAILED);
84 YAZ_CHECK_EQ(pqf2xml_text(
86 "<?xml version=\"1.0\"?>\n"
87 "<query set=\"Bib-1\" type=\"rpn\">"
88 "<apt><attr type=\"1\" value=\"4\"/>"
89 "<term>computer</term></apt>"
90 "</query>\n"), XML_MATCH);
92 YAZ_CHECK_EQ(pqf2xml_text(
93 "@attr 2=1 @attr 1=title computer",
94 "<?xml version=\"1.0\"?>\n"
95 "<query set=\"Bib-1\" type=\"rpn\">"
96 "<apt><attr type=\"1\" value=\"title\"/>"
97 "<attr type=\"2\" value=\"1\"/>"
98 "<term>computer</term></apt>"
99 "</query>\n"), XML_MATCH);
101 YAZ_CHECK_EQ(pqf2xml_text(
102 "@attr 2=1 @attr exp1 1=1 computer",
103 "<?xml version=\"1.0\"?>\n"
104 "<query set=\"Bib-1\" type=\"rpn\">"
105 "<apt><attr set=\"Exp-1\" type=\"1\" value=\"1\"/>"
106 "<attr type=\"2\" value=\"1\"/>"
107 "<term>computer</term></apt>"
108 "</query>\n"), XML_MATCH);
110 YAZ_CHECK_EQ(pqf2xml_text(
112 "<?xml version=\"1.0\"?>\n"
113 "<query set=\"Bib-1\" type=\"rpn\">"
114 "<binary type=\"and\">"
115 "<apt><term>a</term></apt><apt><term>b</term></apt>"
116 "</binary></query>\n"), XML_MATCH);
118 YAZ_CHECK_EQ(pqf2xml_text(
120 "<?xml version=\"1.0\"?>\n"
121 "<query set=\"Bib-1\" type=\"rpn\">"
122 "<binary type=\"or\">"
123 "<binary type=\"and\"><apt><term>a</term></apt>"
124 "<apt><term>b</term></apt></binary>"
125 "<apt><term>c</term></apt>"
126 "</binary></query>\n"), XML_MATCH);
128 YAZ_CHECK_EQ(pqf2xml_text(
130 "<?xml version=\"1.0\"?>\n"
131 "<query set=\"Bib-1\" type=\"rpn\">"
132 "<rset>abe</rset></query>\n"), XML_MATCH);
134 YAZ_CHECK_EQ(pqf2xml_text(
135 /* exclusion, distance, ordered, relationtype,
136 knownunit, proxunit */
137 "@prox 0 3 1 2 k 2 a b",
138 "<?xml version=\"1.0\"?>\n"
139 "<query set=\"Bib-1\" type=\"rpn\">"
140 "<binary type=\"prox\" exclusion=\"false\" "
143 "relationType=\"2\" "
144 "knownProximityUnit=\"2\">"
145 "<apt><term>a</term></apt><apt><term>b</term></apt>"
146 "</binary></query>\n"), XML_MATCH);
151 int main (int argc, char **argv)
153 YAZ_CHECK_INIT(argc, argv);
161 * indent-tabs-mode: nil
163 * vim: shiftwidth=4 tabstop=8 expandtab