+ char *sgml_buf;
+ int sgml_len;
+ Record drec;
+ data1_node *node_root, *node_attinfo, *node_attributes, *node_atttype;
+ data1_node *node_values;
+ struct oident *entp;
+ struct data1_attset *attset = NULL;
+
+ if ((entp = oid_getentbyoid (o->oid)))
+ attset = data1_attset_search_id (zei->dh, entp->value);
+
+#if ZINFO_DEBUG
+ yaz_log(YLOG_LOG, "zebraExplain_writeAttributeSet %s",
+ attset ? attset->name : "<unknown>");
+#endif
+
+ drec = createRecord (zei->records, &o->sysno);
+ node_root =
+ data1_read_sgml (zei->dh, zei->nmem,
+ "<explain><attributeSetInfo>AttributeSetInfo\n"
+ "</></>\n" );
+
+ node_attinfo = data1_search_tag (zei->dh, node_root,
+ "/attributeSetInfo");
+
+ assert (node_attinfo);
+ zebraExplain_initCommonInfo (zei, node_attinfo);
+ zebraExplain_updateCommonInfo (zei, node_attinfo);
+
+ data1_mk_tag_data_oid (zei->dh, node_attinfo,
+ "oid", o->oid, zei->nmem);
+ if (attset && attset->name)
+ data1_mk_tag_data_text (zei->dh, node_attinfo,
+ "name", attset->name, zei->nmem);
+
+ node_attributes = data1_mk_tag_uni (zei->dh, zei->nmem,
+ "attributes", node_attinfo);
+ node_atttype = data1_mk_tag_uni (zei->dh, zei->nmem,
+ "attributeType", node_attributes);
+ data1_mk_tag_data_text (zei->dh, node_atttype,
+ "name", "Use", zei->nmem);
+ data1_mk_tag_data_text (zei->dh, node_atttype,
+ "description", "Use Attribute", zei->nmem);
+ data1_mk_tag_data_int (zei->dh, node_atttype,
+ "type", 1, zei->nmem);
+ node_values = data1_mk_tag (zei->dh, zei->nmem,
+ "attributeValues", 0 /* attr */, node_atttype);
+ if (attset)
+ writeAttributeValues (zei, node_values, attset);
+
+ /* extract *searchable* keys from it. We do this here, because
+ record count, etc. is affected */
+ if (key_flush)
+ (*zei->updateFunc)(zei->updateHandle, drec, node_root);
+ /* convert to "SGML" and write it */
+#if ZINFO_DEBUG
+ data1_pr_tree (zei->dh, node_root, stderr);
+#endif
+ sgml_buf = data1_nodetoidsgml(zei->dh, node_root, 0, &sgml_len);
+ drec->info[recInfo_storeData] = (char *) xmalloc (sgml_len);
+ memcpy (drec->info[recInfo_storeData], sgml_buf, sgml_len);
+ drec->size[recInfo_storeData] = sgml_len;
+
+ rec_put (zei->records, &drec);