Merge branch 'master' of git+ssh://maxious.lambdacomplex.org/git/ckanext-datagovau
Merge branch 'master' of git+ssh://maxious.lambdacomplex.org/git/ckanext-datagovau

file:b/admin/data.gov.au (new)
  <VirtualHost 127.0.0.1:8080>
  ServerAdmin webmaster@localhost
 
  ServerName data.gov.au
  ServerAlias www.data.gov.au, opendata.linkdigital.com.au
 
 
  #allow access to local static content eg. logos
  Alias /index.html /var/www/index.html
  Alias /logos /var/www/logos
  Alias /tools /var/www/tools.shtml
  Alias /opendata /var/www/opendata.shtml
  Alias /opengov /var/www/opengov.shtml
 
  DocumentRoot /var/www
  <IfModule mod_expires.c>
  <FilesMatch "\.(jpe?g|png|gif|js|css)$">
  ExpiresActive On
  ExpiresDefault "access plus 1 week"
  </FilesMatch>
  </IfModule>
 
  <Directory />
  Options FollowSymLinks
  AllowOverride None
  </Directory>
 
  <Directory /var/www/>
  Options -Indexes -FollowSymLinks -MultiViews +Includes
  AllowOverride None
 
  Order allow,deny
  allow from all
 
  AddType text/html .shtml
  AddOutputFilter INCLUDES .shtml
  </Directory>
 
  ErrorLog ${APACHE_LOG_DIR}/error.log
 
  # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
  LogLevel warn
 
  CustomLog ${APACHE_LOG_DIR}/access.log varnishcombined
  RewriteEngine On
 
  RewriteMap lc int:tolower
 
  # RewriteRule ^/apps/antenna-mate/?$ http://antennamate.com/ [PT]
  # RewriteRule ^/apps/postcode-finder/?$ http://www.aus-emaps.com/postcode_finder.php [PT]
  # RewriteRule ^/apps/the-australian-cost-of-living-heatmap/?$ http://www.creditcardcompare.com.au/tools/cost-of-living-heatmap/ [PT]
  RewriteRule ^/catalogues/?$ /organization [PT]
  RewriteRule ^/dataset/“cycling-in-new-south-wales-what-the-data-tells-us”-and-related-data/? /dataset/2809cycling-in-new-south-wales-what-the-data-tells-us2809-and-related-data [PT]
  RewriteRule ^/dataset/apvma-pubcris-dataset-for-registered-agricultural-and-veterinary-chemical-products-and-approved-actives/? /dataset/apvma-pubcris-dataset-for-registered-agricultural-and-veterinary-chemical-products-and-approved-acti [PT]
  RewriteRule ^/dataset_category/business/?$ /group/business [PT]
  RewriteRule ^/dataset_category/community/?$ /group/community [PT]
  RewriteRule ^/dataset_category/geography/?$ /group/geography [PT]
  RewriteRule ^/dataset_category/government/?$ /group/government [PT]
  RewriteRule ^/dataset_category/health/?$ /group/health [PT]
  RewriteRule ^/dataset_category/?$ /group [PT]
  RewriteRule ^/feed/?$ /feeds/dataset.atom [PT]
  RewriteRule ^/jurisdiction/australian-capital-territory/?$ /dataset?q=act [PT]
  RewriteRule ^/jurisdiction/new-south-wales/?$ /dataset?q=new+south+wales [PT]
  RewriteRule ^/jurisdiction/queensland/?$ /dataset?q=queensland [PT]
  RewriteRule ^/jurisdiction/south-australia/?$ /dataset?q=south+australia [PT]
  RewriteRule ^/jurisdiction/victoria/?$ /dataset?q=victoria [PT]
  RewriteRule ^/jurisdiction/western-australia/?$ /dataset?q=western+australia [PT]
  RewriteRule ^/jurisdiction/?$ /dataset [PT]
 
  # RewriteCond %{QUERY_STRING} ^category=([a-z]+)
  # RewriteRule ^/data/?$ /group/${lc:%1}? [PT]
 
  # RewriteCond %{QUERY_STRING} ^format=Shapefile
  # RewriteRule ^/data/?$ /dataset?res_format=shp [PT]
 
  RewriteRule ^/data/?$ /dataset? [PT]
 
  RewriteCond %{QUERY_STRING} ^s=(.*)
  RewriteRule ^/ /dataset?q=%1 [PT]
 
 
  FilterDeclare OPENDATA
  FilterProvider OPENDATA SUBSTITUTE resp=Content-Type $text/
  FilterProvider OPENDATA SUBSTITUTE resp=Content-Type $/javascript
  FilterProvider OPENDATA SUBSTITUTE resp=Content-Type $/json
  FilterProvider OPENDATA SUBSTITUTE resp=Content-Type $/xml
  FilterChain OPENDATA
  Substitute "s#//opendata.linkdigital.com.au#//data.gov.au#"
 
  WSGIScriptAlias / /var/lib/ckan/dga/pyenv/bin/dga.py
  WSGIPassAuthorization On
 
  ErrorLog /var/log/apache2/ckandga.error.log
  CustomLog /var/log/apache2/ckandga.custom.log combined
  </VirtualHost>
 
file:b/admin/default.vcl (new)
  # This is a basic VCL configuration file for varnish. See the vcl(7)
  # man page for details on VCL syntax and semantics.
  #
  # Default backend definition. Set this to point to your content
  # server.
  #
  backend default {
  .host = "127.0.0.1";
  .port = "8080";
  }
 
  sub vcl_fetch {
  set beresp.grace = 1h;
 
  if (beresp.http.content-type ~ "(text|application)") {
  set beresp.do_gzip = true;
  }
  if (req.url ~ "\.(png|gif|jpg|jpeg|swf|css|js|woff|eot)$") {
  unset beresp.http.set-cookie;
  }
  }
  sub vcl_recv {
  if (req.url ~ "^/_tracking") {
  return (pass);
  }
  if (req.url ~ "\.(png|gif|jpg|jpeg|swf|css|js|woff|eot)$") {
  return(lookup);
  }
  if (req.http.Cookie) {
  set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__utm.=[^;]+;? *", "\1"); # removes all cookies named __utm? (utma, utmb...) - tracking thing
 
  if (req.http.Cookie == "") {
  remove req.http.Cookie;
  }
  }
  }
  sub vcl_deliver {
  if (!resp.http.Vary) {
  set resp.http.Vary = "Accept-Encoding";
  } else if (resp.http.Vary !~ "(?i)Accept-Encoding") {
  set resp.http.Vary = resp.http.Vary + ",Accept-Encoding";
  }
  if (obj.hits > 0) {
  set resp.http.X-Cache = "HIT";
  } else {
  set resp.http.X-Cache = "MISS";
  }
  }
 
  #
  # Below is a commented-out copy of the default VCL logic. If you
  # redefine any of these subroutines, the built-in logic will be
  # appended to your code.
  # sub vcl_recv {
  # if (req.restarts == 0) {
  # if (req.http.x-forwarded-for) {
  # set req.http.X-Forwarded-For =
  # req.http.X-Forwarded-For + ", " + client.ip;
  # } else {
  # set req.http.X-Forwarded-For = client.ip;
  # }
  # }
  # if (req.request != "GET" &&
  # req.request != "HEAD" &&
  # req.request != "PUT" &&
  # req.request != "POST" &&
  # req.request != "TRACE" &&
  # req.request != "OPTIONS" &&
  # req.request != "DELETE") {
  # /* Non-RFC2616 or CONNECT which is weird. */
  # return (pipe);
  # }
  # if (req.request != "GET" && req.request != "HEAD") {
  # /* We only deal with GET and HEAD by default */
  # return (pass);
  # }
  # if (req.http.Authorization || req.http.Cookie) {
  # /* Not cacheable by default */
  # return (pass);
  # }
  # return (lookup);
  # }
  #
  # sub vcl_pipe {
  # # Note that only the first request to the backend will have
  # # X-Forwarded-For set. If you use X-Forwarded-For and want to
  # # have it set for all requests, make sure to have:
  # # set bereq.http.connection = "close";
  # # here. It is not set by default as it might break some broken web
  # # applications, like IIS with NTLM authentication.
  # return (pipe);
  # }
  #
  # sub vcl_pass {
  # return (pass);
  # }
  #
  # sub vcl_hash {
  # hash_data(req.url);
  # if (req.http.host) {
  # hash_data(req.http.host);
  # } else {
  # hash_data(server.ip);
  # }
  # return (hash);
  # }
  #
  # sub vcl_hit {
  # return (deliver);
  # }
  #
  # sub vcl_miss {
  # return (fetch);
  # }
  #
  # sub vcl_fetch {
  # if (beresp.ttl <= 0s ||
  # beresp.http.Set-Cookie ||
  # beresp.http.Vary == "*") {
  # /*
  # * Mark as "Hit-For-Pass" for the next 2 minutes
  # */
  # set beresp.ttl = 120 s;
  # return (hit_for_pass);
  # }
  # return (deliver);
  # }
  #
  # sub vcl_deliver {
  # return (deliver);
  # }
  #
  # sub vcl_error {
  # set obj.http.Content-Type = "text/html; charset=utf-8";
  # set obj.http.Retry-After = "5";
  # synthetic {"
  # <?xml version="1.0" encoding="utf-8"?>
  # <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  # "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  # <html>
  # <head>
  # <title>"} + obj.status + " " + obj.response + {"</title>
  # </head>
  # <body>
  # <h1>Error "} + obj.status + " " + obj.response + {"</h1>
  # <p>"} + obj.response + {"</p>
  # <h3>Guru Meditation:</h3>
  # <p>XID: "} + req.xid + {"</p>
  # <hr>
  # <p>Varnish cache server</p>
  # </body>
  # </html>
  # "};
  # return (deliver);
  # }
  #
  # sub vcl_init {
  # return (ok);
  # }
  #
  # sub vcl_fini {
  # return (ok);
  # }
 
  <IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html application/xhtml+xml text/plain text/xml text/css application/json text/javascript application/javascript application/x-javascript
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/htm
 
  # Don't compress images
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
 
  # DeflateCompressionLevel 9
  </IfModule>
 
import logging import logging
   
import ckan.plugins as plugins import ckan.plugins as plugins
  import ckan.lib as lib
  import ckan.lib.dictization.model_dictize as model_dictize
import ckan.plugins.toolkit as tk import ckan.plugins.toolkit as tk
  import ckan.model as model
   
  #parse the activity feed for last active non-system user
  def get_last_active_user(id):
  system_user = "de0ba262-83fe-45e2-adda-41bb9f0c86d8"
  user_list = [x for x in lib.helpers.get_action('package_activity_list',{'id':id}) if x['user_id'] != system_user]
  user = user_list[0]['user_id']
  if user is None:
  return lib.helpers.get_action('user_show',{'id':system_user})
  else:
  return lib.helpers.get_action('user_show',{'id':user})
   
# get_action will be deprecated soon, this is the replacement # get user created datasets and those they have edited
def get_user(user): def get_user_datasets(user_dict):
user_name = unicode(user) created_datasets_list = user_dict['datasets']
if user_name: active_datasets_id_list = [x['data']['package'] for x in
user_obj = model.User.get(id) lib.helpers.get_action('user_activity_list',{'id':user_dict['id']}) if x['data'].get('package')]
context['user_obj'] = user_obj active_datasets_list = active_datasets_id_list #if you need more detail, fetch each dataset here
if user_obj is None: print active_datasets_list
raise NotFound return created_datasets_list + active_datasets_list
else:  
raise NotFound  
   
return model_dictize.user_dictize(user_obj,context)  
   
   
class ExampleIDatasetFormPlugin(plugins.SingletonPlugin, class ExampleIDatasetFormPlugin(plugins.SingletonPlugin,
tk.DefaultDatasetForm): tk.DefaultDatasetForm):
'''An example IDatasetForm CKAN plugin. '''An example IDatasetForm CKAN plugin.
   
Uses a tag vocabulary to add a custom metadata field to datasets. Uses a tag vocabulary to add a custom metadata field to datasets.
   
''' '''
plugins.implements(plugins.IConfigurer, inherit=False) plugins.implements(plugins.IConfigurer, inherit=False)
plugins.implements(plugins.IDatasetForm, inherit=False) plugins.implements(plugins.IDatasetForm, inherit=False)
plugins.implements(plugins.ITemplateHelpers, inherit=False) plugins.implements(plugins.ITemplateHelpers, inherit=False)
   
# These record how many times methods that this plugin's methods are # These record how many times methods that this plugin's methods are
# called, for testing purposes. # called, for testing purposes.
num_times_new_template_called = 0 num_times_new_template_called = 0
num_times_read_template_called = 0 num_times_read_template_called = 0
num_times_edit_template_called = 0 num_times_edit_template_called = 0
num_times_search_template_called = 0 num_times_search_template_called = 0
num_times_history_template_called = 0 num_times_history_template_called = 0
num_times_package_form_called = 0 num_times_package_form_called = 0
num_times_check_data_dict_called = 0 num_times_check_data_dict_called = 0
num_times_setup_template_variables_called = 0 num_times_setup_template_variables_called = 0
   
   
def update_config(self, config): def update_config(self, config):
# Add this plugin's templates dir to CKAN's extra_template_paths, so # Add this plugin's templates dir to CKAN's extra_template_paths, so
# that CKAN will use this plugin's custom templates. # that CKAN will use this plugin's custom templates.
# here = os.path.dirname(__file__) # here = os.path.dirname(__file__)
# rootdir = os.path.dirname(os.path.dirname(here)) # rootdir = os.path.dirname(os.path.dirname(here))
   
tk.add_template_directory(config, 'templates') tk.add_template_directory(config, 'templates')
tk.add_public_directory(config, 'theme/public') tk.add_public_directory(config, 'theme/public')
tk.add_resource('theme/public', 'ckanext-datagovau') tk.add_resource('theme/public', 'ckanext-datagovau')
# config['licenses_group_url'] = 'http://%(ckan.site_url)/licenses.json' # config['licenses_group_url'] = 'http://%(ckan.site_url)/licenses.json'
   
def get_helpers(self): def get_helpers(self):
return {'getuser': get_user} return {'get_last_active_user': get_last_active_user, 'get_user_datasets': get_user_datasets}
   
def is_fallback(self): def is_fallback(self):
# Return True to register this plugin as the default handler for # Return True to register this plugin as the default handler for
# package types not handled by any other IDatasetForm plugin. # package types not handled by any other IDatasetForm plugin.
return True return True
   
def package_types(self): def package_types(self):
# This plugin doesn't handle any special package types, it just # This plugin doesn't handle any special package types, it just
# registers itself as the default (above). # registers itself as the default (above).
return [] return []
   
   
def create_package_schema(self): def create_package_schema(self):
schema = super(ExampleIDatasetFormPlugin, self).create_package_schema() schema = super(ExampleIDatasetFormPlugin, self).create_package_schema()
schema = self._modify_package_schema(schema) schema = self._modify_package_schema(schema)
return schema return schema
   
def update_package_schema(self): def update_package_schema(self):
schema = super(ExampleIDatasetFormPlugin, self).update_package_schema() schema = super(ExampleIDatasetFormPlugin, self).update_package_schema()
schema = self._modify_package_schema(schema) schema = self._modify_package_schema(schema)
return schema return schema
   
def show_package_schema(self): def show_package_schema(self):
schema = super(ExampleIDatasetFormPlugin, self).show_package_schema() schema = super(ExampleIDatasetFormPlugin, self).show_package_schema()
   
# Don't show vocab tags mixed in with normal 'free' tags # Don't show vocab tags mixed in with normal 'free' tags
# (e.g. on dataset pages, or on the search page) # (e.g. on dataset pages, or on the search page)
schema['tags']['__extras'].append(tk.get_converter('free_tags_only')) schema['tags']['__extras'].append(tk.get_converter('free_tags_only'))
   
# Add our custom_text field to the dataset schema. # Add our custom_text field to the dataset schema.
# ignore_missing == optional # ignore_missing == optional
# ignore_empty == mandatory but not for viewing # ignore_empty == mandatory but not for viewing
# !!! always convert_from_extras first # !!! always convert_from_extras first
schema.update({ schema.update({
'agency_program': [tk.get_converter('convert_from_extras'), 'agency_program': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_missing')], tk.get_validator('ignore_missing')],
'contact_point': [tk.get_converter('convert_from_extras'), 'contact_point': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'spatial_coverage': [tk.get_converter('convert_from_extras'), 'spatial_coverage': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'granularity': [tk.get_converter('convert_from_extras'), 'granularity': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'jurisdiction': [tk.get_converter('convert_from_extras'), 'jurisdiction': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'temporal_coverage': [tk.get_converter('convert_from_extras'), 'temporal_coverage': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'data_state': [tk.get_converter('convert_from_extras'), 'data_state': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'update_freq': [tk.get_converter('convert_from_extras'), 'update_freq': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')] tk.get_validator('ignore_empty')]
}) })
return schema return schema
   
def _modify_package_schema(self, schema): def _modify_package_schema(self, schema):
# Add our custom_test metadata field to the schema, this one will use # Add our custom_test metadata field to the schema, this one will use
# convert_to_extras instead of convert_to_tags. # convert_to_extras instead of convert_to_tags.
# ignore_missing == optional # ignore_missing == optional
# not_empty == mandatory, enforced here while modifying # not_empty == mandatory, enforced here while modifying
   
schema.update({ schema.update({
'agency_program': [tk.get_validator('ignore_missing'), 'agency_program': [tk.get_validator('ignore_missing'),
tk.get_converter('convert_to_extras')], tk.get_converter('convert_to_extras')],
'contact_point': [tk.get_converter('convert_to_extras'), 'contact_point': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'spatial_coverage': [tk.get_converter('convert_to_extras'), 'spatial_coverage': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'granularity': [tk.get_converter('convert_to_extras'), 'granularity': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'jurisdiction': [tk.get_converter('convert_to_extras'), 'jurisdiction': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'temporal_coverage': [tk.get_converter('convert_to_extras'), 'temporal_coverage': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'data_state': [tk.get_converter('convert_to_extras'), 'data_state': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'update_freq': [tk.get_converter('convert_to_extras'), 'update_freq': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')] tk.get_validator('not_empty')]
}) })
return schema return schema
   
# These methods just record how many times they're called, for testing # These methods just record how many times they're called, for testing
# purposes. # purposes.
# TODO: It might be better to test that custom templates returned by # TODO: It might be better to test that custom templates returned by
# these methods are actually used, not just that the methods get # these methods are actually used, not just that the methods get
# called. # called.
   
def setup_template_variables(self, context, data_dict): def setup_template_variables(self, context, data_dict):
return super(ExampleIDatasetFormPlugin, self).setup_template_variables( return super(ExampleIDatasetFormPlugin, self).setup_template_variables(
context, data_dict) context, data_dict)
   
def new_template(self): def new_template(self):
return super(ExampleIDatasetFormPlugin, self).new_template() return super(ExampleIDatasetFormPlugin, self).new_template()
   
def read_template(self): def read_template(self):
return super(ExampleIDatasetFormPlugin, self).read_template() return super(ExampleIDatasetFormPlugin, self).read_template()
   
def edit_template(self): def edit_template(self):
return super(ExampleIDatasetFormPlugin, self).edit_template() return super(ExampleIDatasetFormPlugin, self).edit_template()
   
def search_template(self): def search_template(self):
return super(ExampleIDatasetFormPlugin, self).search_template() return super(ExampleIDatasetFormPlugin, self).search_template()
   
def history_template(self): def history_template(self):
return super(ExampleIDatasetFormPlugin, self).history_template() return super(ExampleIDatasetFormPlugin, self).history_template()
   
def package_form(self): def package_form(self):
return super(ExampleIDatasetFormPlugin, self).package_form() return super(ExampleIDatasetFormPlugin, self).package_form()
   
   
{% ckan_extends %} {% ckan_extends %}
   
{% block package_additional_info %} {% block package_additional_info %}
<section class="additional-info" xmlns:dcat="http://www.w3.org/ns/dcat#" <section class="additional-info" xmlns:dcat="http://www.w3.org/ns/dcat#"
xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcam="http://purl.org/dc/dcam/"
xmlns:aglsterms="http://www.agls.gov.au/agls/terms/" xmlns:aglsterms="http://www.agls.gov.au/agls/terms/"
xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/" xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/"
xmlns:availterms="http://www.agls.gov.au/agls/availterms/" xmlns:availterms="http://www.agls.gov.au/agls/availterms/"
xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/" xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/"
xmlns:dct="http://purl.org/dc/terms/"> xmlns:dct="http://purl.org/dc/terms/">
<h3>{{ _('Additional Info') }}</h3> <h3>{{ _('Additional Info') }}</h3>
<table class="table table-striped table-bordered table-condensed"> <table class="table table-striped table-bordered table-condensed">
<thead> <thead>
<tr> <tr>
<th scope="col">{{ _('Field') }}</th> <th scope="col">{{ _('Field') }}</th>
<th scope="col">{{ _('Value') }}</th> <th scope="col">{{ _('Value') }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
   
   
{# Add our custom field to the dataset read page. #} {# Add our custom field to the dataset read page. #}
{% if pkg.get('metadata_created') %} {% if pkg.get('metadata_created') %}
<tr> <tr>
<th scope="row" class="dataset-label">Date Published</th> <th scope="row" class="dataset-label">Date Published</th>
<td class="dataset-details" property="dct:issued">{{ pkg.metadata_created.split("T")[0] }}</td> <td class="dataset-details" property="dct:issued">{{ pkg.metadata_created.split("T")[0] }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('metadata_updated') %} {% if pkg.get('metadata_updated') %}
<tr> <tr>
<th scope="row" class="dataset-label">Date Updated</th> <th scope="row" class="dataset-label">Date Updated</th>
<td class="dataset-details" property="dct:updated">{{ pkg.metadata_updated.split("T")[0] }}</td> <td class="dataset-details" property="dct:updated">{{ pkg.metadata_updated.split("T")[0] }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('agency_program') %} {% if pkg.get('agency_program') %}
<tr> <tr>
<th scope="row" class="dataset-label">Agency Program</th> <th scope="row" class="dataset-label">Agency Program</th>
<td class="dataset-details"> {{ pkg.agency_program }}</td> <td class="dataset-details"> {{ pkg.agency_program }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('Agency Program') %} {% if pkg.get('Agency Program') %}
<tr> <tr>
<th scope="row" class="dataset-label">Agency Program</th> <th scope="row" class="dataset-label">Agency Program</th>
<td class="dataset-details"> {{ pkg.get('Agency Program') }}</td> <td class="dataset-details"> {{ pkg.get('Agency Program') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI') %} {% if h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI') %}
<tr> <tr>
<th scope="row" class="dataset-label">{{ _('Source') }}</th> <th scope="row" class="dataset-label">{{ _('Source') }}</th>
<td class="dataset-details" property="dct:source">{{ h.link_to(h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI'), <td class="dataset-details" property="dct:source">{{ h.link_to(h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI'),
h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI'), rel='dct:source', target='_blank') }} h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI'), rel='dct:source', target='_blank') }}
</td> </td>
</tr> </tr>
{% endif %} {% endif %}
   
{% if pkg.get('contact_point') %} {% if pkg.get('contact_point') %}
<tr> <tr>
<th scope="row" class="dataset-label">Contact Point</th> <th scope="row" class="dataset-label">Contact Point</th>
<td class="dataset-details" property="dcat:contactPoint"> {{ h.mail_to(email_address=pkg.contact_point, <td class="dataset-details" property="dcat:contactPoint"> {{ h.mail_to(email_address=pkg.contact_point,
name=pkg.contact_point) }}</td> name=pkg.contact_point) }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('spatial_coverage') %} {% if pkg.get('spatial_coverage') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Geospatial Coverage</th> <th scope="row" class="dataset-label">Geospatial Coverage</th>
<td class="dataset-details" property="dct:spatial"> {{ pkg.spatial_coverage }}</td> <td class="dataset-details" property="dct:spatial"> {{ pkg.spatial_coverage }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'Geospatial Coverage') %} {% if h.get_pkg_dict_extra(pkg,'Geospatial Coverage') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Geospatial Coverage</th> <th scope="row" class="dataset-label">Geospatial Coverage</th>
<td class="dataset-details" property="dct:spatial"> {{ h.get_pkg_dict_extra(pkg,'Geospatial Coverage') }}</td> <td class="dataset-details" property="dct:spatial"> {{ h.get_pkg_dict_extra(pkg,'Geospatial Coverage') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('granularity') %} {% if pkg.get('granularity') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Data Granularity</th> <th scope="row" class="dataset-label">Data Granularity</th>
<td class="dataset-details"> {{ pkg.granularity }}</td> <td class="dataset-details"> {{ pkg.granularity }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'Granularity') %} {% if h.get_pkg_dict_extra(pkg,'Granularity') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Data Granularity</th> <th scope="row" class="dataset-label">Data Granularity</th>
<td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Granularity') }}</td> <td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Granularity') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('jurisdiction') %} {% if pkg.get('jurisdiction') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Government Jurisdiction</th> <th scope="row" class="dataset-label">Government Jurisdiction</th>
<td class="dataset-details" property="aglsterms:AglsJuri"> {{ pkg.jurisdiction }}</td> <td class="dataset-details" property="aglsterms:AglsJuri"> {{ pkg.jurisdiction }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction') %} {% if h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Government Jurisdiction</th> <th scope="row" class="dataset-label">Government Jurisdiction</th>
<td class="dataset-details" property="aglsterms:AglsJuri"> {{ h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction') }}</td> <td class="dataset-details" property="aglsterms:AglsJuri"> {{ h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('temporal_coverage') %} {% if pkg.get('temporal_coverage') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Temporal Coverage</th> <th scope="row" class="dataset-label">Temporal Coverage</th>
<td class="dataset-details" property="dct:temporal"> {{ pkg.temporal_coverage }}</td> <td class="dataset-details" property="dct:temporal"> {{ pkg.temporal_coverage }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'Temporal Coverage') %} {% if h.get_pkg_dict_extra(pkg,'Temporal Coverage') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Temporal Coverage</th> <th scope="row" class="dataset-label">Temporal Coverage</th>
<td class="dataset-details" property="dct:temporal"> {{ h.get_pkg_dict_extra(pkg,'Temporal Coverage') }}</td> <td class="dataset-details" property="dct:temporal"> {{ h.get_pkg_dict_extra(pkg,'Temporal Coverage') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('data_state') %} {% if pkg.get('data_state') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Data State</th> <th scope="row" class="dataset-label">Data State</th>
<td class="dataset-details"> {{ pkg.data_state }}</td> <td class="dataset-details"> {{ pkg.data_state }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('update_freq') %} {% if pkg.get('update_freq') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Update Frequency</th> <th scope="row" class="dataset-label">Update Frequency</th>
<td class="dataset-details"> {{ pkg.update_freq }}</td> <td class="dataset-details"> {{ pkg.update_freq }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'Update Frequency') %} {% if h.get_pkg_dict_extra(pkg,'Update Frequency') %}
<tr> <tr>
<th scope="row" class="dataset-label">Update Frequency</th> <th scope="row" class="dataset-label">Update Frequency</th>
<td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Update Frequency') }}</td> <td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Update Frequency') }}</td>
</tr> </tr>
{% endif %} {% endif %}
   
{% if pkg.maintainer_email %} {% set email =h.get_last_active_user(c.pkg_dict['id']).get('email','') %}
<tr> <tr>
<th scope="row" class="dataset-label">{{ _('Maintainer') }}</th> <th scope="row" class="dataset-label">{{ _('Maintainer') }}</th>
<td class="dataset-details" property="dc:contributor">{{ <td class="dataset-details" property="dc:contributor">{{
h.mail_to(email_address=pkg.maintainer_email, name=pkg.maintainer) }} h.mail_to(email_address=(email or ' '), name=h.get_last_active_user(c.pkg_dict['id']).get("display_name",'')) }}
</td> </td>
</tr> </tr>
{% elif pkg.maintainer %}  
<tr> <tr>
<th scope="row" class="dataset-label">{{ _('Maintainer') }}</th> <th scope="row" class="dataset-label">Publisher/Agency</th>
<td class="dataset-details" property="dc:contributor">{{ pkg.maintainer }}</td> <td class="dataset-details" property="dc:publisher">{{ c.pkg_dict['organization']['title']}}
  </td>
</tr> </tr>
{% endif %} <tr>
  <th scope="row" class="dataset-label">Type</th>
  <td class="dataset-details" property="dc:type">Dataset</td>
  </tr>
  <tr>
  <th scope="row" class="dataset-label">Language</th>
  <td class="dataset-details" property="dc:language">English</td>
  </tr>
   
</tbody> </tbody>
</table> </table>
</section> </section>
   
   
{% endblock %} {% endblock %}
   
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<rdf:RDF <rdf:RDF
xmlns:py="http://genshi.edgewall.org/" xmlns:py="http://genshi.edgewall.org/"
xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcat="http://www.w3.org/ns/dcat#" xmlns:dcat="http://www.w3.org/ns/dcat#"
xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcam="http://purl.org/dc/dcam/"
xmlns:aglsterms="http://www.agls.gov.au/agls/terms/" xmlns:aglsterms="http://www.agls.gov.au/agls/terms/"
xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/" xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/"
xmlns:availterms="http://www.agls.gov.au/agls/availterms/" xmlns:availterms="http://www.agls.gov.au/agls/availterms/"
xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/" xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/"
xmlns:dct="http://purl.org/dc/terms/" xmlns:dct="http://purl.org/dc/terms/"
> >
<dcat:Dataset rdf:about="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}"> <dcat:Dataset rdf:about="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}">
<dct:identifier>${c.pkg_dict['name']}</dct:identifier> <dct:identifier>${c.pkg_dict['name']}</dct:identifier>
<dct:title>${c.pkg_dict['title']}</dct:title> <dct:title>${c.pkg_dict['title']}</dct:title>
<dct:landingPage <dct:landingPage
rdf:resource="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True) }"/> rdf:resource="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True) }"/>
<owl:sameAs rdf:resource="urn:uuid:${c.pkg_dict['id']}"/> <owl:sameAs rdf:resource="urn:uuid:${c.pkg_dict['id']}"/>
<dct:type>Dataset</dct:type> <dct:type>Dataset</dct:type>
<dct:description>${c.pkg_dict['notes']}</dct:description> <dct:description>${c.pkg_dict['notes']}</dct:description>
<dct:issued>${c.pkg_dict['metadata_created']}</dct:issued> <dct:issued>${c.pkg_dict['metadata_created']}</dct:issued>
<dct:modified>${c.pkg_dict['metadata_modified']}</dct:modified> <dct:modified>${c.pkg_dict['metadata_modified']}</dct:modified>
<dct:language>en</dct:language> <dct:language>en</dct:language>
   
  <py:choose>
  <py:when test="c.pkg_dict.get('license_url',None)">
<dct:license>${c.pkg_dict['license_url']}</dct:license> <dct:license>${c.pkg_dict['license_url']}</dct:license>
  <dct:rights rdf:resource="${c.pkg_dict['license_url']}"/>
  </py:when>
  <py:otherwise>
  <dct:license>${c.pkg_dict['license_id']}</dct:license>
  <dct:rights rdf:resource="${c.pkg_dict['license_id']}"/>
  </py:otherwise>
  </py:choose>
<py:for each="tag_dict in c.pkg_dict.get('tags',[])"> <py:for each="tag_dict in c.pkg_dict.get('tags',[])">
<dcat:keyword>${ tag_dict["name"] }</dcat:keyword> <dcat:keyword>${ tag_dict["name"] }</dcat:keyword>
</py:for> </py:for>
<py:for each="group_dict in c.pkg_dict.get('groups',[])"> <py:for each="group_dict in c.pkg_dict.get('groups',[])">
<dcat:theme>${ group_dict["title"] }</dcat:theme> <dcat:theme>${ group_dict["title"] }</dcat:theme>
</py:for> </py:for>
   
<foaf:homepage <foaf:homepage
rdf:resource="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}"/> rdf:resource="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}"/>
<rdfs:label>${c.pkg_dict['name']}</rdfs:label> <rdfs:label>${c.pkg_dict['name']}</rdfs:label>
   
   
<py:for each="rsc_dict in c.pkg_dict['resources']"> <py:for each="rsc_dict in c.pkg_dict['resources']">
<dcat:distribution> <dcat:distribution>
<dcat:Distribution> <dcat:Distribution>
<dct:title>${rsc_dict.get('name')}</dct:title> <dct:title>${rsc_dict.get('name')}</dct:title>
<owl:sameAs rdf:resource="urn:uuid:${rsc_dict.get('id')}"/> <owl:sameAs rdf:resource="urn:uuid:${rsc_dict.get('id')}"/>
<dct:description>${rsc_dict.get('description')}</dct:description> <dct:description>${rsc_dict.get('description')}</dct:description>
<dcat:accessURL rdf:resource="${ rsc_dict.get('url') }"/> <dcat:accessURL rdf:resource="${ rsc_dict.get('url') }"/>
<dct:created>${rsc_dict.get('created')}</dct:created> <dct:created>${rsc_dict.get('created')}</dct:created>
<dct:modified>${rsc_dict.get('revision_timestamp')}</dct:modified> <dct:modified>${rsc_dict.get('revision_timestamp')}</dct:modified>
<dcat:byteSize py:if="rsc_dict.get('size')">${rsc_dict.get('size')}</dcat:byteSize> <dcat:byteSize py:if="rsc_dict.get('size')">${rsc_dict.get('size')}</dcat:byteSize>
<dcat:mediaType py:if="rsc_dict.get('mimetype')">${rsc_dict.get('mimetype')}</dcat:mediaType> <dcat:mediaType py:if="rsc_dict.get('mimetype')">${rsc_dict.get('mimetype')}</dcat:mediaType>
<dct:extent py:if="rsc_dict.get('size')">${rsc_dict.get('size')} bytes</dct:extent> <dct:extent py:if="rsc_dict.get('size')">${rsc_dict.get('size')} bytes</dct:extent>
<dct:format py:if="rsc_dict.get('format')"> <dct:format py:if="rsc_dict.get('format')">
<dct:IMT> <dct:IMT>
<rdf:value>${rsc_dict.get('format')}</rdf:value> <rdf:value>${rsc_dict.get('format')}</rdf:value>
<rdfs:label>${rsc_dict.get('format')}</rdfs:label> <rdfs:label>${rsc_dict.get('format')}</rdfs:label>
</dct:IMT> </dct:IMT>
</dct:format> </dct:format>
<dct:title py:if="rsc_dict.get('name')">${rsc_dict.get('name')}</dct:title> <dct:title py:if="rsc_dict.get('name')">${rsc_dict.get('name')}</dct:title>
</dcat:Distribution> </dcat:Distribution>
</dcat:distribution> </dcat:distribution>
</py:for> </py:for>
<dct:publisher py:if="c.pkg_dict.get('organization', None)"> <dct:publisher py:if="c.pkg_dict.get('organization', None)">
<rdf:Description> <rdf:Description>
<foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name> <foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name>
</rdf:Description> </rdf:Description>
</dct:publisher> </dct:publisher>
<dct:creator py:if="c.pkg_dict.get('organization', None)"> <dct:creator py:if="c.pkg_dict.get('organization', None)">
<rdf:Description> <rdf:Description>
<foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name> <foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name>
</rdf:Description> </rdf:Description>
</dct:creator> </dct:creator>
<dct:contributor <dct:contributor>
py:with="username = h.get_action('package_activity_list',{'id':c.pkg_dict['id']})[0]['user_id']">  
<rdf:Description> <rdf:Description>
<foaf:name>${h.get_action("user_show",{"id":username})["display_name"]}</foaf:name> <foaf:name>${h.get_last_active_user(c.pkg_dict['id'])["display_name"]}</foaf:name>
<foaf:mbox py:if="h.get_action('user_show',{'id':username}).get('email', None)" <foaf:mbox py:if="h.get_last_active_user(c.pkg_dict['id']).get('email', None)"
rdf:resource="mailto:${h.get_action('user_show',{'id':username})['email']}"/> rdf:resource="mailto:${h.get_last_active_user(c.pkg_dict['id'])['email']}"/>
</rdf:Description> </rdf:Description>
</dct:contributor> </dct:contributor>
   
<dct:rights py:if="c.pkg_dict.get('license_url', None)" rdf:resource="${c.pkg_dict['license_url']}"/>  
   
<foaf:homepage py:if="h.get_pkg_dict_extra(c.pkg_dict,'DCTERMS.Source.URI')">${h.get_pkg_dict_extra(c.pkg_dict,'DCTERMS.Source.URI') } <foaf:homepage py:if="h.get_pkg_dict_extra(c.pkg_dict,'DCTERMS.Source.URI')">${h.get_pkg_dict_extra(c.pkg_dict,'DCTERMS.Source.URI') }
</foaf:homepage> </foaf:homepage>
   
<dcat:contactPoint py:if="c.pkg_dict.get('contact_point')">${c.pkg_dict.contact_point }</dcat:contactPoint> <dcat:contactPoint py:if="c.pkg_dict.get('contact_point')">${c.pkg_dict.contact_point }</dcat:contactPoint>
<dct:spatial py:if="c.pkg_dict.get('spatial_coverage')">${ c.pkg_dict.spatial_coverage }</dct:spatial> <dct:spatial py:if="c.pkg_dict.get('spatial_coverage')">${ c.pkg_dict.spatial_coverage }</dct:spatial>
<dct:spatial py:if="h.get_pkg_dict_extra(c.pkg_dict,'Geospatial Coverage')">${ h.get_pkg_dict_extra(c.pkg_dict,'Geospatial Coverage') }</dct:spatial> <dct:spatial py:if="h.get_pkg_dict_extra(c.pkg_dict,'Geospatial Coverage')">${ h.get_pkg_dict_extra(c.pkg_dict,'Geospatial Coverage') }</dct:spatial>
<aglsterms:AglsJuri py:if="c.pkg_dict.get('jurisdiction')">${ c.pkg_dict.jurisdiction }</aglsterms:AglsJuri> <aglsterms:AglsJuri py:if="c.pkg_dict.get('jurisdiction')">${ c.pkg_dict.jurisdiction }</aglsterms:AglsJuri>
<aglsterms:AglsJuri py:if="h.get_pkg_dict_extra(c.pkg_dict,'AGLSTERMS.Jurisdiction')">${ h.get_pkg_dict_extra(c.pkg_dict,'AGLSTERMS.Jurisdiction') }</aglsterms:AglsJuri> <aglsterms:AglsJuri py:if="h.get_pkg_dict_extra(c.pkg_dict,'AGLSTERMS.Jurisdiction')">${ h.get_pkg_dict_extra(c.pkg_dict,'AGLSTERMS.Jurisdiction') }</aglsterms:AglsJuri>
<dct:temporal py:if="c.pkg_dict.get('temporal_coverage')">${ c.pkg_dict.get('temporal_coverage') }</dct:temporal> <dct:temporal py:if="c.pkg_dict.get('temporal_coverage')">${ c.pkg_dict.get('temporal_coverage') }</dct:temporal>
<dct:temporal py:if="h.get_pkg_dict_extra(c.pkg_dict,'Temporal Coverage')">${ h.get_pkg_dict_extra(c.pkg_dict,'Temporal Coverage') }</dct:temporal> <dct:temporal py:if="h.get_pkg_dict_extra(c.pkg_dict,'Temporal Coverage')">${ h.get_pkg_dict_extra(c.pkg_dict,'Temporal Coverage') }</dct:temporal>
<dct:relation py:if="c.pkg_dict.get('data_state')"> <dct:relation py:if="c.pkg_dict.get('data_state')">
<rdf:Description> <rdf:Description>
<rdfs:label>Data State</rdfs:label> <rdfs:label>Data State</rdfs:label>
<rdf:value>${ c.pkg_dict.get('data_state') }</rdf:value> <rdf:value>${ c.pkg_dict.get('data_state') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
   
<dct:relation py:if="c.pkg_dict.get('update_freq')"> <dct:relation py:if="c.pkg_dict.get('update_freq')">
<rdf:Description> <rdf:Description>
<rdfs:label>Update Frequency</rdfs:label> <rdfs:label>Update Frequency</rdfs:label>
<rdf:value>${ c.pkg_dict.get('update_freq') }</rdf:value> <rdf:value>${ c.pkg_dict.get('update_freq') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
<dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency')"> <dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency')">
<rdf:Description> <rdf:Description>
<rdfs:label>Update Frequency</rdfs:label> <rdfs:label>Update Frequency</rdfs:label>
<rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency') }</rdf:value> <rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
   
<dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Agency Program')"> <dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Agency Program')">
<rdf:Description> <rdf:Description>
<rdfs:label>Agency Program</rdfs:label> <rdfs:label>Agency Program</rdfs:label>
<rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Agency Program') }</rdf:value> <rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Agency Program') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
<dct:relation py:if="c.pkg_dict.get('agency_program')"> <dct:relation py:if="c.pkg_dict.get('agency_program')">
<rdf:Description> <rdf:Description>
<rdfs:label>Agency Program</rdfs:label> <rdfs:label>Agency Program</rdfs:label>
<rdf:value>${ c.pkg_dict.get('agency_program') }</rdf:value> <rdf:value>${ c.pkg_dict.get('agency_program') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
   
<dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Granularity')"> <dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Granularity')">
<rdf:Description> <rdf:Description>
<rdfs:label>Data Granularity</rdfs:label> <rdfs:label>Data Granularity</rdfs:label>
<rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Granularity') }</rdf:value> <rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Granularity') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
<dct:relation py:if="c.pkg_dict.get('granularity')"> <dct:relation py:if="c.pkg_dict.get('granularity')">
<rdf:Description> <rdf:Description>
<rdfs:label>Data Granularity</rdfs:label> <rdfs:label>Data Granularity</rdfs:label>
<rdf:value>${ c.pkg_dict.get('granularity') }</rdf:value> <rdf:value>${ c.pkg_dict.get('granularity') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
   
<py:for each="extra_dict in c.pkg_dict.get('extras',[])"> <py:for each="extra_dict in c.pkg_dict.get('extras',[])">
<dct:relation> <dct:relation>
<rdf:Description> <rdf:Description>
<rdfs:label>${extra_dict.get('key','')}</rdfs:label> <rdfs:label>${extra_dict.get('key','')}</rdfs:label>
<rdf:value>${extra_dict.get('value','')}</rdf:value> <rdf:value>${extra_dict.get('value','')}</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
</py:for> </py:for>
</dcat:Dataset> </dcat:Dataset>
</rdf:RDF> </rdf:RDF>
   
  {% ckan_extends %}
 
  {% block primary_content_inner %}
  <h2 class="page-heading">{{ _('My Datasets') }}</h2>
  {% if h.get_user_datasets(c.user_dict) %}
  {% snippet 'snippets/package_list.html', packages=h.get_user_datasets(c.user_dict) %}
  {% else %}
  <p class="empty">
  You haven\'t created/edited any datasets.
  {% if h.check_access('package_create') %}
  {% link_for _('Create one now?'), controller='package', action='new' %}
  {% endif %}
  </p>
  {% endif %}
  {% endblock %}
 
  {% ckan_extends %}
 
 
  {% block primary_content_inner %}
  <h2 class="hide-heading">
  {% block page_heading %}{{ _('Datasets') }}{% endblock %}
  </h2>
  {% block package_list %}
  {% if h.get_user_datasets(c.user_dict) %}
  {% snippet 'snippets/package_list.html', packages=h.get_user_datasets(c.user_dict) %}
  {% else %}
 
  {% if c.is_myself %}
  <p class="empty">
  {{ _('You haven\'t created any datasets.') }}
  {% if h.check_access('package_create') %}
  {% link_for _('Create one now?'), controller='package', action='new' %}
  {% endif %}
  </p>
  {% else %}
  <p class="empty">
  {{ _('User hasn\'t created any datasets.') }}
  </p>
  {% endif %}
  {% endif %}
  {% endblock %}
  {% endblock %}