2014-10-01 29 views
0

我想要创建一个四元组,如PersonA isIn RoomA atTime 12:00。我想用于atTime的System.current.TimeStamp()如何将一个四边形写入一个jena图形,然后写入文件

我试图创建一个四:

Node roomA_Node = NodeFactory.createURI(((Resource) roomA).getURI()); 
Node person1_Node = NodeFactory.createURI(((Resource) person1).getURI()); 
Node isin_node = NodeFactory.createURI(((Resource) ROOM_STREAM.isIn).getURI()); 
Node timestamp = NodeFactory.createLiteral("2001-10-26T21:32:52", 
     XSDDatatype.XSDdateTime); 

Quad q = new Quad(timestamp, person1_Node, isin_node, roomA_Node); 

不过,现在我坚持,因为我想将它写入TTL(或某物类似的)文件?

任何建议如何做到这一点?

我很感谢您的回答!

+2

我想你可能会误解四分之一。四元组不是“四位关系”或“主语,谓语,宾语,时间/间接宾语/其他”的语句。四元组是一个三元组和图形名称。数据集可以命名包含三元组的图形,因此您需要四元组来记录三元组以及出现的图形。 – 2014-10-01 18:52:00

+0

这听起来更像是你只是想要一个n元关系,在这种情况下看看[定义语义网上的N元关系](http://www.w3.org/TR/swbp-n- aryRelations /),通过它你可能会得到像'[] hasSubject personA这样的数据;有房间A; atTime中午.'。 – 2014-10-01 18:53:32

+2

最后,请在发布之前阅读标签说明;这个问题与“Apache HTTP Server,通常被称为Apache,......一个开源的HTTP服务器”无关。我已经移除了标签。 – 2014-10-01 18:54:14

回答

3

单独写入三元组或四元组非常不寻常。 Jena的api通常处理这些项目的集合,例如Graph,或者更适合您的案例DatasetGraph,甚至是简单的java集合。

Jena的输出通常通过RDFDataMgr处理。这里有几个选项:

  1. 非常简单的RDFDataMgr.writeQuads(OutputStream out, Iterator<Quad> iterator),它只写入N-Quads。
  2. 支持多种格式的更一般的RDFDataMgr.write(OutputStream out, DatasetGraph dataset, Lang lang)

前者是简单的调用,因为这(在这种情况下,针对标准输出):

RDFDataMgr.writeQuads(System.out, Collections.singleton(q).iterator()); 

后者是更复杂:

DatasetGraph dsg = new DatasetGraphSimpleMem(); // very simple implementation 
dsg.add(q); 
RDFDataMgr.write(System.out, dsg, Lang.TRIG); // or NQUADS 
+0

Thx为您的答案!据我了解,你建议将'quad'添加到'DatasetGraph'。但是,我想知道这是否是解决我的问题的最佳方法,因为基本上我有第四个属性,我想添加到我的基本主题prädicat和对象三倍?我为什么要这样做,是因为我会将这些数据用作流,并对我的数据做一些推理,并提出问题,例如“在t时间房间A的哪个人?”(如上面的示例所示) – mrquad 2014-10-01 20:41:10

0

我相信空白节点不能表示时间序列时避免::特定测量或传感器的(时间戳,值)列表。 RDF最初并不是为了表示时间序列而设计的,当然我们可以这样做,但它为每个度量都带来了空白节点的额外成本。

一个 hasTimeStamp TS1, hasValue的V1 hasTimeStamp TS2, hasValue的V2

@mrquad我不敢肯定,如果你成功地代表你想要的东西。

相关问题