亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? nestedattribute.java

?? 數(shù)字圖書(shū)館的互操作接口
?? JAVA
字號(hào):
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 dli2fe.DLI2FEException;
/* holder for integer values */
import org.omg.CORBA.IntHolder;
/* transport module libraries */
import dli2fe.helpers.*;
/* following packages are imported only if DOM-aware XMLObjects are used */
import dli2fe.xml.*;
import org.w3c.dom.*;
/* DLI2FE XML element names */
import dli2fe.DLI2FE;

/**
 * NestedAttribute represents a flat list of XML elements.
 * For example, nested attribute
 * <pre>
 *   &lt;coordinate&gt;
 *     &lt;x/&gt;
 *   &lt;/coordinate&gt;
 * </pre>
 * is represented by an element vector
 * <pre>
 *   coordinate, x
 * </pre>
 * NestedAttributes can be collected from the list of document properties requested by the client, or from the metadata returned by the client using the method <tt>collectAttributes</tt>. This class can also be used to filter out the attributes requested by the client from a complete document/resource description using <tt>matchDoc</tt>.
 */

public class NestedAttribute {

  Vector list;
  String propName;
  String propDesc;

  public NestedAttribute(Vector v) {
    list = (Vector)v.clone();
    init();
  }

  public NestedAttribute(Enumeration en) {

    list = new Vector();
    while(en.hasMoreElements()) {
      list.addElement(en.nextElement());
    }
    init();
  }

  /**
   * returns the last element in the list
   */
  public Element getLast() {

    return (Element)list.elementAt(list.size()-1);
  }

  public Element elementAt(int i) {
    return (Element)list.elementAt(i);
  }

  public int size() {
    return list.size();
  }

  /**
   * returns a nested representation of the element list
   */
  public Element getNestedElements() {

    Element top = null, current = null;
    for(Enumeration en = list.elements(); en.hasMoreElements();) {
      Element e = (Element)en.nextElement();
      Element tmp = (Element)e.cloneNode(false);
      if(current == null)
	current = tmp;
      else {
	current.appendChild(tmp);
	current = tmp;
      }
      if(top == null)
	top = tmp;
    }
    return top;
  }

  void init() {

    if(list.size() == 0)
      throw new IllegalArgumentException("[NestedAttribute] cannot be empty");

    propName = DOMUtil.getChildText(getLast(), DLI2FE.propName);
    propDesc = DOMUtil.getChildText(getLast(), DLI2FE.propDesc);

    if(propName == null) {
      // compute a canonical name
      propName = "";
      for(Enumeration en = list.elements(); en.hasMoreElements();) {
	Element e = (Element)en.nextElement();
	if(!"".equals(propName))
	  propName += ".";
	propName += getName(e.getTagName());
      }
    }
  }

  static int getNSEnd(String name) {
    // first try to detemine namespace directly
    int l = name.length()-1;
    do {
      char c = name.charAt(l);
      if(c == '#' || c == ':' || c == '/')
	break;
      l--;
    } while (l >= 0);
    l++;
    return l;
  }

  public static String getNS(String name) {
    int l = getNSEnd(name);
    if(l > 0) {
      return name.substring(0, l);
    } else
      return "";
  }

  public static String getName(String name) {
    int l = getNSEnd(name);
    if(l > 0) {
      return name.substring(l);
    } else
      return name;
  }


  public String getPropName() {

    return propName;
  }

  public String getPropDesc() {

    return propDesc == null ? "" : propDesc;
  }

  /**
   * Collects a vector of NestedAttributes from metadata inside <tt>DLI2FE:propList</tt> tag.
   */
  public static Vector collectAttributes(Element e) {

    if(e == null)
      return null;
    Stack stack = new Stack();
    Vector attrs = new Vector();
    collectAttributes(attrs, stack, e);
    return attrs;
  }

  /**
   * Whether attribute is searchable
   */
  public boolean isSearchable() {

    return DOMUtil.getChild(getLast(), DLI2FE.searchable) != null;
  }

  /**
   * Whether attribute is retrievable
   */
  public boolean isRetrievable() {

    return DOMUtil.getChild(getLast(), DLI2FE.retrievable) != null;
  }

  private static void collectAttributes(Vector attrs, Stack stack, Element e) {

    Element eRetrievable = DOMUtil.getChild(e, DLI2FE.retrievable);
    Element eSearchable = DOMUtil.getChild(e, DLI2FE.searchable);
    NodeList propList = DOMUtil.getChildElements(e, "*");

    if(eRetrievable != null || eSearchable != null || propList.getLength() == 0) {

      attrs.addElement(new NestedAttribute(stack));

    } else {

      for(int j=0; j < propList.getLength(); j++) {
	Element eProp = (Element)propList.item(j);
	stack.push(eProp);
	collectAttributes(attrs, stack, eProp);
	stack.pop();
      }
    }
  }

  /**
   * Returns a subset of attributes from <tt>eDoc</tt> that match NestedAttributes in <tt>attrs</tt>
   */
  public static Element matchDoc(Vector attrs, Element eDoc) {

    if(attrs == null) // no filter
      return (Element)eDoc.cloneNode(true);

    Element eDoc2 = (Element)eDoc.cloneNode(false);
    eDoc2.appendChild( DOMUtil.getChild(eDoc, DLI2FE.DID).cloneNode(true) );
    Element ePropList = DOMUtil.getChild(eDoc, DLI2FE.propList);
    Element ePropList2 = NestedAttribute.match(attrs, ePropList);
    if(ePropList2 == null) // nothing found
      ePropList2 = (Element)ePropList.cloneNode(false);
    eDoc2.appendChild(ePropList2);
    return eDoc2;
  }

  /**
   * Copies from ePropList a subset of values that match attributes listed in <tt>attrs</tt>.
   * Use this function for selective delivery of results to the client.
   * Pass <tt>propList</tt> element as parameter.
   */
  public static Element match(Vector attrs, Element e) {

    NodeList clist = DOMUtil.getChildElements(e, "*");

    if(clist.getLength() == 0) { // terminal
      // check whether this attribute value is requested
      for(int j = 0; j < attrs.size(); j++) {
	NestedAttribute a = (NestedAttribute)attrs.elementAt(j);
	// check whether the attribute matches the path that leads to e
	Element p = e;
	boolean matched = true;
	for(int h = a.size() - 1; h >=0; h--, p = (Element)e.getParentNode() ) {
	  if(!p.getTagName().equals(a.elementAt(h).getTagName())) {
	    matched = false;
	    break;
	  }
	}
	if(matched) { // clone the content including text and return it
	  return (Element)e.cloneNode(true);
	}
      }
      return null; // terminal not matched anything
    }

    // match children

    Element ePropagator = null;
    for(int i = 0; i < clist.getLength(); i++) {
      Element c = (Element)clist.item(i);
      Element eMatched = match(attrs, c);
      if(eMatched != null) { // make sure to propagate this match
	if(ePropagator == null)
	  ePropagator = (Element)e.cloneNode(false);
	ePropagator.appendChild(eMatched);
      }
    }
    return ePropagator;
  }

  /**
   * Returns an enumeration of values for the NestedAttribute found inside the given XML element
   */
  public Enumeration matchValues(Element e) {

    Vector v = new Vector();
    matchValues(v, e, -1); // propList => -1
    return v.elements();
  }

  private void matchValues(Vector v, Element e, int i) {

    if(i == list.size() - 1) { // found match
      v.addElement(DOMUtil.getText(e));

    } else {

      i++;
      NodeList propList = DOMUtil.getChildElements(e, ((Element)list.elementAt(i)).getTagName());
      for(int j=0; j < propList.getLength(); j++) {
	Element eProp = (Element)propList.item(j);
	matchValues(v, eProp, i);
      }
    }
  }

  public String toString() {
    dli2fe.xml.XMLObject obj = new XMLObject(getNestedElements());
    return obj.getString();
  }

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区免费视频| 免费观看30秒视频久久| 天涯成人国产亚洲精品一区av| 久久99精品国产91久久来源| 91黄色激情网站| 久久久国产午夜精品| 亚洲va国产天堂va久久en| 国产精品亚洲一区二区三区在线| 99视频精品在线| 久久夜色精品一区| 午夜视黄欧洲亚洲| www.欧美精品一二区| 欧美v日韩v国产v| 亚洲第一综合色| 色综合久久久久久久久久久| 亚洲国产高清在线| 国产在线精品免费av| 欧美一区二区三区小说| 亚洲福利一区二区三区| 在线看日韩精品电影| 日韩理论在线观看| 高清国产一区二区三区| 久久新电视剧免费观看| 美国十次了思思久久精品导航| 欧美性xxxxxx少妇| 综合电影一区二区三区 | 91猫先生在线| 久久久国产综合精品女国产盗摄| 日本欧美一区二区三区乱码| 4438x成人网最大色成网站| 亚洲狠狠丁香婷婷综合久久久| 成人福利视频在线看| 欧美国产亚洲另类动漫| 成人av资源在线| 国产精品乱人伦中文| 成人性生交大片免费看视频在线 | 国产精品日日摸夜夜摸av| 国产呦萝稀缺另类资源| 久久综合九色综合欧美就去吻| 蜜臀av性久久久久av蜜臀妖精| 日韩欧美一区二区免费| 精品无码三级在线观看视频| 久久久久88色偷偷免费| 国产精品亚洲午夜一区二区三区 | 日韩午夜激情电影| 欧美aaa在线| 久久日韩粉嫩一区二区三区| 国产精品一区二区在线播放| 国产精品三级视频| 99re亚洲国产精品| 一区二区免费看| 欧美一区二区美女| 国产一区二区主播在线| 国产精品网站在线播放| 日本高清不卡一区| 日韩精品电影在线| 久久欧美中文字幕| 91女厕偷拍女厕偷拍高清| 亚洲综合无码一区二区| 91精品国产综合久久精品麻豆| 黄一区二区三区| 成人免费在线视频观看| 91精品久久久久久久91蜜桃| 国产成人在线电影| 亚洲美女区一区| 精品剧情v国产在线观看在线| 粉嫩aⅴ一区二区三区四区| 亚洲一区二区3| 精品久久久久久久久久久久久久久 | 久久免费国产精品| 91蜜桃网址入口| 捆绑变态av一区二区三区| 国产精品家庭影院| 69精品人人人人| 成人av免费在线播放| 日日夜夜精品视频免费| 国产精品私房写真福利视频| 6080午夜不卡| 99免费精品在线| 国内精品在线播放| 亚洲一区二区av电影| 国产农村妇女毛片精品久久麻豆| 欧美无砖砖区免费| 懂色av中文字幕一区二区三区| 日韩高清一区二区| 椎名由奈av一区二区三区| 日韩欧美在线一区二区三区| 色婷婷综合在线| 狠狠色狠狠色综合日日91app| 亚洲国产一区二区三区青草影视| 中文字幕av一区二区三区高| 欧美一二三四在线| 在线视频中文字幕一区二区| av男人天堂一区| 黑人巨大精品欧美一区| 亚洲国产美国国产综合一区二区 | 欧美一区二区三区免费| 91蜜桃在线免费视频| 高清不卡在线观看av| 久久黄色级2电影| 亚洲444eee在线观看| 亚洲欧美色图小说| 国产精品美女久久久久久久 | 3atv在线一区二区三区| 99re热视频精品| 播五月开心婷婷综合| 国内一区二区在线| 麻豆精品精品国产自在97香蕉| 性做久久久久久| 亚洲成人福利片| 亚洲制服丝袜在线| 亚洲精品高清在线观看| 亚洲美女屁股眼交3| 亚洲精品久久久蜜桃| 亚洲激情图片小说视频| 亚洲你懂的在线视频| 中文字幕综合网| 一片黄亚洲嫩模| 亚洲成va人在线观看| 亚洲成av人片在www色猫咪| 亚洲综合视频网| 丝袜诱惑亚洲看片| 日本中文字幕不卡| 蜜桃精品在线观看| 久久精品国产精品亚洲综合| 麻豆精品视频在线| 精品一区二区综合| 成人永久看片免费视频天堂| 99久久精品久久久久久清纯| 在线国产亚洲欧美| 欧美精品自拍偷拍| 精品成人在线观看| 欧美激情一区二区三区| 一区免费观看视频| 亚洲午夜一区二区| 日韩av中文字幕一区二区三区| 奇米影视在线99精品| 国产一区二区三区在线观看免费视频| 国产一区二区视频在线播放| 成人av影院在线| 欧美亚一区二区| 日韩精品中文字幕在线不卡尤物| 久久久精品天堂| 亚洲精品免费看| 美女一区二区在线观看| 国产一区二区三区久久悠悠色av| 成人免费的视频| 欧美性受极品xxxx喷水| 日韩精品一区二区三区四区 | 中文字幕欧美三区| 一区二区三区日韩| 麻豆精品在线播放| 大白屁股一区二区视频| 91国内精品野花午夜精品| 日韩美女视频一区二区在线观看| 国产精品美女久久久久aⅴ| 亚洲摸摸操操av| 精品无人码麻豆乱码1区2区| 色欲综合视频天天天| 欧美变态凌虐bdsm| 亚洲少妇屁股交4| 韩国成人福利片在线播放| 不卡av在线网| 2023国产精品| 日韩精品一级中文字幕精品视频免费观看 | 91精品啪在线观看国产60岁| 国产精品私人自拍| 免费av网站大全久久| 99r国产精品| 日韩女优av电影| 亚洲大片一区二区三区| 国产精品一区二区久激情瑜伽| 欧美精品一二三| 1024亚洲合集| 国产福利一区二区三区视频在线| 欧美网站大全在线观看| 欧美韩国日本一区| 久久99热99| 欧美老年两性高潮| 亚洲男人天堂一区| 国产91高潮流白浆在线麻豆| 精品少妇一区二区三区| 亚洲国产综合在线| 91小视频在线观看| 亚洲国产岛国毛片在线| 国产精品 欧美精品| 日韩欧美一级特黄在线播放| 水蜜桃久久夜色精品一区的特点| 色综合久久中文字幕综合网| 国产精品久久久久永久免费观看| 国产精品亚洲第一| 日韩视频免费观看高清完整版在线观看 | 午夜电影久久久| 一本大道av一区二区在线播放| 国产精品久久久久久久久久免费看| 国产又黄又大久久| 26uuu欧美| 国产精品综合网| 久久久欧美精品sm网站 | 日本aⅴ亚洲精品中文乱码|