我想创建一个像PersonA isIn RoomA atTime 12:00
这样的四元组。我想用atTime System.current.TimeStamp()
。
我尝试通过以下方式创建四元组:
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
(或类似的)文件?
有任何建议怎么做?
感谢您的回答!
答案 0 :(得分:3)
单独编写三元组或四元组是非常不寻常的。 Jena的api通常处理这些项目的集合,例如Graph
,或更适合您的案例DatasetGraph
,甚至只是java集合。
Jena的输出通常通过RDFDataMgr
处理。这里有几个选项:
RDFDataMgr.writeQuads(OutputStream out, Iterator<Quad> iterator)
,只能写N-Quads。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
答案 1 :(得分:0)
我认为在表示时间序列时,无法避免空白节点::特定度量或传感器的(时间戳,值)列表。 RDF最初并不是为了表示时间序列而设计的,当然我们可以这样做,但是每次测量都需要额外的空白节点成本。
一个 hasTimeStamp ts1, hasValue v1 hasTimeStamp ts2, hasValue v2
@mrquad我不确定你是否设法代表你想要的东西。