如何将四元组写入jena图形然后再写入文件

时间:2014-10-01 15:53:25

标签: rdf jena semantic-web quad

我想创建一个像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(或类似的)文件?

有任何建议怎么做?

感谢您的回答!

2 个答案:

答案 0 :(得分: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)
  3. 前者就像调用它一样简单(在这种情况下以标准为目标):

    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我不确定你是否设法代表你想要的东西。