📄 srw.c
字号:
if ((*p)->which == Z_SRW_searchRetrieve_request) { Z_SRW_searchRetrieveRequest *req = (*p)->u.request; xmlNodePtr ptr = xmlNewChild(pptr, 0, "searchRetrieveRequest", 0); xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs"); xmlSetNs(ptr, ns_srw); switch(req->query_type) { case Z_SRW_query_type_cql: add_xsd_string(ptr, "query", req->query.cql); break; case Z_SRW_query_type_xcql: add_xsd_string(ptr, "xQuery", req->query.xcql); break; case Z_SRW_query_type_pqf: add_xsd_string(ptr, "pQuery", req->query.pqf); break; } switch(req->sort_type) { case Z_SRW_sort_type_none: break; case Z_SRW_sort_type_sort: add_xsd_string(ptr, "sortKeys", req->sort.sortKeys); break; case Z_SRW_sort_type_xSort: add_xsd_string(ptr, "xSortKeys", req->sort.xSortKeys); break; } add_xsd_integer(ptr, "startRecord", req->startRecord); add_xsd_integer(ptr, "maximumRecords", req->maximumRecords); add_xsd_string(ptr, "recordSchema", req->recordSchema); add_xsd_string(ptr, "recordPacking", req->recordPacking); add_xsd_string(ptr, "database", req->database); } else if ((*p)->which == Z_SRW_searchRetrieve_response) { Z_SRW_searchRetrieveResponse *res = (*p)->u.response; xmlNodePtr ptr = xmlNewChild(pptr, 0, "searchRetrieveResponse", 0); xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs"); xmlSetNs(ptr, ns_srw); add_xsd_integer(ptr, "numberOfRecords", res->numberOfRecords); add_xsd_string(ptr, "resultSetId", res->resultSetId); add_xsd_integer(ptr, "resultSetIdleTime", res->resultSetIdleTime); if (res->num_records) { xmlNodePtr rptr = xmlNewChild(ptr, 0, "records", 0); yaz_srw_records(o, rptr, &res->records, &res->num_records, client_data, ns); } if (res->num_diagnostics) { xmlNodePtr rptr = xmlNewChild(ptr, 0, "diagnostics", 0); yaz_srw_diagnostics(o, rptr, &res->diagnostics, &res->num_diagnostics, client_data, ns); } add_xsd_integer(ptr, "nextRecordPosition", res->nextRecordPosition); } else if ((*p)->which == Z_SRW_explain_request) { xmlNodePtr ptr = xmlNewChild(pptr, 0, "explainRequest", 0); xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs"); xmlSetNs(ptr, ns_srw); } else if ((*p)->which == Z_SRW_explain_response) { Z_SRW_explainResponse *res = (*p)->u.explain_response; xmlNodePtr ptr = xmlNewChild(pptr, 0, "explainResponse", 0); xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs"); xmlSetNs(ptr, ns_srw); add_xsd_string_n(ptr, "Explain", res->explainData_buf, res->explainData_len); } else return -1; } return 0;}Z_SRW_PDU *yaz_srw_get(ODR o, int which){ Z_SRW_PDU *sr = odr_malloc(o, sizeof(*o)); sr->which = which; switch(which) { case Z_SRW_searchRetrieve_request: sr->u.request = (Z_SRW_searchRetrieveRequest *) odr_malloc(o, sizeof(*sr->u.request)); sr->u.request->query_type = Z_SRW_query_type_cql; sr->u.request->query.cql = 0; sr->u.request->sort_type = Z_SRW_sort_type_none; sr->u.request->sort.none = 0; sr->u.request->startRecord = 0; sr->u.request->maximumRecords = 0; sr->u.request->recordSchema = 0; sr->u.request->recordPacking = 0; sr->u.request->database = 0; break; case Z_SRW_searchRetrieve_response: sr->u.response = (Z_SRW_searchRetrieveResponse *) odr_malloc(o, sizeof(*sr->u.response)); sr->u.response->numberOfRecords = 0; sr->u.response->resultSetId = 0; sr->u.response->resultSetIdleTime = 0; sr->u.response->records = 0; sr->u.response->num_records = 0; sr->u.response->diagnostics = 0; sr->u.response->num_diagnostics = 0; sr->u.response->nextRecordPosition = 0; break; case Z_SRW_explain_request: sr->u.explain_request = (Z_SRW_explainRequest *) odr_malloc(o, sizeof(*sr->u.explain_request)); sr->u.explain_request->dummy = 0; break; case Z_SRW_explain_response: sr->u.explain_response = (Z_SRW_explainResponse *) odr_malloc(o, sizeof(*sr->u.explain_response)); sr->u.explain_response->explainPacking = 0; sr->u.explain_response->explainData_buf = 0; sr->u.explain_response->explainData_len = 0; } return sr;}#endifstatic struct { int code; const char *msg;} yaz_srw_codes [] = {{1, "Permanent system error"}, {2, "System temporarily unavailable"}, {3, "Authentication error"}, /* Diagnostics Relating to CQL */{10, "Illegal query"}, {11, "Unsupported query type (XCQL vs CQL)"}, {12, "Too many characters in query"}, {13, "Unbalanced or illegal use of parentheses"}, {14, "Unbalanced or illegal use of quotes"}, {15, "Illegal or unsupported index set"}, {16, "Illegal or unsupported index"}, {17, "Illegal or unsupported combination of index and index set"}, {18, "Illegal or unsupported combination of indexes"}, {19, "Illegal or unsupported relation"}, {20, "Illegal or unsupported relation modifier"}, {21, "Illegal or unsupported combination of relation modifers"}, {22, "Illegal or unsupported combination of relation and index"}, {23, "Too many characters in term"}, {24, "Illegal combination of relation and term"}, {25, "Special characters not quoted in term"}, {26, "Non special character escaped in term"}, {27, "Empty term unsupported"}, {28, "Masking character not supported"}, {29, "Masked words too short"}, {30, "Too many masking characters in term"}, {31, "Anchoring character not supported"}, {32, "Anchoring character in illegal or unsupported position"}, {33, "Combination of proximity/adjacency and masking characters not supported"}, {34, "Combination of proximity/adjacency and anchoring characters not supported"}, {35, "Terms only exclusion (stop) words"}, {36, "Term in invalid format for index or relation"}, {37, "Illegal or unsupported boolean operator"}, {38, "Too many boolean operators in query"}, {39, "Proximity not supported"}, {40, "Illegal or unsupported proximity relation"}, {41, "Illegal or unsupported proximity distance"}, {42, "Illegal or unsupported proximity unit"}, {43, "Illegal or unsupported proximity ordering"}, {44, "Illegal or unsupported combination of proximity modifiers"}, {45, "Index set name (prefix) assigned to multiple identifiers"}, /* Diagnostics Relating to Result Sets */{50, "Result sets not supported"}, {51, "Result set does not exist"}, {52, "Result set temporarily unavailable"}, {53, "Result sets only supported for retrieval"}, {54, "Retrieval may only occur from an existing result set"}, {55, "Combination of result sets with search terms not supported"}, {56, "Only combination of single result set with search terms supported"}, {57, "Result set created but no records available"}, {58, "Result set created with unpredictable partial results available"}, {59, "Result set created with valid partial results available"}, /* Diagnostics Relating to Records */{60, "Too many records retrieved"}, {61, "First record position out of range"}, {62, "Negative number of records requested"}, {63, "System error in retrieving records"}, {64, "Record temporarily unavailable"}, {65, "Record does not exist"}, {66, "Unknown schema for retrieval"}, {67, "Record not available in this schema"}, {68, "Not authorised to send record"}, {69, "Not authorised to send record in this schema"}, {70, "Record too large to send"}, /* Diagnostics Relating to Sorting */{80, "Sort not supported"}, {81, "Unsupported sort type (sortKeys vs xSortKeys)"}, {82, "Illegal or unsupported sort sequence"}, {83, "Too many records"}, {84, "Too many sort keys"}, {85, "Duplicate sort keys"}, {86, "Incompatible record formats"}, {87, "Unsupported schema for sort"}, {88, "Unsupported tag path for sort"}, {89, "Tag path illegal or unsupported for schema"}, {90, "Illegal or unsupported direction value"}, {91, "Illegal or unsupported case value"}, {92, "Illegal or unsupported missing value action"}, /* Diagnostics Relating to Explain */{100, "Explain not supported"}, {101, "Explain request type not supported (SOAP vs GET)"}, {102, "Explain record temporarily unavailable"},{0, 0}};const char *yaz_diag_srw_str (int code){ int i; for (i = 0; yaz_srw_codes[i].code; i++) if (yaz_srw_codes[i].code == code) return yaz_srw_codes[i].msg; return 0;}/* bib1:srw */static int srw_bib1_map[] = { 1, 1, 2, 2, 3, 11, 4, 35, 5, 12, 6, 38, 7, 30, 8, 32, 9, 29, 10, 10, 11, 12, 11, 23, 12, 60, 13, 61, 13, 62, 14, 63, 14, 64, 14, 65, 15, 68, 15, 69, 16, 70, 17, 70, 18, 50, 19, 55, 20, 56, 21, 52, 22, 50, 23, 1, /* bad map */ 24, 63, /* bad map */ 25, 63, /* bad map */ 26, 63, /* bad map */ 27, 51, 28, 52, 29, 52, 30, 51, 31, 57, 32, 58, 33, 59, 100, 1, /* bad map */ 101, 3, 102, 3, 103, 3, 104, 3, 105, 3, 106, 66, 107, 11, 108, 10, 108, 13, 108, 14, 108, 25, 108, 26, 108, 27, 108, 45, 109, 1, 110, 37, 111, 1, 112, 58, 113, 10, 114, 16, 115, 16, 116, 16, 117, 19, 118, 22, 119, 32, 119, 31, 120, 28, 121, 15, 122, 32, 123, 22, 123, 17, 123, 18, 124, 24, 125, 36, 126, 36, 127, 36, 128, 51, 129, 39, 130, 43, 131, 40, 132, 42, 201, 44, 201, 33, 201, 34, 202, 41, 203, 43, 205, 1, /* bad map */ 206, 1, /* bad map */ 207, 89, 208, 1, /* bad map */ 209, 80, 210, 80, 210, 81, 211, 84, 212, 85, 213, 92, 214, 90, 215, 91, 216, 92, 217, 63, 218, 1, /* bad map */ 219, 1, /* bad map */ 220, 1, /* bad map */ 221, 1, /* bad map */ 222, 1, /* bad map */ 223, 1, /* bad map */ 224, 1, /* bad map */ 225, 1, /* bad map */ 226, 1, /* bad map */ 227, 66, 228, 1, /* bad map */ 229, 36, 230, 83, 231, 89, 232, 1, 233, 1, /* bad map */ 234, 1, /* bad map */ 235, 2, 236, 3, 237, 82, 238, 67, 239, 66, 240, 1, /* bad map */ 241, 1, /* bad map */ 242, 70, 243, 1, /* bad map */ 244, 66, 245, 10, 246, 10, 247, 10, 1001, 1, /* bad map */ 1002, 1, /* bad map */ 1003, 1, /* bad map */ 1004, 1, /* bad map */ 1005, 1, /* bad map */ 1006, 1, /* bad map */ 1007, 100, 1008, 1, 1009, 1, 1010, 3, 1011, 3, 1012, 3, 1013, 3, 1014, 3, 1015, 3, 1015, 3, 1016, 3, 1017, 3, 1018, 2, 1019, 2, 1020, 2, 1021, 3, 1022, 3, 1023, 3, 1024, 16, 1025, 3, 1026, 64, 1027, 1, 1028, 65, 1029, 1, 1040, 1, /* 1041-1065 */ 1066, 66, 1066, 67, 0};int yaz_diag_bib1_to_srw (int code){ const int *p = srw_bib1_map; while (*p) { if (code == p[0]) return p[1]; p += 2; } return 1;}int yaz_diag_srw_to_bib1(int code){ const int *p = srw_bib1_map; while (*p) { if (code == p[1]) return p[0]; p += 2; } return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -