GeoPubby  Version 0.1.0.0
RewrittenDataSource Class Reference

Wraps a DataSource by applying a IRIRewriter. More...

Inheritance diagram for RewrittenDataSource:
Collaboration diagram for RewrittenDataSource:

Public Member Functions

 RewrittenDataSource (DataSource original, IRIRewriter rewriter)
 
 RewrittenDataSource (DataSource original, IRIRewriter rewriter, boolean addSameAsStatements)
 
boolean canDescribe (String absoluteIRI)
 Indicates whether this data source may have some information about a given IRI. More...
 
Model describeResource (String iri)
 Returns a subgraph of the data source describing one resource. More...
 
Map< Property, Integer > getHighIndegreeProperties (String resourceIRI)
 If describeResource(String) omits properties of high indegree, then those properties must be returned here with the count of arcs. More...
 
Map< Property, Integer > getHighOutdegreeProperties (String resourceIRI)
 If describeResource(String) omits properties of high outdegree, then those properties must be returned here with the count of arcs. More...
 
Model listPropertyValues (String resourceIRI, Property property, boolean isInverse)
 Returns a subgraph of the data source. More...
 
List< Resource > getIndex ()
 A list of IRI resources described in this data source. More...
 
de.fuberlin.wiwiss.pubby.util.AutocompleteEngine< SearchRecordgetLabelIndex ()
 
Model describeResource (String absoluteIRI, String language)
 Returns a subgraph of the data source describing one resource. More...
 

Public Attributes

final DataSource original
 

Static Public Attributes

static final int MAX_INDEX_SIZE = 1000000
 

Private Member Functions

boolean isOriginalIRI (String absoluteIRI)
 
void addSameAsStatement (Model model, String rewrittenIRI)
 

Private Attributes

final IRIRewriter rewriter
 
final boolean addSameAs
 

Detailed Description

Wraps a DataSource by applying a IRIRewriter.

The result is a data source that contains the same data as the original, but with all IRIs replaced according to the rewriter.

Optionally, may add owl:sameAs statements to indicate that the rewritten and original IRIs identify the same entity.

Constructor & Destructor Documentation

◆ RewrittenDataSource() [1/2]

RewrittenDataSource ( DataSource  original,
IRIRewriter  rewriter 
)
30  {
31  this(original, rewriter, false);
32  }
final IRIRewriter rewriter
Definition: RewrittenDataSource.java:27
final DataSource original
Definition: RewrittenDataSource.java:26

References RewrittenDataSource.original, and RewrittenDataSource.rewriter.

◆ RewrittenDataSource() [2/2]

RewrittenDataSource ( DataSource  original,
IRIRewriter  rewriter,
boolean  addSameAsStatements 
)
35  {
36  this.original = original;
37  this.rewriter = rewriter;
38  this.addSameAs = addSameAsStatements;
39  }
final boolean addSameAs
Definition: RewrittenDataSource.java:28

References RewrittenDataSource.original, and RewrittenDataSource.rewriter.

Member Function Documentation

◆ addSameAsStatement()

void addSameAsStatement ( Model  model,
String  rewrittenIRI 
)
private
138  {
139  String originalIRI = rewriter.unrewrite(rewrittenIRI);
140  Resource rewritten = model.getResource(rewrittenIRI);
141  Resource unrewritten = model.getResource(originalIRI);
142  if (rewritten.equals(unrewritten)) return;
143  rewritten.addProperty(OWL.sameAs, unrewritten);
144  ModelUtil.addNSIfUndefined(model, "owl", OWL.NS);
145  }
abstract String unrewrite(String absoluteIRI)
Rewrites an IRI.

References ModelUtil.addNSIfUndefined(), RewrittenDataSource.rewriter, and IRIRewriter.unrewrite().

Referenced by RewrittenDataSource.describeResource(), and RewrittenDataSource.listPropertyValues().

◆ canDescribe()

boolean canDescribe ( String  absoluteIRI)

Indicates whether this data source may have some information about a given IRI.

If this is false, a client should not bother to call describeResource(String). This method is to allow for optimizations and should respond very fast.

It is also used by the UI to decide whether a click on a resource should go to a Pubby page (if true) or out to the Web (if false).

Parameters
absoluteIRIThe IRI of a resource to be described
Returns
true if this data source might have something about it

Implements DataSource.

52  {
53  if (isOriginalIRI(absoluteIRI)) {
54  // According to our logic, the original namespace is empty
55  // because we transplanted it. It only contains a sameAs
56  // statements for every resource in it.
57  return addSameAs && original.canDescribe(absoluteIRI);
58  }
59  return original.canDescribe(rewriter.unrewrite(absoluteIRI));
60  }
boolean canDescribe(String absoluteIRI)
Indicates whether this data source may have some information about a given IRI.
boolean isOriginalIRI(String absoluteIRI)
Definition: RewrittenDataSource.java:41

References RewrittenDataSource.addSameAs, DataSource.canDescribe(), RewrittenDataSource.isOriginalIRI(), RewrittenDataSource.original, RewrittenDataSource.rewriter, and IRIRewriter.unrewrite().

◆ describeResource() [1/2]

Model describeResource ( String  absoluteIRI,
String  language 
)

Returns a subgraph of the data source describing one resource.

This should include both incoming and outgoing triples. However, it should exclude outgoing arcs where the property is a high-outdegree property, and it should exclude incoming arcs where the property is a high-indegree property. If labels for other resources are included in the result, then they will be used.

Parameters
absoluteIRIThe IRI of the resource to be described
Returns
A subgraph of the data source describing the resource.

Implements DataSource.

154  {
155  // TODO Auto-generated method stub
156  return null;
157  }

◆ describeResource() [2/2]

Model describeResource ( String  absoluteIRI)

Returns a subgraph of the data source describing one resource.

This should include both incoming and outgoing triples. However, it should exclude outgoing arcs where the property is a high-outdegree property, and it should exclude incoming arcs where the property is a high-indegree property. If labels for other resources are included in the result, then they will be used.

Parameters
absoluteIRIThe IRI of the resource to be described
Returns
A subgraph of the data source describing the resource.

Implements DataSource.

63  {
64  if (isOriginalIRI(iri)) {
65  // According to our logic, the original namespace is empty
66  // because we transplanted it. It only contains a sameAs
67  // statements for every resource in it.
68  if (!addSameAs || original.describeResource(iri).isEmpty()) {
69  return ModelUtil.EMPTY_MODEL;
70  }
71  Model result = ModelFactory.createDefaultModel();
72  addSameAsStatement(result, rewriter.rewrite(iri));
73  return result;
74  }
75  // Normal case -- a rewritten IRI
76  Model result = rewriter.rewrite(
78  rewriter.unrewrite(iri)));
79  if (addSameAs && !result.isEmpty()) {
80  addSameAsStatement(result, iri);
81  }
82  return result;
83  }
abstract String rewrite(String absoluteIRI)
Rewrites an IRI.
Model describeResource(String absoluteIRI)
Returns a subgraph of the data source describing one resource.
void addSameAsStatement(Model model, String rewrittenIRI)
Definition: RewrittenDataSource.java:138

References RewrittenDataSource.addSameAs, RewrittenDataSource.addSameAsStatement(), DataSource.describeResource(), ModelUtil.EMPTY_MODEL, RewrittenDataSource.isOriginalIRI(), RewrittenDataSource.original, IRIRewriter.rewrite(), RewrittenDataSource.rewriter, and IRIRewriter.unrewrite().

◆ getHighIndegreeProperties()

Map<Property, Integer> getHighIndegreeProperties ( String  resourceIRI)

If describeResource(String) omits properties of high indegree, then those properties must be returned here with the count of arcs.

If high-indegree properties are not omitted, or the resource doesn't have any, then an empty map or null may be returned. Entries with value 0 will be ignored.

Parameters
resourceIRIThe IRI of the resource to be described
Returns
A map containing high-indegree properties with number of arcs for the resource

Implements DataSource.

86  {
87  if (isOriginalIRI(resourceIRI)) return null;
88  return rewriter.rewrite(
90  rewriter.unrewrite(resourceIRI)));
91  }
Map< Property, Integer > getHighIndegreeProperties(String resourceIRI)
If describeResource(String) omits properties of high indegree, then those properties must be returned...

References DataSource.getHighIndegreeProperties(), RewrittenDataSource.isOriginalIRI(), RewrittenDataSource.original, IRIRewriter.rewrite(), RewrittenDataSource.rewriter, and IRIRewriter.unrewrite().

◆ getHighOutdegreeProperties()

Map<Property, Integer> getHighOutdegreeProperties ( String  resourceIRI)

If describeResource(String) omits properties of high outdegree, then those properties must be returned here with the count of arcs.

If high-outdegree properties are not omitted, or the resource doesn't have any, then an empty map or null may be returned. Entries with value 0 will be ignored.

Parameters
resourceIRIThe IRI of the resource to be described
Returns
A map containing high-outdegree properties with number of arcs for the resource

Implements DataSource.

94  {
95  if (isOriginalIRI(resourceIRI)) return null;
96  return rewriter.rewrite(
98  rewriter.unrewrite(resourceIRI)));
99  }
Map< Property, Integer > getHighOutdegreeProperties(String resourceIRI)
If describeResource(String) omits properties of high outdegree, then those properties must be returne...

References DataSource.getHighOutdegreeProperties(), RewrittenDataSource.isOriginalIRI(), RewrittenDataSource.original, IRIRewriter.rewrite(), RewrittenDataSource.rewriter, and IRIRewriter.unrewrite().

◆ getIndex()

List<Resource> getIndex ( )

A list of IRI resources described in this data source.

Ordering is implementation-defined. Usually a reasonable limit should be applied to the number of resources returned.

Implements DataSource.

129  {
130  List<Resource> originalIndex = original.getIndex();
131  List<Resource> result = new ArrayList<Resource>(originalIndex.size());
132  for (Resource r: originalIndex) {
133  result.add(rewriter.rewrite(r));
134  }
135  return result;
136  }
List< Resource > getIndex()
A list of IRI resources described in this data source.

References DataSource.getIndex(), RewrittenDataSource.original, IRIRewriter.rewrite(), and RewrittenDataSource.rewriter.

◆ getLabelIndex()

Implements DataSource.

148  {
149  System.out.println("RewrittenDataSource: GetLabelIndex()");
150  return original.getLabelIndex();
151  }
de.fuberlin.wiwiss.pubby.util.AutocompleteEngine< SearchRecord > getLabelIndex()

References DataSource.getLabelIndex(), and RewrittenDataSource.original.

◆ isOriginalIRI()

boolean isOriginalIRI ( String  absoluteIRI)
private
41  {
42  try {
43  rewriter.unrewrite(absoluteIRI);
44  return false;
45  } catch (IllegalArgumentException ex) {
46  // Tried to unrewrite an IRI that is already in original form
47  return true;
48  }
49  }

References RewrittenDataSource.rewriter, and IRIRewriter.unrewrite().

Referenced by RewrittenDataSource.canDescribe(), RewrittenDataSource.describeResource(), RewrittenDataSource.getHighIndegreeProperties(), RewrittenDataSource.getHighOutdegreeProperties(), and RewrittenDataSource.listPropertyValues().

◆ listPropertyValues()

Model listPropertyValues ( String  resourceIRI,
Property  property,
boolean  isInverse 
)

Returns a subgraph of the data source.

It lists the values of a particular property of a particular resource. Where values are blank nodes, a complete description of these anonymous resources must be included.

Parameters
resourceIRIThe resource to be examined
propertyThe property we're interested in
isInverseAre we interested in outgoing arcs (false) or incoming (true)?
Returns
A subgraph of the data source.

Implements DataSource.

103  {
104  if (isOriginalIRI(resourceIRI)) {
105  // According to our logic, the original namespace is empty
106  // because we transplanted it. It only contains a sameAs
107  // statements for every resource in it.
108  if (!addSameAs || !property.equals(OWL.sameAs) || !isInverse ||
109  original.describeResource(resourceIRI).isEmpty()) {
110  return ModelUtil.EMPTY_MODEL;
111  }
112  Model result = ModelFactory.createDefaultModel();
113  addSameAsStatement(result, rewriter.rewrite(resourceIRI));
114  return result;
115  }
116  // Normal case -- a rewritten IRI
117  Model result = rewriter.rewrite(
119  rewriter.unrewrite(resourceIRI),
120  rewriter.unrewrite(property),
121  isInverse));
122  if (addSameAs && !result.isEmpty() && property.equals(OWL.sameAs) && !isInverse) {
123  addSameAsStatement(result, resourceIRI);
124  }
125  return result;
126  }
Model listPropertyValues(String resourceIRI, Property property, boolean isInverse)
Returns a subgraph of the data source.

References RewrittenDataSource.addSameAs, RewrittenDataSource.addSameAsStatement(), DataSource.describeResource(), ModelUtil.EMPTY_MODEL, RewrittenDataSource.isOriginalIRI(), DataSource.listPropertyValues(), RewrittenDataSource.original, IRIRewriter.rewrite(), RewrittenDataSource.rewriter, and IRIRewriter.unrewrite().

Member Data Documentation

◆ addSameAs

◆ MAX_INDEX_SIZE

◆ original

◆ rewriter