Приклад TARQL-скрипта, що перетворює CSV у RDF (Turtle).

Опис вашого першого форуму.
Відповісти
admin
Адміністратор сайту
Повідомлень: 35
З нами з: Чет серпня 15, 2024 4:51 am

Приклад TARQL-скрипта, що перетворює CSV у RDF (Turtle).

Повідомлення admin »

1) Вихідний CSV (air_quality.csv)

Код: Виділити все

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
2) TARQL-запит (csv2rdf.sparql)
Перетворює кожен рядок 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 )
}
3) Запуск TARQL

Встановіть 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
4) Фрагмент згенерованого Turtle (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> .
5) Поради по адаптації

База URI: замініть https://example.org/air-2025/ на DOI/домен вашого набору (напр., https://doi.org/10.1234/abcd# або інституційний URL).

Одиниці виміру: за потреби додайте властивість одиниць (напр., ex:unit "µg/m³" або словники QUDT).

Валідація: перевірте якість графа SHACL-шейпами (мінімум: наявність sosa:observedProperty, типів даних, дати).
Відповісти