Преобразование CSV в RDF, где один столбец представляет собой набор значений - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу преобразовать CSV в RDF.

Один из столбцов этого CSV, на самом деле, представляет собой набор значений, объединенных символом-разделителем (в моем случае, символ пробела).

Вот пример CSV (с заголовком):

col1,col2,col3
"A","B C D","John"
"M","X Y Z","Jack"

Я хотел бы, чтобы процесс преобразования создал RDF, подобный следующему:

:A :aProperty :B, :C, :D; :anotherProperty "John".
:M :aProperty :X, :Y, :Z; :anotherProperty "Jack".

Я обычно используюTarql для преобразования CSV.Это хорошо для итерации в строке.Но у него нет возможности выполнять итерацию «внутри» значения столбца.

SPARQL-Generate может помочь (с iter: regex и sub-generate, насколько я понимаю).Но я не могу найти ни одного примера, соответствующего моему варианту использования.

PS: может быть, RML тоже может помочь.Но у меня нет предварительных знаний об этой технологии.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Модель табличных данных и связанные спецификации предназначены для этого варианта использования, хотя, насколько я помню, мы не предусмотрели комбинации valueUrl и separator, чтобы подколонки генерировали несколько URI.

Метаданные для описания этого будут выглядеть примерно так:

{
  "@context": "http://www.w3.org/ns/csvw",
  "url": "test.csv",
  "tableSchema": {
    "columns": [{
      "name": "col1",
      "titles": "col1",
      "datatype": "string",
      "required": true
    }, {
      "name": "col2",
      "titles": "col2",
      "datatype": "string",
      "separator": " "
    }, {
      "name": "col3",
      "titles": "col3",
      "datatype": "string",
      "propertyUrl": "http://example.com/anotherProperty",
      "valueUrl": "http://example.com/{col3}"
    }],
    "primaryKey": "col1",
    "aboutUrl": http://example.com/{col1}"
  }
}
0 голосов
/ 11 декабря 2018

Вы можете проверить этот запрос на игровой площадке https://ci.mines -stetienne.fr / sparql-generate / plays.html и проверить, работает ли он должным образом:

BASE <http://data.example.com/> 
PREFIX : <http://example.com/> 
PREFIX iter: <http://w3id.org/sparql-generate/iter/>
PREFIX fun: <http://w3id.org/sparql-generate/fn/>

GENERATE { 
  <{?col1}> :anotherProperty ?col3.
  GENERATE{
      <{?col1}> :aProperty <{ ?value }> ; 
  }
  ITERATOR iter:Split( ?col2 , " " ) AS ?value .
}
ITERATOR iter:CSVStream("http://example.com/file.csv", 20, "*") AS ?col1 ?col2 ?col3
...