作为Nutch中的一个非常重要的数据结构,metadata是一个内容丰富的容器,这里面存储了很多值,同时metadata也是一个信息集合的约束,如果要使用metadata,那它里面的所有声明的静态字符串字段,都是约定的一些固定字段,特别是在操作相关信息的时候,metadata的命名是有特殊含义的.
其实从MetaData的类结构中,我们会找到相关的原因.
首先,MetaData实现了六个接口,我们先来分析这五个与类元素密切相关的接口.
以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中现有属性的数量
|
分享到:
相关推荐
在Java编程环境中,获取Nutch中的网页详细信息是一项常见的任务,尤其对于那些处理大量网络数据的项目来说。Nutch是一个开源的Web爬虫框架,它能够抓取...这将使你能够有效地处理和分析存储在Nutch中的大量网页数据。
对于初学者而言,了解Nutch的架构,熟悉其爬虫机制,以及掌握如何利用Nutch进行网页抓取和数据分析,都是不可或缺的学习内容。 通过Eclipse编译Nutch-1.0不仅是一次技术实践,更是深入理解开源软件开发流程的机会。...
### Nutch 1.7 二次开发培训讲义之腾讯微博抓取分析 #### 一、概述 Nutch 是一个开源的网络爬虫项目,它提供了灵活的数据抓取能力,并支持二次开发定制功能。本篇培训讲义主要针对的是如何使用 Nutch 1.7 版本对...
4. **Text and Metadata**: Nutch会从HTML中提取文本内容并保存在`_content`文件中。同时,它还提取元数据(如标题、描述等),存储在`_parse_meta`文件中。 5. **Inlinks and Outlinks**: `linkdb`文件记录了网页...
在安装 Nutch 之前,首先需要确保环境中已经安装了 Apache Ant 工具,因为 Nutch 的构建过程依赖于 Ant。以下是具体步骤: 1. **下载 ant**: - 访问 ant 官网:[http://archive.apache.org/dist/ant/binaries/]...
通过对Nutch解析器中`parse`方法的深入分析,我们可以了解到该方法是如何高效地从原始HTML文档中抽取有价值的信息。这一过程不仅涉及到了DOM解析技术的应用,还涉及到状态管理和数据结构的设计等多个方面。对于...
通过以上步骤,您应该能够在MyEclipse环境中成功配置并运行Nutch项目。这些步骤不仅涵盖了基本的项目配置,还包括了一些针对特定版本的问题解决方案。希望这篇指南能够帮助开发者们快速上手Nutch项目,并有效地进行...
PDFBox 库的应用广泛,比如在Apache Nutch(一个开源网络搜索引擎)和Apache Tika(用于提取文档元数据和结构化文本的工具包)中都有使用。此外,PDFBox包含四个主要组件: 1. **PDFBox**:核心部分,包含处理内容...
- 解析:NameNode将metadata存储在内存中,以提高效率,磁盘只在启动时加载。 21. NameNode的本地磁盘保存了Block的位置信息。 - 答案:是的。 - 解析:NameNode的元数据包括Block与DataNode的映射关系。 22. ...