public Collection<Property> get() {
if (dataSource == null) return Collections.emptyList();
if (cache != null) return cache;
cache = new ArrayList<Property>();
Model result = dataSource.listPropertyValues(type.getURI(), RDF.type, true);
StmtIterator it = result.listStatements(null, RDF.type, type);
while (it.hasNext()) {
Resource r = it.next().getSubject();
if (!r.isURIResource()) continue;
cache.add(r.as(Property.class));
}