Friday, March 20, 2015

Linked Open Election Framework for Publishing Election Data and Results in Structured Formats

Author:
Topics: , , , , ,
Situation analysis

In most part of the world, there is hardly any freely available database of political election results in existence. This is because the data required to compile it is located in different websites or documents. The information is presented in many different formats and many different ways, and the only way the information can be compiled for re-use is by manual methods.

The Linked Open Election Framework is supporting the publication of election results as (the language used to write web pages) embed (called "Metadata") in the source code. Though invisible to normal users, publishing the information in this way gives it structure and meaning, and allowing machines to understand its meaning.

What is the Linked Open Election Framework?

The main point of is to aid accountability and transparency and this framework supports the publication and public access to Election results on websites as – data that is published under an open licence that allows unrestricted reuse, and that is marked up to identify the structure and meaning, making possible its automated collection for re-publishing and mashing up with other data.

How does it work?

Rather than publishing using not-so open formats or standards like PDF, HTML, Plain Text, etc, we embed machine-readable metadata in the HTML source code of web pages. These metadata is derived from information defined from the Election data. Entities or "things" that make up the Election data are defined as items and described in an HTML page. Each item is made up of one or more key-value pairs: a property and a value. The Microdata syntax is completely made up of HTML attributes. These attributes can be used on any valid HTML element. This gives the information structure and meaning, with a licence to allow collection, collation and reuse by anyone at no cost.

This structured information or "Structured Data" is a broad term that encompasses various standards and encoding mechanisms but, at the end of the day, refers to information provided to data consumers specifically for machine consumption. This machine-readable code is closely-allied to, but separate from, the presentation layer that us humans consume when we read a web page, providing a way for dumb machines to better understand the entities and connections between entities present in a piece of content.

Although this additional code does not directly impact the user's experience of the page, it makes a big difference to machines (including Bots, Smart Agents, Search Engines, etc), helping them to "understand" that (for example) this webpage:

  • Is a News Article
  • Has the headline "Election Results for Ekiti Governorship Election 2014"
  • Has information on a "Poll" event held on June 21, 2014

To make this metadata available we have used a vocabulary (or ) called Linked Open Election. This vocabulary provides a simple way of expressing Election data and information in Linked Data formats. Additionally, we used vocabulary proposed by Google, Bing, Yahoo and others

This metadata comprises of real-world entities refered by Uniform Resource Identifiers (URIs).

Benefits

: An immediate benefit of this work will be that search engines will be better able to display links to these News articles, helping users to find relevant stories and to determine from a search engine's listings the relevance of the article to the story that they are searching for and ultimately help to open up references to the data contained in those stories.

Linked Open Data: It will create an open database of election data and results.

Why is it important?

The use of Linked Open Data provides a clear signal to every organizations and governments the imminence of the "web of data" or Web 3.0. Every Web Site has to evolve into a Linked Data Space: a location on the Web that provides granular access to discrete data items in line with the core principles of the Linked Data meme.

Remember, the essence of the Linked Data meme is simply this: you reference data items and access their metadata, in variety of formats via a single HTTP based URI. This approach to Web data publishing is compatible with any HTTP aware user agent (e.g. your Web Browser or tools & applications that provide abstracted access to HTTP).

Do you need a special software to do this?

No, just the same way to mark up HTML. This also works in Content Management and Blogging system.

Tutorials & How to

  • How to Embed Election Data in HTML using HTML5, Microdata and Linked Data - Read
  • How to Publish Election Data in Nanotation (aka micro-Turtle) - Read
  • Sample Nanotation on Election Data and Results - View
  • Sample Election Data in RDF (turtle) document - View
  • Sample Election Data in HTML5, Microdata format - View
  • Sample Election Poll Data in RDF (turtle) document - View
  • List of Nigerian Political Parties in RDF (turtle) document - View
  • Linked Open Election Ontology - View
  • Prefix - loe
  • About Linked Open Election Framework - Read

Tuesday, March 10, 2015

Sample Nanotation on Election Data and Results

Sample Nanotation on Election Data

.

Nanotation,also known as micro , that describes an election that was held on the 21st of june 2014 in Nigeria is as follows:


	{

		@prefix schema:   .
		@prefix election:  .
		
		<>
		a schema:NewsArticle, election:Poll ;
		
		schema:name "Election Results";
		schema:headline "Election Results";

		schema:author [
				  a schema:Person ;
				  schema:name "Emeka Okoye" ;
				  schema:url  ;
		
		]	;
		schema:creator [
				  a schema:Person ;
				  schema:name "Emeka Okoye" ;
				  schema:url  ;
		
		]	;
		
		schema:about [
				  a schema:Thing ;
				  schema:name "Election" ;
				  schema:url  ;
		
		]	, 
		
		[
				  a schema:Thing ;
				  schema:name "Elections in Nigeria" ;
				  schema:url  ;
		
		]	; 
		
		schema:articleBody "your story or article goes here" ;
		schema:sourceOrganization 	[
				  a schema:Organization ;
				  schema:name "OpenDataNG" ;
				  schema:url  ;
		
		]	; 

		schema:provider [
				  a schema:Organization ;
				  schema:name "OpenDataNG" ;
				  schema:url  ;
		
		]	;  
		
		election:hasElectionDate "2014-06-21"^^xsd:date ;
		election:hasConstituency  ;
		election:hasRegisteredVoters "733766"^^xsd:integer ;
		election:hasAccreditedVoters "369257"^^xsd:integer ;
		election:hasTotalBallots "360455"^^xsd:integer ;
		election:hasInvalidBallots "10089"^^xsd:integer ;
		election:hasValidBallots "350366"^^xsd:integer ;
		election:hasViolence "false"^^xsd:boolean ;
		election:isCandidate <#candidate1>, <#candidate2>, <#candidate3> ;
		election:hasElectoralFraud "false"^^xsd:boolean .
		
		<#candidate1> a election:Candidate ;
		schema:name "Ayodele Peter Fayose" ;
		election:isOfPoliticalParty  ;
		election:hasVotes "203090"^^xsd:integer ;
		election:isElected "true"^^xsd:boolean .

		<#candidate2> a election:Candidate ;
		schema:name "John Olukayode Fayemi" ;
		election:isOfPoliticalParty  ;
		election:hasVotes "120433"^^xsd:integer ;
		election:isElected "false"^^xsd:boolean .
		
		
		<#candidate3> a election:Candidate ;
		schema:name "Bamidele Michael Opeyemi" ;
		election:isOfPoliticalParty  ;
		election:hasVotes "18135"^^xsd:integer ;
		election:isElected "false"^^xsd:boolean .
		
	
	}

Friday, March 6, 2015

Linked Open Election Framework Implementation Guide for Nanotation

How to Publish Election Data in Nanotation

.

Subjects: , , ,

Introduction:

This guide will show you how to implement the Linked Open Election Data using Nanotation and the Linked Election Framework.

Nanotations, which are micro Turtle, are deployable from any social media/networking space or service that offers the ability to post plain text (Twitter Tweets, Facebook Posts, Google+ Posts, LinkedIn Posts, Blog Posts, Comments, Mailing List Posts etc.. ).

This guide assumes a basic knowledge of Nanotation. If you're new to the subject or just need some brushing up, we recommend that you read the Kingsley Idehen's post on Nanotation.

Solution:

  1. First thing to do is to define the article or post that will host the election data:

    	{
    
    		@prefix schema:   .
    		
    		<>
    		a schema:NewsArticle ;
    		
    	}
     
    Please note that you can also use other Schema.org classes like schema:Article,schema:TechArticle, schema:BlogPost, schema:ScholarlyArticle as the document type.

  2. Define the name and headline of the post.

     
    	{
    
    		@prefix schema:   .
    		
    		<>
    		a schema:NewsArticle ;
    		
    		schema:name "Election Results";
    		schema:headline "Election Results".
    	
    	}
     

  3. Embed the author's name and profile URI (eg. Google+, WebID-Profile, DBpedia, Freebase, etc) :

    	{
    
    		@prefix schema:   .
    		
    		<>
    		a schema:NewsArticle ;
    		
    		schema:name "Election Results";
    		schema:headline "Election Results";
    
    		schema:author [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		schema:creator [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	.
    	
    	}
    
     

  4. Annotate the data, tags or subject associated with the article. You can define as many as possible using entities in Wikipedia, Freebase and Linked Open Data (LOD), delimited with commas :

     	{
    
    		@prefix schema:   .
    		
    		<>
    		a schema:NewsArticle ;
    		
    		schema:name "Election Results";
    		schema:headline "Election Results";
    
    		schema:author [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		schema:creator [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		
    		schema:about [
    				  a schema:Thing ;
    				  schema:name "Election" ;
    				  schema:url  ;
    		
    		]	, 
    		
    		[
    				  a schema:Thing ;
    				  schema:name "Elections in Nigeria" ;
    				  schema:url  ;
    		
    		]	. 
    	
    	}
    
     
    We're going to finish by annotating all of the data we've asserted concerning the article's associated entities.

  5. Embed your news story or article within the attribute "articleBody" .

     	{
    
    		@prefix schema:   .
    		
    		<>
    		a schema:NewsArticle ;
    		
    		schema:name "Election Results";
    		schema:headline "Election Results";
    
    		schema:author [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		schema:creator [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		
    		schema:about [
    				  a schema:Thing ;
    				  schema:name "Election" ;
    				  schema:url  ;
    		
    		]	, 
    		
    		[
    				  a schema:Thing ;
    				  schema:name "Elections in Nigeria" ;
    				  schema:url  ;
    		
    		]	; 
    		
    		schema:articleBody "your story or article goes here" .
    	
    	}
    
     

  6. Embed the election results. See subsequent steps on how to embed election polling data.

  7. Define and setup your poll and add the election schema.

     
     	{
    
    		@prefix schema:   .
    		@prefix election:  .
    		
    		<>
    		a schema:NewsArticle, election:Poll ;
    		
    		schema:name "Election Results";
    		schema:headline "Election Results";
    
    		schema:author [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		schema:creator [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		
    		schema:about [
    				  a schema:Thing ;
    				  schema:name "Election" ;
    				  schema:url  ;
    		
    		]	, 
    		
    		[
    				  a schema:Thing ;
    				  schema:name "Elections in Nigeria" ;
    				  schema:url  ;
    		
    		]	; 
    		
    		schema:articleBody "your story or article goes here" .
    	
    	}
      
     

  8. Add and update the attributes of the poll and candidates

     	{
    
    		@prefix schema:   .
    		@prefix election:  .
    		
    		<>
    		a schema:NewsArticle, election:Poll ;
    		
    		schema:name "Election Results";
    		schema:headline "Election Results";
    
    		schema:author [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		schema:creator [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		
    		schema:about [
    				  a schema:Thing ;
    				  schema:name "Election" ;
    				  schema:url  ;
    		
    		]	, 
    		
    		[
    				  a schema:Thing ;
    				  schema:name "Elections in Nigeria" ;
    				  schema:url  ;
    		
    		]	; 
    		
    		schema:articleBody "your story or article goes here" ;
    		
    		election:hasElectionDate "2014-06-21"^^xsd:date ;
    		election:hasConstituency  ;
    		election:hasRegisteredVoters "733766"^^xsd:integer ;
    		election:hasAccreditedVoters "369257"^^xsd:integer ;
    		election:hasTotalBallots "360455"^^xsd:integer ;
    		election:hasInvalidBallots "10089"^^xsd:integer ;
    		election:hasValidBallots "350366"^^xsd:integer ;
    		election:hasViolence "false"^^xsd:boolean ;
    		election:isCandidate <#candidate1>, <#candidate2>, <#candidate3> ;
    		election:hasElectoralFraud "false"^^xsd:boolean .
    		
    		<#candidate1> a election:Candidate ;
    		schema:name "Ayodele Peter Fayose" ;
    		election:isOfPoliticalParty  ;
    		election:hasVotes "203090"^^xsd:integer ;
    		election:isElected "true"^^xsd:boolean .
    
    		<#candidate2> a election:Candidate ;
    		schema:name "John Olukayode Fayemi" ;
    		election:isOfPoliticalParty  ;
    		election:hasVotes "120433"^^xsd:integer ;
    		election:isElected "false"^^xsd:boolean .
    		
    		
    		<#candidate3> a election:Candidate ;
    		schema:name "Bamidele Michael Opeyemi" ;
    		election:isOfPoliticalParty  ;
    		election:hasVotes "18135"^^xsd:integer ;
    		election:isElected "false"^^xsd:boolean .
    	
    	
    	}
    
    
    	
     

  9. Finally, you can add the provider organization data. The url attribute should be the website URL of the news or blogger organization while the name of the organization is added to the name attribute:

    
     	{
    
    		@prefix schema:   .
    		@prefix election:  .
    		
    		<>
    		a schema:NewsArticle, election:Poll ;
    		
    		schema:name "Election Results";
    		schema:headline "Election Results";
    
    		schema:author [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		schema:creator [
    				  a schema:Person ;
    				  schema:name "Creator's name" ;
    				  schema:url  ;
    		
    		]	;
    		
    		schema:about [
    				  a schema:Thing ;
    				  schema:name "Election" ;
    				  schema:url  ;
    		
    		]	, 
    		
    		[
    				  a schema:Thing ;
    				  schema:name "Elections in Nigeria" ;
    				  schema:url  ;
    		
    		]	; 
    		
    		schema:articleBody "your story or article goes here" ;
    		schema:sourceOrganization 	[
    				  a schema:Organization ;
    				  schema:name "Your organization name" ;
    				  schema:url  ;
    		
    		]	; 
    
    		schema:provider [
    				  a schema:Organization ;
    				  schema:name "Your organization name" ;
    				  schema:url  ;
    		
    		]	;  
    		
    		election:hasElectionDate "2014-06-21"^^xsd:date ;
    		election:hasConstituency  ;
    		election:hasRegisteredVoters "733766"^^xsd:integer ;
    		election:hasAccreditedVoters "369257"^^xsd:integer ;
    		election:hasTotalBallots "360455"^^xsd:integer ;
    		election:hasInvalidBallots "10089"^^xsd:integer ;
    		election:hasValidBallots "350366"^^xsd:integer ;
    		election:hasViolence "false"^^xsd:boolean ;
    		election:isCandidate <#candidate1>, <#candidate2>, <#candidate3> ;
    		election:hasElectoralFraud "false"^^xsd:boolean .
    		
    		<#candidate1> a election:Candidate ;
    		schema:name "Ayodele Peter Fayose" ;
    		election:isOfPoliticalParty  ;
    		election:hasVotes "203090"^^xsd:integer ;
    		election:isElected "true"^^xsd:boolean .
    
    		<#candidate2> a election:Candidate ;
    		schema:name "John Olukayode Fayemi" ;
    		election:isOfPoliticalParty  ;
    		election:hasVotes "120433"^^xsd:integer ;
    		election:isElected "false"^^xsd:boolean .
    		
    		
    		<#candidate3> a election:Candidate ;
    		schema:name "Bamidele Michael Opeyemi" ;
    		election:isOfPoliticalParty  ;
    		election:hasVotes "18135"^^xsd:integer ;
    		election:isElected "false"^^xsd:boolean .
    		
    	
    	}
    
    
    	
    	
     

That is it.

Information:

References

- http://en.wikipedia.org/wiki/DBpedia

- http://en.wikipedia.org/wiki/SPARQL

- http://www.w3.org/TR/turtle/

- http://kidehen.blogspot.com/2015/01/review-publishing-for-everyone.html

- http://kidehen.blogspot.com/2014/07/nanotation.html

Keywords: linked data, election, semantic web, turtle

Sunday, March 1, 2015

Linked Open Election Framework Implementation Guide for HTML5 + Microdata

How to Embed Election Data in HTML using HTML5, Microdata and Linked Data

.

Subjects: , , , , ,

Introduction:

This guide will show you how to implement the Linked Open Election Data using HTML5, Microdata and the Linked Election Framework. You can also use RDFa instead of Microdata. It is left to implementing organizations to determine which implementation best suits their particular business needs.

This guide assumes a basic knowledge of HTML5 and Microdata. If you're new to the subject or just need some brushing up, we recommend that you review the Wikipedia article on HTML 5 Microdata.

Solution:

  1. First thing to do is to define the article or post that will host the election data:

      <html itemscope itemtype="http://schema.org/NewsArticle" itemid="http://your-domain/news-story.html">
      ---
      </html>
     
    for content management system (CMS) like wordpress, tumblr, blogspot, drupal, etc you can use the <div> tag:
      <div itemscope itemtype="http://schema.org/NewsArticle"  itemid="http://your-domain/news-story.html">
      ---
      </div>
     
    Please note that you can also use other Schema.org classes like http://schema.org/Article,http://schema.org/TechArticle, http://schema.org/BlogPost, http://schema.org/ScholarlyArticle as the itemtype.

  2. Define the name and headline of the post. You can use any of the HTML elements (<span>,<div>,<a>,<h>, etc) for these:

      <h1 itemprop="name headline">Election Results</h1>
     

  3. Embed the author's name and profile URI (eg. Google+, WebID-Profile, DBpedia, Freebase, etc) :

      <div itemprop="author creator" itemscope itemtype="http://schema.org/Person">
       <strong>Author:</strong>  <a href="https://plus.google.com/+EmekaOkoye/" rel="publisher" itemprop="url">
       <span itemprop="name">Emeka Okoye</span></a><br />
      </div>
    
     

  4. Annotate the data, tags or subject associated with the article. You can define as many as possible using entities in Wikipedia, Freebase and Linked Open Data (LOD), delimited with commas :

      <strong>Topics:</strong> 
      <span itemprop="about" itemscope itemtype="http://schema.org/Thing" itemid="http://dbpedia.org/resource/Election">
      <a href="http://en.wikipedia.org/wiki/Election" itemprop="url"><span itemprop="name">Election</span></a>
      </span>,
    
     
    We're going to finish by annotating all of the data we've asserted concerning the article's associated entities.

  5. Embed your news story or article within the attribute "articleBody" tag. You can specify the attribute itemprop="articleBody" multiple times in a web page if the story is located in different sections of the page.

      <div itemprop="articleBody">
       your story goes here
      </div>
     

  6. Embed the election results within a <div> tag. See subsequent steps on how to embed election polling data.

  7. Define and setup your poll :

      <div itemscope itemtype="http://linkedopendatang.com/schemas/election#Poll">
      </div>
     

  8. Modify the previous <div> to Add and update the attributes of the poll :

      <div itemscope itemtype="http://linkedopendatang.com/schemas/election#Poll">
       <!-- define constituency. Use any instance of schema:place, dbpedia:place -->
       <p><strong>Constituency:</strong> <a itemprop="hasConstituency" href="http://dbpedia.org/resource/Ekiti_State">Ekiti State</a></p>
       
       <!-- define poll date. date format is yyyy-mm-dd  -->
       <p><strong>Election Date:</strong> <meta content="2014-06-21" itemprop="hasElectionDate"/>June 21, 2014</p>
       
       <!-- define poll's registered voters  -->
       <p><strong>Registered Voters:</strong> <span itemprop="hasRegisteredVoters">733766</span></p>
       
       <!-- define poll's accredited voters  -->
       <p><strong>Accredited Voters:</strong> <span itemprop="hasAccreditedVoters">369257</span></p>
       
       <!-- define total ballot papers used  -->
       <p><strong>Total Ballot Papers Used: </strong><span itemprop="hasTotalBallots">360455</span></p>
       
       <!-- define total invalid votes  -->
       <p><strong>Invalid Votes: </strong><span itemprop="hasInvalidBallots">10089</span></p>
       
       <!-- define total valid votes  -->
       <p><strong>Valid Votes: </strong><span itemprop="hasValidBallots">350366</span></p>
       
       <!-- define reported violence. format is boolean  -->
       <p><strong>Any Reported Violence: </strong><span itemprop="hasViolence">False</span></p>
       
       <!-- define reported fraud. format is boolean  -->
       <p><strong>Any Reported Fraud: </strong><span itemprop="hasElectoralFraud">False</span></p>
       
       <!-- A poll must have 2 or more candidates. Each candidate must be defined in a <div> or <span> tag -->
       <!-- candidate 1 -->
       <div itemprop="isCandidate" itemscope itemtype="http://linkedopendatang.com/schemas/election#Candidate">
       <dl>
        <!-- define candidate's name  -->
        <dt>Candidate's Name </dt>
        <dd><div itemprop="hasName" itemscope itemtype="http://schema.org/Person" itemid="#fayose"><span itemprop="name">Ayodele Peter Fayose</span>
        <meta itemprop="sameAs" content="http://dbpedia.org/resource/Ayo_Fayose"/>
        </div>
        </dd> 
    
        <!-- define candidate's party  -->
        <dt>Candidate's Party </dt>
        <dd><a itemprop="isOfPoliticalParty" href="http://linkedopendatang.com/entity/ngpoliticalparty.ttl#pdp">PDP</a></dd>
    
        <!-- define candidate's votes  -->
        <dt>Candidate's Votes </dt>
        <dd><span itemprop="hasVotes">203090</span></dd>
    
        <!-- define candidate's success status.  -->
        <dt>Elected? </dt>
        <dd><span itemprop="isElected">True</span></dd>
      
       </dl>
       </div>
       
       <!-- follow the previous approach on candidate 1 for other candidates
       <!-- candidate 2 -->
       <div itemprop="isCandidate" itemscope itemtype="http://linkedopendatang.com/schemas/election#Candidate">
        data goes here
       </div>
       
       <!-- candidate n -->
       <div itemprop="isCandidate" itemscope itemtype="http://linkedopendatang.com/schemas/election#Candidate">
        data goes here
       </div>
      </div>
     

  9. Finally, you can add the provider organization data. The url attribute should be the website URL of the news or blogger organization while the name of the organization is added to the name attribute:

       <span
        itemprop="sourceOrganization provider"
        itemscope
        itemtype="http://schema.org/Organization"
        itemid="http://linkedopendatang.blogspot.com">
        <meta itemprop="name" content="Linked Open Data Nigeria" />
        <meta itemprop="url" content="http://linkedopendatang.blogspot.com" />
        </span>
    
     

That is it.
  1. You can query the data (microdata) with sparql

  2. There are tools or distillers like RDF Distiller or pyMicrodata that can convert microdata stored in web pages into RDF triples, making it possible to query this data with SPARQL

  3. For instance, to get all data in a webpage, enter the following query at a sparql endpoint:

     select *
     from <http://www.w3.org/2012/pyMicrodata/extract?uri=[URL of Web Page]&format=turtle>
     

  4. You can view a sample here

Information:

  • View a live demo here.
  • View extracted data from live demo here
  • The source and samples are on github.

References

- http://en.wikipedia.org/wiki/DBpedia

- http://en.wikipedia.org/wiki/SPARQL

- http://www.w3.org/TR/rdf-sparql-query/

- http://semanticweb.org/wiki/SPARQL_endpoint

- http://en.wikipedia.org/wiki/Server-side_scripting

Keywords: linked data, election, HTML5, html, semantic web, microdata