0

我已经建立了一个收集数据并将其存储在 rdf/xml 文件中的网络爬虫,现在我想将该数据映射到我的 java 对象......我该怎么做?

我发现这段代码可能对我有用,但我似乎无法正确使用它......它从我的 rdf/xml 文件中收集主题、谓词和对象,但我可以用我的 java 指定对象表示这些数据,我不知道怎么......我用谷歌搜索了很多,但没有太多有用的东西,所以帮助大家!:D

StmtIterator iter = rdfGraph.listStatements();
     while (iter.hasNext()) {

            Statement stmt      = iter.nextStatement();  // get next statement
            Resource  subject   = stmt.getSubject();
            //System.out.print(subject.getNameSpace(  ) + subject.getLocalName(  ));// get the subject
            Property  predicate = stmt.getPredicate(); 
            //System.out.print(" " + predicate.getNameSpace(  ) + predicate.getLocalName(  ));// get the predicate
            RDFNode   object    = stmt.getObject();      // get the object
            //System.out.println(" " + object.toString(  ) + "\n");
            System.out.println(subject + " | "+predicate + " | " + object);

         }

这是我的 rdf 文件的一部分...

<rdf:Description rdf:nodeID="A12">
<schema:reviewRating rdf:nodeID="A13"/>
<schema:description>descriptiooooon</schema:description>
<schema:datePublished>2012-02-22</schema:datePublished>
<schema:author>Nick M.</schema:author>
<rdf:type rdf:resource="http://schema.org/Review"/>
</rdf:Description>

我想用这个 java 对象来表示它..这是我的课...

@Namespace(Constants.SCHEMA)
@RdfType("Review")
public class Review extends Thing{

@RdfProperty(Constants.SCHEMA + "author")
private String author;

@RdfProperty(Constants.SCHEMA + "reviewRating")
private Rating reviewRating;

@RdfProperty(Constants.SCHEMA + "datePublished")
private Date datePublished;

@RdfProperty(Constants.SCHEMA + "description")
private String description;

    }
4

2 回答 2

0

好吧,你还没有告诉我们什么

我可以用我的 java 指定对象来表示这些数据,

实际上意味着,因为您还没有描述您的 Java 对象。

猜测一下,我认为问题在于您一次访问一个三元组 ( Statement) 的 RDF 模型的内容。这是相当低级的访问模式。您需要认识到的第一件事是具有相同主题 URI 的三元组组表示有关相同 RDF 资源的信息。因此,您可以做的一件事是遍历模型的主题,然后列出它们的属性:

ResourceIterator i = rdfGraph.listSubjects();
while (i.hasNext()) {
  Resource s = i.next();
  System.out.println( "Graph contains subject " + s );
  for (StmtIterator j = s.listProperties(); j.hasNext(); ) {
    Statement t = j.next();
    System.out.println( "   with property " + t.getPredicate() + 
                        " ---> " + t.getObject() );
  }
}

这将使您了解图表中语句分组的基本级别。实际上,您可能只想从某个rdf:type很容易做到的资源开始。

这将是处理 RDF 数据的更常见的基本模式。如果您确实需要将图中的资源映射到 Java 对象,请查看JenaBean 之类的项目。但请注意,该代码已经很老了,可能需要适应当前版本的 Jena。

于 2013-05-30T16:02:19.943 回答
0

也许这个 api 对你有用: XMappr API

于 2013-05-30T15:43:59.000 回答