Nutch中metadata的分析

本文深入探讨了Nutch中Metadata的结构特点及其在网页信息存储中的作用,详细解析了其与CreativeCommons、DublinCore等接口的关系,并展示了如何通过MetaData类灵活地存储和管理网页元数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

作为Nutch中的一个非常重要的数据结构,metadata是一个内容丰富的容器,这里面存储了很多值,同时metadata也是一个信息集合的约束,如果要使用metadata,那它里面的所有声明的静态字符串字段,都是约定的一些固定字段,特别是在操作相关信息的时候,metadata的命名是有特殊含义的.
其实从MetaData的类结构中,我们会找到相关的原因.
首先,MetaData实现了六个接口,我们先来分析这五个与类元素密切相关的接口.

创作共用”授权机制的属性集合
都柏林核心元数据属性集合(有关 DublinCore的介绍,请看后续文章)
HTTP 头文件的属性集合
Nutch 自定义的内部属性
Office 文档属性的集合

以CreativeCommons为例子:
public interface CreativeCommons{
   public final static String LICENSE_URL="Licnese-Url";
   public final static String LICENSE_LOCATION="License-Location";
   public final static String WORK_TYPE="Work-Type";
}
可以看到,这个接口里面有三个不能被继承的,静态的string类型字段,为什么会这样呢?其实无论是creativeCommons还是其他如DublinCore,HttpHeaders,这些具有都具有特殊意义的集合体标志,MetaData实现他们,只是附加了一种约束机制,如实现了CreativeCommons,它就符合了”创作共用”的授权,以上代码中的三个静态字段,也成为了MetaData的静态字段,我们可以使用这三个字段里面的内容,构造键值对加入MetaData类中的HashMap.
从这个意义上来说,是这些接口框定了MetaData中的元素.他们有所分类,并且都具有各自的含义,这样的好处是让Metadata具有很好的通用性和扩展性,因为它实现不同意义的接口.
首先我们先介绍MetaData中的两个重要的数据结构成员
 private final static Map NAMES_IDX = new HashMap();
  这里面存储的是所有已定义过的MetaData的名字,它因为属于类成员,每当类被声明的时候,它就被类中的静态块初始化了,
  private Map metadata = null;
  这里面存储的是最重要的信息,因为MetaData毕竟是一个存储某网页中的不同信息的,我们已经有了描述这些信息的约定好的属性名,那么只需要这个Map存储相应的键值对就好了.值得注意的是:
    String normalized = getNormalizedName(name);
    Object values = metadata.get(normalized);
   if (values != null) {
      if (values instanceof String) {
        List list = new ArrayList();
        list.add(values);
        list.add(value); 这里使用了List,这样一个属性就可以对应多个值了,这样的好处是多多的,可以保证网页信息的完整性.
        metadata.put(normalized, list);
      } else if (values instanceof List) {
        ((List) values).add(value);
      }
    } else {
      metadata.put(normalized, value);
}
 

Method Summary
 void
add(String name, String value)    添加一个键值对,      
 String
get(String name)         得到给定meta名字的值.
static String
getNormalizedName(String name) 根据给定的name,得到标准的name书写形式,在此类的HashMap中保存了标准的metadata的书写形式,这个函数通过对给定name进行字母小写化等的操作,与HashMap中的元素进行匹配,得到标准的书写形式
 String[]
getValues(String name)   根据某属性名,得到它的值
 void
remove(String name)           删除某属性,整个键值对都会被删除
 void
set(String name, String value)           设置某键值对
 int
size()    返回metadata中现有属性的数量

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值