⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metaqueryhelper.java

📁 数字图书馆的互操作接口
💻 JAVA
字号:
package dli2fe.helpers;/** * Title:        Digial Library Interoperable Interface Fudan Edition * Description:  This project contains all the classes required for DLI2FE interface. Developers use these classes to implement the wrapper and client side codes. The basic functions of DLI2FE is as follows: * Search: Search a digital library source site. * Metadata: Fetch metadata for a site. * ResultAccess: Get results for a given query. * DLI2FE uses Dublin Core as the basic attribute model, DAV/DASL as the general XML-based query language and CORBA as distributed object transportation mechanism. * Copyright:    Copyright (c) 2001 * Company:      Fudan University * @author Carl Tao * @version 1.0 */import java.util.*;import java.net.*;import java.io.*;import dli2fe.DLI2FEException;public class MetaQueryHelper {  Hashtable results = new Hashtable();      // 结果为以文档标志符为key的Hashtable  public MetaQueryHelper(String queryURL, String query) throws DLI2FEException {    try {      System.out.println("MetaQueryHelper:" + query);      URLConnection con = (new URL(queryURL)).openConnection();      con.setUseCaches(false);      con.setDoOutput(true);      con.setDoInput(true);      ByteArrayOutputStream byteOut = new ByteArrayOutputStream();      DataOutputStream out = new DataOutputStream(byteOut);      out.writeUTF(query);      out.flush();      byte buf[] = byteOut.toByteArray();      con.setRequestProperty("Content-type", "application/octet-stream");      con.setRequestProperty("Content-length", "" + buf.length);      DataOutputStream dataOut = new DataOutputStream(con.getOutputStream());      out.write(buf, 0, buf.length);      dataOut.write(buf);      dataOut.flush();      dataOut.close();      DataInputStream in = new DataInputStream(con.getInputStream());      String stringValue = in.readUTF();      //System.out.println(stringValue);      in.close();      analyzeResults(stringValue);    } catch (IOException ex) {      new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "MetaQuery service error: " + ex.toString());    }  }  void analyzeResults(String resultStr) throws DLI2FEException {    try {      BufferedReader br = new BufferedReader(new StringReader(resultStr));      String aLine = br.readLine().trim();      if (!containsOnlyDigits(aLine))        throw new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "MetaQuery error: " + resultStr);      int num = Integer.parseInt(aLine);      for (int i=0; i<num; i++) {        aLine = br.readLine().trim();        if (!containsOnlyDigits(aLine))          throw new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "MetaQuery error: " + resultStr);        Integer did = new Integer(Integer.parseInt(aLine));        Vector v = (Vector)results.get(did);        if (v == null) {          v = new Vector();          results.put(did, v);        }        int j=0;        while (br.ready()) {          br.mark(1);          if (Character.isDigit((char)br.read())) {            br.reset();            char[] bufLen = new char[3];            br.read(bufLen, 0, 3);            int len = Integer.parseInt(new String(bufLen));            char[] bufContent = new char[len];            br.read(bufContent, 0, len);            addContent(v, j++, notNull(new String(bufContent)));          } else {            br.reset();            br.readLine();            break;          }        }      }    } catch (IOException ex) {      throw new DLI2FEException(DLI2FEException.SERVER_ERROR_EXC, "MetaQuery error: "+ ex.toString());    }  }  public Set getResultDIDSet() {    return results.keySet();  }  public Vector getResultForDID(int did) {    return (Vector)results.get(new Integer(did));  }  void addContent(Vector v, int index, String content) {    if (index < v.size()) {      Vector vi = (Vector)v.elementAt(index);      if (!content.equals(vi.elementAt(0)))        vi.add(content);    } else {      Vector vi = new Vector();      vi.add(content);      v.add(vi);    }  }  String notNull(String inStr) {    if (inStr == null)      return "";    return inStr;  }  static boolean containsOnlyDigits(String str) {    for (int i=0; i<str.length(); i++)      if (!Character.isDigit(str.charAt(i)))        return false;    return true;  }  public static void main(String[] args) {    try {      MetaQueryHelper mqh = new MetaQueryHelper("http://localhost:8080/SqlSocket/SqlSocket", "select Scene.Name, Scene.Alias, Scene.Location.Province, Scene.Location.DetailLoc, Scene.Introduction, Scene.Level.Class, Scene.Level.Evaluation, Scene.Culture.Figures.Figure, Scene.Poems.Poem, Scene.Culture.OtherCulture, Scene.SubSights.SubSight from Sight"); //"select Scene.Name from Sight where (Scene.Location.Province='河北' or Scene.Location.Province='山西') and Scene.Culture.Figures.Figure='廉颇'");      Set didSet = mqh.getResultDIDSet();      Iterator it = didSet.iterator();      while (it.hasNext()) {        int i = ((Integer)it.next()).intValue();        System.out.println(i);        Vector v = mqh.getResultForDID(i);        for (int j=0; j<v.size(); j++) {          Vector vj = (Vector)v.elementAt(j);          for (int k=0; k<vj.size(); k++)            System.out.print((String)vj.elementAt(k)+":");          System.out.print("#");        }        System.out.println("");      }    } catch (DLI2FEException e) {      e.printStackTrace();    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -