Литераты, набранные в jena, и аннотации на языке - как пропустить их при экспорте?

Я читаю документы RDF из InputStream, следующим образом (синтаксис scala):

def foo(rdfData: InputStream, dialect: String = null) = {
  require(List("RDF/XML", "N-TRIPLE", "TURTLE", "TTL", "N3", "RDF/XML-ABBREV").contains(dialect) || dialect == null)
  val model: Model = ModelFactory.createDefaultModel
  model.read(rdfData, null, dialect)
  doSomethingWithTriplesIterator(model.listStatements())
}

теперь некоторые тройки набрали литералы, поэтому я делаю что-то вроде:

val it = model.listStatements()
it.next.getObject.toString 

я получаю (иногда) что-то вроде: "13"^^<http://www.w3.org/2001/XMLSchema#int> или же "Hello world"@en_US когда меня интересует только значение в виде строк, т.е. 13 & Hello world в приведенном примере.

Есть ли способ получить "голые" ценности прямо из заявлений Джены? если да, то как? Благодарю.

РЕДАКТИРОВАТЬ:

попробовав решение AndyS, используя тройку, взятую у яго, я получил:

scala> val model = ModelFactory.createDefaultModel
model: com.hp.hpl.jena.rdf.model.Model = <ModelCom   {} | >

scala> val is = new java.io.ByteArrayInputStream("""<http://yago-knowledge.org/resource/Mount_Cramer> <http://yago-knowledge.org/resource/hasLatitude> "44.01102^^http://yago-knowledge.org/resource/degrees" .""".getBytes("UTF-8"))
is: java.io.ByteArrayInputStream = java.io.ByteArrayInputStream@2b3c4f10

scala> model.read(is, null, "N-TRIPLE")
res0: com.hp.hpl.jena.rdf.model.Model = <ModelCom   {http://yago-knowledge.org/resource/Mount_Cramer @http://yago-knowledge.org/resource/hasLatitude "44.01102^^http://yago-knowledge.org/resource/degrees"} |  [http://yago-knowledge.org/resource/Mount_Cramer, http://yago-knowledge.org/resource/hasLatitude, "44.01102^^http://yago-knowledge.org/resource/degrees"]>

scala> val it = model.listStatements
it: com.hp.hpl.jena.rdf.model.StmtIterator = com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl@55ef662c

scala> val stmt = it.next
stmt: com.hp.hpl.jena.rdf.model.Statement = [http://yago-knowledge.org/resource/Mount_Cramer, http://yago-knowledge.org/resource/hasLatitude, "44.01102^^http://yago-knowledge.org/resource/degrees"]

scala> val obj = stmt.getObject
obj: com.hp.hpl.jena.rdf.model.RDFNode = 44.01102^^http://yago-knowledge.org/resource/degrees

scala> val ltrl = obj.asLiteral
ltrl: com.hp.hpl.jena.rdf.model.Literal = 44.01102^^http://yago-knowledge.org/resource/degrees

scala> ltrl.getLexicalForm
res1: String = 44.01102^^http://yago-knowledge.org/resource/degrees

так что, как вы видите, я не получаю желаемый результат. Что я делаю неправильно?

1 ответ

Решение

То, что вы хотите, это лексическая форма. Смотрите Literal.getLexicalForm.

Другие вопросы по тегам