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

Version Path
publish_my_data-1.3.25 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.24 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.23 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.22 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.21 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.20 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.19 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.18 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.17 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.16 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.15 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.14 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.13 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.12 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.11 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.10 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.9 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.8 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.7 app/models/publish_my_data/data_cube/dimension.rb
publish_my_data-1.3.6 app/models/publish_my_data/data_cube/dimension.rb