Sha256: a9292a341821721747be6fc7d734521b584ee30de3938ff8cc2150c6bc9a6507
Contents?: true
Size: 1.6 KB
Versions: 31
Compression:
Stored size: 1.6 KB
Contents
module PublishMyData module DataCube class Dimension include PublishMyData::CubeResults attr_reader :uri attr_reader :cube attr_reader :label PAGE_SIZE = 5000 def initialize(uri, cube, label = nil) @uri = uri @cube = cube @label = label end # get all the possible values (uris and labels) for this dimension in the dataset passed in. # paginates internally if necessary. def values sparql = values_sparql(labels:true) results = loop_and_page_sparql_query(sparql) # by default this tries 5000 rows at a time. uris_and_labels_only(results) end def size # don't get labels and don't paginate. sparql = values_sparql({labels:false}) sq = Tripod::SparqlQuery.new(sparql) count_sparql = sq.as_count_query_str result = Tripod::SparqlClient::Query.select(count_sparql) result[0]["tripod_count_var"]["value"].to_i end private def values_sparql(opts={}) labels = opts[:labels] sparql = "PREFIX qb: <http://purl.org/linked-data/cube#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT DISTINCT ?uri #{labels ? '?label' : ""} WHERE { GRAPH <#{cube.dataset.data_graph_uri.to_s}> { ?obs qb:dataSet <#{cube.dataset.uri.to_s}> . ?obs <#{self.uri.to_s}> ?uri . } " sparql += "OPTIONAL { ?uri rdfs:label ?label . } " if labels sparql += " } " sparql += " ORDER BY #{labels ? '?label' : ''} ?uri" sparql end end end end
Version data entries
31 entries across 31 versions & 1 rubygems