Верховна Рада України
Портал відкритих даних

Реєстр відкритих даних

За допомогою файлів реєстрів відкритих даних можна автоматично визначити всю ієрархію доступних наборів на порталі відкритих даних державного органа – розпорядника інформації. Формат XML файлу реєстру (list) відкритих даних OpenGovData (ogd) дуже схожий на RSS. Також має заголовок та набір елементів item. Заголовок описується такими параметрами:

id – внутрішній ідентифікатор даних (рядок або код);
guid – глобальний ідентифікаційний номер даних (URN);
title – назва реєстру наборів відкритих даних (рядок до 254 символів);
link – адреса сторінки в Інтернет – аналогу відкритих даних для людини (URL);
description – необов’язковий опис реєстру (текст до 4000 символів);
language – мова документу по замовчанню;
pubDate – дата та час публікації файлу;
lastBuildData – дата та час останнього формування даних;
path – шлях до файлів (від кореневого каталога сервера без імені файлу);
format – формати, в яких доступний реєстр (один чи декілька: XML, JSON, CSV…);
publisher – розпорядник інформації, який публікує набори даних;
creator – назва підрозділу, який безпосередньо створює та наповнює інформацію;
manager – адреса чи прізвище відповідального працівника підрозділу creator;
managerPhone – необов’язковий телефонний номер відповідального працівника;
webMaster – адреса технічного працівника, який формує набори відкритих даних;
opendata – адреса порталу відкритих даних, з якого взята інформація;
category – необов’язкова назва категорії відкритих даних (ідентифікатор або посилання);
keywords – необов’язкові ключові слова (через кому).

Для кожного елементу передбачені наступні параметри:

id – внутрішній ідентифікатор даних (рядок або код);
guid – глобальний ідентифікаційний номер даних (URN);
type – тип (реєстр list або паспорт набору meta);
title – назва об’єкту вказаного типу type (рядок до 254 символів);
link – адреса сторінки в Інтернет – аналогу відкритих даних для людини (URL);
description – необов’язковий опис об’єкту (текст до 4000 символів);
pubDate – дата та час публікації файлу;
filename – повна назва файлу (разом зі шляхом), якщо відрізняється від стандартної;
path – необов’язковий шлях до файлу, якщо відрізняється від поточного;
name – назва файлу, якщо відрізняється від type;
format – формати, в яких доступні метадані (один чи декілька: XML, JSON, CSV…).

Посилання на файл для машиночитного представлення формується автоматично з адреси сервера opendata (наприклад, http://data.rada.gov.ua) та повної назви файлу filename. Якщо ця назва не вказана, то вона є стандартною і формується з шляху до файлу path (наприклад, /ogp/zak/laws/), назви файлу name або типу type (тут це list або meta) та розширення, згідно вибраному формату format (наприклад, xml).

Так повна адреса до файлу реєстру наборів відкритих даних в форматі XML підсистеми «Реєстр первинних законодавчих актів» (perv) системи ІПС «Законодавство України» (zak) порталу відкритих даних Верховної Ради України (ogd) буде виглядати так: http://data.rada.gov.ua/ogd/zak/perv/list.xml, а запис про це в реєстрі наборів вищого рівня list.xml має вигляд (виділено):

<?xml version="1.0" encoding="utf-8" ?>
<ogd version="1.0">
<list>
	<id>zak</id>
	<guid>urn:ogd:zak</guid>
	<title>ІПС «Законодавство України»</title>
	<link>http://zakon.rada.gov.ua/go/</link>
	<description>Реєстр відкритих даних ІПС «Законодавство України» Верховної Ради України</description>
	<language>uk</language>
	<pubData>2015-04-21T10:33:00</pubData>
	<lastBuildData>2015-05-05T13:00:00</lastBuildData>
	<path>/ogd/zak/</path>
	<format>xml,json,txt</format>
	<publisher>Верховна Рада України</publisher>
	<creator>Відділ баз даних нормативно-правової інформації Управління комп'ютеризованих систем Апарату Верховної Ради України</creator>
	<manager>mischuk@rada.gov.ua</manager>
	<managerPhone>(044)255-4709</managerPhone>
	<webMaster>lawup@rada.gov.ua</webMaster>
	<opendata>http://data.rada.gov.ua</opendata>

	<item type="list">
		<id>laws</id>
		<guid>urn:ogd:zak:laws</guid>
		<title>База даних «Законодавство України»</title>
		<link>http://zakon.rada.gov.ua/go/laws/main/</link>
		<description>Описує набори відкритих даних для бази даних нормативно-правових документів. Включає довідники, списки карток документів, інформацію щодо доступу до API, приклади програмного коду.</description>
		<pubData>2015-05-05T17:20:00</pubData>
		<path>/ogd/zak/laws/</path>
		<format>xml,json,txt</format>
	</item>
	<item type="list">
		<id>perv</id>
		<guid>urn:ogd:zak:perv</guid>
		<title>Реєстр первинних законодавчих актів</title>
		<link>http://zakon.rada.gov.ua/go/laws/perv/</link>
		<description>Описує набори відкритих даних для первинних актів. Містить тексти нормативно-правових документів.</description>
		<pubData>2015-05-05T12:50:00</pubData>
		<path>/ogd/zak/perv/</path>
		<format>xml,json,txt</format>
	</item>
	<item type="list">
		<id>term</id>
		<guid>urn:ogd:zak:term</guid>
		<title>Термінологія законодавства України</title>
		<link>http://zakon.rada.gov.ua/go/laws/term/</link>
		<description>Описує набори відкритих даних для термінологічного словника. Містить перелік термінів та їх визначення.</description>
		<pubData>2015-05-05T12:50:00</pubData>
		<path>/ogd/zak/term/</path>
		<format>xml,json,txt</format>
	</item>

</list>
</ogd>

Цей самий реєстр можна сформувати і в форматі JSON. Приклад list.json:

{
	id: 'zak',
	guid: 'urn:ogd:zak',
	title: 'ІПС «Законодавство України»',
	link: 'http://zakon.rada.gov.ua/go/',
	description: 'Реєстр відкритих даних ІПС «Законодавство України» Верховної Ради України',
	language: 'uk',
	pubData: '2015-04-21T10:33:00',
	lastBuildData: '2015-05-05T13:00:00',
	path: '/ogd/zak/',
	format: 'xml,json,txt',
	publisher: 'Верховна Рада України',
	creator: 'Відділ баз даних нормативно-правової інформації Управління комп\'ютеризованих систем Апарату Верховної Ради України',
	manager: 'mischuk@rada.gov.ua',
	managerPhone: '(044)255-4709',
	webMaster: 'lawup@rada.gov.ua',
	opendata: 'http://data.rada.gov.ua',

	item: [ ...
		{
			id: 'perv',
			guid: 'urn:ogd:zak:perv',
			type: 'list',
			title: 'Реєстр первинних законодавчих актів',
			link: 'http://zakon.rada.gov.ua/go/laws/perv/',
			description: 'Описує набори відкритих даних для первинних актів. Містить тексти нормативно-правових документів.',
			pubData: '2015-05-05T12:50:00',
			path: '/ogd/zak/perv/',
			format: 'xml,json,txt'
		},
		...
	]
}

У класичному форматі CSV з розділовим символом – комою (list.csv) для зручності зчитування даних в першому рядку можуть бути перераховані назви полів (ключі, описані в окремій структурі), а далі безпосередньо – записи даних:

id,guid,type,title,link,description,language,pubData,lastBuildData,path,name,format,filename,publisher,creator,manager,managerPhone,webMaster,opendata,keywords
zak,urn:ogd:zak,,ІПС «Законодавство України»,http://zakon.rada.gov.ua/go/,Реєстр відкритих даних ІПС «Законодавство України» Верховної Ради України,uk,2015-04-21T10:33:00,2015-05-05T130:00:00,/ogd/zak/,"xml,json,txt",Верховна Рада України,Відділ баз даних нормативно-правової інформації Управління комп’ютеризованих систем Апарату Верховної Ради України,mischuk@rada.gov.ua,(044)255-4709,lawup@rada.gov.ua,http://data.rada.gov.ua,
...
perv,urn:ogd:zak:perv,list,Реєстр первинних законодавчих актів,http://zakon.rada.gov.ua/go/laws/perv/,Описує набори відкритих даних для первинних актів. Містить тексти нормативно-правових документів.,2015-05-05T12:50:00,,/ogd/zak/perv/,"xml,json,txt",,,,,,,
...

Оскільки формат CSV простий (плоский) і не передбачає деревовидних структур, то для збереження списку реєстру відкритих даних, потрібно перерахувати всі можливі поля в одному запису.

Зазвичай, програма Microsoft Excel в українському MS Office налаштована на інший ніж кому розділовий символ – кому з крапкою («;»). Стандартний формат CSV (Comma-Separated Values) в ній буде відкриватися некоректно, потрібно інше представлення. Приклад такого файлу (list.scsv):

id;guid;item;type;title;link;description;language;pubData;lastBuildData;path;name;format;filename;publisher;creator;manager;managerPhone;webMaster;opendata;keywords
zak;urn:ogd:zak;0;;ІПС «Законодавство України»;http://zakon.rada.gov.ua/go/;Реєстр відкритих даних ІПС «Законодавство України» Верховної Ради України;uk;2015-04-21T10:33:00;2015-05-05T13:00:00;/ogd/zak/;;xml,json,txt;;Верховна Рада України;Відділ баз даних нормативно-правової інформації Управління комп’ютеризованих систем Апарату Верховної Ради України;mischuk@rada.gov.ua;(044)255-4709;lawup@rada.gov.ua;http://data.rada.gov.ua;
...
perv;urn:ogd:zak:perv;2;list;Реєстр первинних законодавчих актів;http://zakon.rada.gov.ua/go/laws/perv/;Описує набори відкритих даних для первинних актів. Містить тексти нормативно-правових законів.;;2015-05-05T12:50:00;;/ogd/zak/perv/;;xml,json,txt;;;;;;;;
...

Якщо використовувати універсальний розділовий символ – табуляцію, це буде працювати всюди, як з розширенням файлу .csv так і з .tsv (Tab-Separated Values), крім того, буде займати найменше місця серед усіх варіантів.

id	guid	type	title	link	description	language	pubData	lastBuildData	path	name	format	filename	publisher	creator	manager	managerPhone	webMaster	opendata	keywords
zak	urn:ogd:zak		ІПС «Законодавство України»	http://zakon.rada.gov.ua/go/	Реєстр відкритих даних ІПС «Законодавство України» Верховної Ради України	uk	2015-04-21T10:33:00	2015-05-05T13:00:00	/ogd/zak/		xml,json,txt		Верховна Рада України	Відділ баз даних нормативно-правової інформації Управління комп’ютеризованих систем Апарату Верховної Ради України	mischuk@rada.gov.ua	(044)255-4709	lawup@rada.gov.ua	http://data.rada.gov.ua	
...
perv	urn:ogd:zak:perv	list	Реєстр первинних законодавчих актів	http://zakon.rada.gov.ua/go/laws/perv/	Описує набори відкритих даних для первинних актів. Містить тексти нормативно-правових законів.		2015-05-05T12:50:00		/ogd/zak/perv/		xml,json,txt				
...

І на останок, приклад файлу реєстру list.txt у вигляді розширеного CSV, в якому структура записів зберігається не в заголовку чи окремому файлі, в самих записах:

id=zak	guid=urn:ogd:zak	title=ІПС «Законодавство України»	link=http://zakon.rada.gov.ua/go/	description=Реєстр відкритих даних ІПС «Законодавство України» Верховної Ради України	language=uk	pubData=2015-04-21T10:33:00	lastBuildData=2015-05-05T130:00:00	path=/ogd/zak/	format=xml,json,txt	publisher=Верховна Рада України	creator=Відділ баз даних нормативно-правової інформації Управління комп’ютеризованих систем Апарату Верховної Ради України	manager=mischuk@rada.gov.ua	managerPhone=(044)255-4709	webMaster=lawup@rada.gov.ua	opendata=http://data.rada.gov.ua
...
id=perv	guid=urn:ogd:zak:perv	type=list	title=Реєстр первинних законодавчих актів	link=http://zakon.rada.gov.ua/go/laws/perv/	description=Описує набори відкритих даних для первинних актів. Містить тексти нормативно-правових документів.	pubData=2015-05-05T12:50:00	path=/ogd/zak/perv/	format=xml,json,txt
...

Кількість варіантів представлення даних реєстру не обмежується вказаними форматами (XML, JSON, CSV). Якщо комусь потрібно перетворити структуру на INI-файл, то це також можна легко зробити. В якості простого прикладу, так буде виглядати list.ini:

[list]
id=zak
guid=urn:ogd:zak
title=ІПС «Законодавство України»
link=http://zakon.rada.gov.ua/go/
description=Реєстр відкритих даних ІПС «Законодавство України» Верховної Ради України
language=uk
pubData=2015-04-21T10:33:00
lastBuildData=2015-05-05T130:00:00
path=/ogd/zak/
format=xml,json,txt
publisher=Верховна Рада України
creator=Відділ баз даних нормативно-правової інформації Управління комп’ютеризованих систем Апарату Верховної Ради України
manager=mischuk@rada.gov.ua
managerPhone=(044)255-4709
webMaster=lawup@rada.gov.ua
opendata=http://data.rada.gov.ua
...
[item2]
id=perv
guid=urn:ogd:zak:perv
type=list
title=Реєстр первинних законодавчих актів
link=http://zakon.rada.gov.ua/go/laws/perv/
description=Описує набори відкритих даних для первинних актів. Містить тексти нормативно-правових документів.
pubData=2015-05-05T12:50:00
path=/ogd/zak/perv/
format=xml,json,txt
...

Де секції INI-файлу мають вигляд: [list] – для заголовка реєстру, [item1], [item2], … по порядку – для елементів списку.

Алгоритм перетворення переліку записів csv-списку або ini-секцій на потрібну структуру – іменований масив в пам’яті (хеш) наступний: спочатку створюється порожня структура, в яку завантажується заголовок ($hash{list} або $array[0]), а після цього (у циклі) зчитуються елементи item з порядковими номерами від 1 до останнього, поки знаходиться наступний.



вгору