package at.ac.univie.mminf.qskos4j.issues.outlinks;
import at.ac.univie.mminf.qskos4j.issues.Issue;
import at.ac.univie.mminf.qskos4j.result.CollectionResult;
import org.openrdf.OpenRDFException;
import org.openrdf.model.Resource;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.repository.RepositoryResult;
import java.util.HashSet;
import java.util.Set;
/**
* Created by christian
* Date: 26.01.13
* Time: 16:30
*
* Finds resources not within the HTTP URI scheme (<a href="https://github.com/cmader/qSKOS/wiki/Quality-Issues#wiki-HTTP_URI_Scheme_Violation">HTTP URI Scheme Violation</a>.
*/
public class HttpUriSchemeViolations extends Issue<CollectionResult<String>> {
public HttpUriSchemeViolations() {
super("husv",
"HTTP URI Scheme Violation",
"Finds triple subjects that are no HTTP URIs",
IssueType.ANALYTICAL,
new URIImpl("https://github.com/cmader/qSKOS/wiki/Quality-Issues#http-uri-scheme-violation")
);
}
@Override
protected CollectionResult<String> invoke() throws OpenRDFException {
Set<String> nonHttpURIs = new HashSet<String>();
RepositoryResult<Statement> allStatements = repCon.getStatements(null, null, null, false);
while (allStatements.hasNext()) {
Statement statement = allStatements.next();
if (isNonHttpURI(statement.getSubject())) {
nonHttpURIs.add(statement.getSubject().stringValue());
}
}
return new CollectionResult<String>(nonHttpURIs);
}
private boolean isNonHttpURI(Resource resource) {
if (resource instanceof URI) {
String uri = resource.stringValue().toLowerCase();
if (!uri.contains("http://") && !uri.contains("https://")) {
return true;
}
}
return false;
}
}