Приклад TARQL-скрипта, що перетворює CSV у RDF (Turtle).
Додано: П'ят серпня 15, 2025 3:52 pm
1) Вихідний CSV (air_quality.csv)
2) TARQL-запит (csv2rdf.sparql)
Перетворює кожен рядок CSV на дві сутності спостережень (PM2.5 і PM10) у термінах SOSA + додає мінімальний опис датасету в DCAT.
Примітка: змініть :base на ваш домен/DOI-базу.
3) Запуск TARQL
Встановіть tarql (на більшості систем доступний через brew, apt, conda).
4) Фрагмент згенерованого Turtle (air_quality.ttl)
5) Поради по адаптації
База URI: замініть https://example.org/air-2025/ на DOI/домен вашого набору (напр., https://doi.org/10.1234/abcd# або інституційний URL).
Одиниці виміру: за потреби додайте властивість одиниць (напр., ex:unit "µg/m³" або словники QUDT).
Валідація: перевірте якість графа SHACL-шейпами (мінімум: наявність sosa:observedProperty, типів даних, дати).
Код: Виділити все
city,date,pm25,pm10,source_url
Kyiv,2025-08-10,12.3,23.1,https://example.org/aq/kyiv/2025-08-10
Lviv,2025-08-10,8.7,17.5,https://example.org/aq/lviv/2025-08-10
Перетворює кожен рядок CSV на дві сутності спостережень (PM2.5 і PM10) у термінах SOSA + додає мінімальний опис датасету в DCAT.
Примітка: змініть :base на ваш домен/DOI-базу.
Код: Виділити все
# csv2rdf.sparql
PREFIX : <https://example.org/air-2025/> # БАЗА вашого набору
PREFIX ex: <https://example.org/vocab/> # Власний словник (за потреби)
PREFIX sosa: <http://www.w3.org/ns/sosa/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX schema:<https://schema.org/>
CONSTRUCT {
# Мінімальний опис датасету
:dataset a dcat:Dataset ;
dct:title "Якість повітря в Україні, 2025 рік" ;
dct:license <https://creativecommons.org/licenses/by/4.0/> .
# Місто як Place
?place a schema:Place ;
schema:name ?city ;
schema:addressCountry "UA" .
# Спостереження PM2.5
?obs25 a sosa:Observation ;
sosa:hasFeatureOfInterest ?place ;
sosa:observedProperty ex:PM25 ;
sosa:resultTime ?date_typed ;
sosa:hasSimpleResult ?pm25_dec ;
dct:isPartOf :dataset ;
dct:source ?src .
# Спостереження PM10
?obs10 a sosa:Observation ;
sosa:hasFeatureOfInterest ?place ;
sosa:observedProperty ex:PM10 ;
sosa:resultTime ?date_typed ;
sosa:hasSimpleResult ?pm10_dec ;
dct:isPartOf :dataset ;
dct:source ?src .
}
WHERE {
# Колонки беруться з заголовків CSV: ?city ?date ?pm25 ?pm10 ?source_url
BIND( IRI(CONCAT("https://example.org/place/", ENCODE_FOR_URI(?city))) AS ?place )
# Стабільні URI для спостережень (на основі міста/дати/виду показника)
BIND( IRI(CONCAT(STR(:), "obs/", SHA1(CONCAT(?city, "-", ?date, "-pm25")))) AS ?obs25 )
BIND( IRI(CONCAT(STR(:), "obs/", SHA1(CONCAT(?city, "-", ?date, "-pm10")))) AS ?obs10 )
# Типи даних
BIND( STRDT(?date, xsd:date) AS ?date_typed )
BIND( xsd:decimal(?pm25) AS ?pm25_dec )
BIND( xsd:decimal(?pm10) AS ?pm10_dec )
# Джерело (URL на первинну сторінку/завантаження)
BIND( IRI(?source_url) AS ?src )
}
Встановіть tarql (на більшості систем доступний через brew, apt, conda).
Код: Виділити все
# Варіант А: файл CSV задаємо під час виклику
tarql csv2rdf.sparql air_quality.csv > air_quality.ttl
# Варіант Б (самодостатній запит):
# додайте на початок csv2rdf.sparql рядок:
# FROM <file:air_quality.csv>
# і тоді достатньо:
tarql csv2rdf.sparql > air_quality.ttl
Код: Виділити все
@prefix : <https://example.org/air-2025/> .
@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix dct: <http://purl.org/dc/terms/> .
@prefix sosa: <http://www.w3.org/ns/sosa/> .
@prefix schema:<https://schema.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:dataset a dcat:Dataset ;
dct:title "Якість повітря в Україні, 2025"@uk ;
dct:license <https://creativecommons.org/licenses/by/4.0/> .
<https://example.org/place/Kyiv> a schema:Place ;
schema:name "Kyiv" ;
schema:addressCountry "UA" .
<https://example.org/air-2025/obs/1f0...> a sosa:Observation ;
sosa:hasFeatureOfInterest <https://example.org/place/Kyiv> ;
sosa:observedProperty <https://example.org/vocab/PM25> ;
sosa:resultTime "2025-08-10"^^xsd:date ;
sosa:hasSimpleResult "12.3"^^xsd:decimal ;
dct:isPartOf :dataset ;
dct:source <https://example.org/aq/kyiv/2025-08-10> .
База URI: замініть https://example.org/air-2025/ на DOI/домен вашого набору (напр., https://doi.org/10.1234/abcd# або інституційний URL).
Одиниці виміру: за потреби додайте властивість одиниць (напр., ex:unit "µg/m³" або словники QUDT).
Валідація: перевірте якість графа SHACL-шейпами (мінімум: наявність sosa:observedProperty, типів даних, дати).