1+ package com .semanticcrawler .impl ;
2+
3+ import java .util .ArrayList ;
4+ import java .util .List ;
5+
6+ import com .semanticcrawler .crawler .SemanticCrawler ;
7+
8+ import org .apache .jena .rdf .model .Model ;
9+ import org .apache .jena .rdf .model .ModelFactory ;
10+ import org .apache .jena .rdf .model .Property ;
11+ import org .apache .jena .rdf .model .RDFNode ;
12+ import org .apache .jena .rdf .model .Resource ;
13+ import org .apache .jena .rdf .model .Statement ;
14+ import org .apache .jena .rdf .model .StmtIterator ;
15+ import org .apache .jena .vocabulary .OWL ;
16+
17+ /**
18+ * SemanticCrawlerImpl
19+ */
20+ public class SemanticCrawlerImpl implements SemanticCrawler {
21+ private List <String > visitedURIs ;
22+
23+ public SemanticCrawlerImpl () {
24+ this .visitedURIs = new ArrayList <>();
25+ }
26+
27+ private boolean visited (String URI ) {
28+ return visitedURIs .contains (URI );
29+ }
30+
31+ private boolean isOwlSameAsProperty (Property property ) {
32+ return property .getURI ().equals (OWL .sameAs .getURI ());
33+ }
34+
35+ @ Override
36+ public void search (Model graph , String resourceURI ) {
37+ Model model = ModelFactory .createDefaultModel ();
38+ model .read (resourceURI );
39+
40+ Resource resource = model .getResource (resourceURI );
41+
42+ StmtIterator statements = model .listStatements (resource , (Property )null , (RDFNode )null );
43+ while (statements .hasNext ()) {
44+ Statement statement = statements .next ();
45+ Property property = statement .getPredicate ();
46+ RDFNode value = statement .getObject ();
47+
48+ if (isOwlSameAsProperty (property )) {
49+ String uri = value .asNode ().getURI ();
50+ try {
51+ if (!visited (uri )) {
52+ System .out .println (uri );
53+ this .visitedURIs .add (uri );
54+ search (graph , uri );
55+ }
56+ } catch (Exception e ) {
57+ e .equals (null );
58+ }
59+ } else {
60+ graph .add (resource , statement .getPredicate (), statement .getObject ());
61+ }
62+ }
63+ }
64+ }
0 commit comments