X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fxcqlutil.c;h=d73d517a3f4d25c3620de8e9e3821122f84a0dc7;hb=5c3d2d2ab097e4bb59ba5718a396b020a2d302c0;hp=b884b6ec85b6300dffb5950a72e2efd344b9ec71;hpb=42f18e58ed67f77727cde23bcee44dbd32ed242a;p=yaz-moved-to-github.git diff --git a/src/xcqlutil.c b/src/xcqlutil.c index b884b6e..d73d517 100644 --- a/src/xcqlutil.c +++ b/src/xcqlutil.c @@ -1,4 +1,4 @@ -/* $Id: xcqlutil.c,v 1.2 2004-03-10 16:34:29 adam Exp $ +/* $Id: xcqlutil.c,v 1.4 2004-10-03 22:34:07 adam Exp $ Copyright (C) 2002-2004 Index Data Aps @@ -6,6 +6,12 @@ This file is part of the YAZ toolkit. See the file LICENSE. */ + +/** + * \file xcqlutil.c + * \brief Implements CQL to XCQL conversion. + */ + #include #include #include @@ -54,28 +60,33 @@ static void prefixes(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data, int level) { - if (cn) + int head = 0; + if (cn->u.st.index_uri) { pr_n("\n", pr, client_data, level); - for (; cn; cn = cn->u.st.modifiers) - { - pr_n("\n", pr, client_data, level+2); - if (cn->u.st.index) - { - pr_n("", pr, client_data, level+4); - pr_cdata(cn->u.st.index, pr, client_data); - pr_n("\n", pr, client_data, 0); - } - if (cn->u.st.term) - { - pr_n("", pr, client_data, level+4); - pr_cdata(cn->u.st.term, pr, client_data); - pr_n("\n", pr, client_data, 0); - } - pr_n("\n", pr, client_data, level+2); - } - pr_n("\n", pr, client_data, level); + head = 1; + + pr_n("\n", pr, client_data, level+2); + pr_n("", pr, client_data, level+4); + pr_cdata(cn->u.st.index_uri, pr, client_data); + pr_n("\n", pr, client_data, 0); + pr_n("\n", pr, client_data, level+2); } + if (cn->u.st.relation_uri && cn->u.st.relation) + { + if (!head) + pr_n("\n", pr, client_data, level); + pr_n("\n", pr, client_data, level+2); + pr_n("", pr, client_data, level+4); + pr_cdata("rel", pr, client_data); + pr_n("\n", pr, client_data, 0); + pr_n("", pr, client_data, level+4); + pr_cdata(cn->u.st.relation_uri, pr, client_data); + pr_n("\n", pr, client_data, 0); + pr_n("\n", pr, client_data, level+2); + } + if (head) + pr_n("\n", pr, client_data, level); } static void cql_to_xml_mod(struct cql_node *m, @@ -119,7 +130,7 @@ static void cql_to_xml_r(struct cql_node *cn, { case CQL_NODE_ST: pr_n("\n", pr, client_data, level); - prefixes(cn->u.st.prefixes, pr, client_data, level+2); + prefixes(cn, pr, client_data, level+2); if (cn->u.st.index) { pr_n("", pr, client_data, level+2); @@ -130,9 +141,17 @@ static void cql_to_xml_r(struct cql_node *cn, { pr_n("\n", pr, client_data, level+2); pr_n("", pr, client_data, level+4); + if (cn->u.st.relation_uri) + pr_cdata("rel.", pr, client_data); pr_cdata(cn->u.st.relation, pr, client_data); pr_n("\n", pr, client_data, 0); + if (cn->u.st.relation_uri) + { + pr_n("", pr, client_data, level+4); + pr_cdata(cn->u.st.relation_uri, pr, client_data); + pr_n("\n", pr, client_data, 0); + } cql_to_xml_mod(cn->u.st.modifiers, pr, client_data, level+4); @@ -148,7 +167,6 @@ static void cql_to_xml_r(struct cql_node *cn, break; case CQL_NODE_BOOL: pr_n("\n", pr, client_data, level); - prefixes(cn->u.st.prefixes, pr, client_data, level+2); if (cn->u.boolean.value) { pr_n("\n", pr, client_data, level+2);