Java解析rdf和xml文件以及处理excel

一.Java解析rdf文件

1.下载jena库

  • 首先,从这里下载 jena 包 apache-jana-2.7.*.tar.gz(我用的是2.7)。解压。
  • 打开 Eclipse,新建一个Java Project。
  • 右键点击项目->properties->Java Build Path -> libraries。将解压后 lib 目录下的 jar 文件添加到build path 中。
  • OK。现在可以在项目里使用 jena 了。

2.jean中的数据结构

在 Jena 中,资源用 Resource 类来表示,其属性用 Property 类来表示。而整体模型用Model 类来表示。一个 Model 对象可以包含多个资源。每一个资源又包括主语subject、谓语predicate、客体object来表示(下面是一个记录车辆移动数据的rdf文件)。



其中整个rdf文件可以看做是一个model,每个rdf标签可以看做是一个subject,每个rdf标签下的obs:hasxxx可以看做是predictate,每个<obs>xxx</obs>中间的xxx看做是object。整个解析类似xml。

3.使用jean

//获取model
public static Model readRDF(String fileName) {
		Model model = ModelFactory.createDefaultModel();
		InputStream in = FileManager.get().open(fileName);
		if (in == null) {
			throw new IllegalArgumentException("File: " + fileName
					+ " not found");
		}

		// 读取RDF/XML 文件
		return model.read(in, com.hp.hpl.jena.vocabulary.RDF.getURI(), "RDF/XML-ABBREV");

		// model.write(System.out);
	}
/**
	 * 获取经纬度以及发送者ID
	 * @param model 数据
	 * @param list  存储结果
	 */
	public static void getWantedItems(Model model,
			Map<String, List<Map<String, String>>> senderMap, HashSet<String> nameSet) {
		ResIterator subjects = model.listSubjects();
		while (subjects.hasNext()) {
			Resource subject = subjects.next();
			//Property property = model.createProperty();
			//System.out.println(subject.getLocalName());
			StmtIterator properties = subject.listProperties();
			Map<String, String> item = new HashMap<String, String>();
			String sender = null;
			while (properties.hasNext()) {
				Statement stmt = properties.nextStatement();
				Property predicate = stmt.getPredicate();
				RDFNode object = stmt.getObject();
				String val = null;
				String name = predicate.getLocalName().trim();
				//System.out.println(name);
				val = object.toString().split("\\^\\^")[0];
				if (name.equals("hasLongitude")) {
					item.put("longitude", val);
				} else if (name.equals("hasLatitude")) {
					item.put("latitude", val);
				} else if (name.equals("hasSender")) {
					sender = val.trim();
					item.put("sender", val);
					nameSet.add(sender);
				}
				//System.out.println();
			}
			
			if (senderMap.get(sender)!=null) {
				senderMap.get(sender).add(item);
			}else {
				System.out.println("新车id:"+sender+"创建list成功");
				List<Map<String, String>>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值