0

RDF Turtle データの文字列が 2 つある

val a: String = "<http://www.test.com/meta#0001> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class>"
val b: String = "<http://www.test.com/meta#0002> <http://www.test.com/meta#CONCEPT_hasType> \"BEAR\"^^<http://www.w3.org/2001/XMLSchema#string>"

各行には 3 つの項目があります。RDF 解析で 1 行を実行して取得したい:

val items : Array[String] = magicallyParse(a)
items(0) == "http://www.test.com/meta#0001"

解析された各アイテムからローカルアイテムも抽出できる場合のボーナス

0001, type, Class
0002, CONCEPT_hasType, (BEAR, string)

この分割を行うライブラリ (java または scala) はありますか? 私は Jena と OpenRDF を見てきましたが、この単一行の分割を行う方法を見つけることができませんでした。

4

1 に答える 1

0

@AndyS の提案のおかげで、私はトリプルのためにこれを思いついた

val line1: String = "<http://www.test.com/meta#0001> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class> ."

val reader: Reader = new StringReader(line1) ;
val tokenizer = TokenizerFactory.makeTokenizer(reader)
val graph: Graph = GraphFactory.createDefaultGraph()
val sink: StreamRDF = StreamRDFLib.graph(graph)
val turtle: LangTurtle = new LangTurtle(tokenizer, new ParserProfileBase(new Prologue(), null), sink)
turtle.parse()

println("item is this: " + graph)
println(graph.size())
println(graph.find(null, null, null).next())
val trip = graph.find(null, null, null).next()
val sub = trip.getSubject
val pred = trip.getPredicate
val obj = trip.getObject
println(s"subject[$sub] predicate[$pred] object[$obj]")

val subLoc = sub.getLocalName
val predLoc = pred.getLocalName
val objLoc = obj.getLocalName
println(s"subject[$subLoc] predicate[$predLoc] object[$objLoc]")

次に、クワッドの場合、このコードを参照してこれを取得しました

  def extractRdfLineAsQuad(line: String): Option[Quad] = {
    val reader: Reader = new StringReader(line)
    val tokenizer = TokenizerFactory.makeTokenizer(reader)
    val parser: LangNQuads = new LangNQuads(tokenizer, RiotLib.profile(Lang.NQUADS, null), null)

    if (parser.hasNext) Some(parser.next())
    else None
  }

きれいとはほど遠いですが、それは私が必要とすることをします。

于 2014-12-16T18:54:53.927 に答える