Как использовать rdflib для представления геометрических точек в данных RDF?

#rdf #rdfs #rdflib #openlink-virtuoso

#rdf #rdfs #rdflib #openlink-виртуоз

Вопрос:

Я использую rdflib для преобразования текстовых файлов в файлы n3 с целью сохранения местоположений автобусных станций (GTFS).Например, если бы у нас был latitude=8.0 , longitude=5.0 , литерал был бы:

"POINT(5.0 8.0)"^^<http://www.openlinksw.com/schemas/virtrdf#Geometry>

Прямо сейчас мой код (для каждой строки, которую я читаю из текстового файла) выглядит следующим образом. Я просто сохраняю широту, долготу как float xsd типы данных. Мы добавляем каждую строку в graph(g) .

 data = fd.readline()
        data = re.split(',', data)

        row = {
          "stop_id": data[0] ,
          "stop_code": data[1] ,
          "stop_name": data[2].replace('"', '') ,
          "stop_desc": data[3] ,
          "stop_lat": data[4] ,
          "stop_lon": data[5] ,
          "location_type": data[6]
        }

        # Create a node for our movie
        stop_node = n['Stop/'   row['stop_id']] # Unique URI
        class_node = n['Stop']
        g.add((stop_node, n.HasStopId, Literal(row['stop_id'],datatype=XSD.int)))
        g.add((stop_node, n.HasStopCode, Literal(row['stop_code'],datatype=XSD.int)))
        g.add((stop_node, n.HasStopName , Literal(row['stop_name'],datatype=XSD.string)))
        g.add((stop_node, n.HasStopDesc, Literal(row['stop_desc'],  datatype=XSD.string)))
        g.add((stop_node, n.HasStopLat, Literal(row['stop_lat'], datatype=XSD.float)))
        g.add((stop_node, n.HasStopLon, Literal(row['stop_lon'], datatype=XSD.float)))
        g.add((stop_node, n.HasLocationType, Literal(row['location_type'], datatype=XSD.int)))
        g.add((stop_node, RDF.type, class_node))
  

Пример вывода:

 @prefix ns1: <http://www.stops.org/> .//I have defined that in another file, not important
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://www.stops.org/Stop/01034> a ns1:Stop ;
    ns1:HasLocationType "0"^^xsd:int ;
    ns1:HasStopCode "10001"^^xsd:int ;
    ns1:HasStopDesc "Outside National Hospital"^^xsd:string ;
    ns1:HasStopId "01034"^^xsd:int ;
    ns1:HasStopLat "8.0"^^xsd:float ;
    ns1:HasStopLon "5.0"^^xsd:float ;
    ns1:HasStopName "turn hospital"^^xsd:string .

  
  

Меня проинструктировали на случай, если я использую OpenLink Virtuoso для импорта моих файлов n3 в его базу данных. Я могу найти примеры того, как linkedgeodata использует это представление для запроса данных. Я точно не понял, должен ли я сначала сохранить его как таковой (два значения с плавающей запятой), а затем преобразовать его в геометрическую точку в OpenLink Virtuoso или я должен преобразовать значения в виде геометрических точек в n3 файле, который Python создает с помощью rdflib . Я не могу найти ничего другого, связанного в Интернете.

Комментарии:

1. "POINT(5.0 8.0)”^^<http://www.openlinksw.com/schemas/virtrdf#Geometry> является литералом RDF. Вы должны использовать лексическую форму POINT(5.0 8.0) и просто использовать тип данных http://www.openlinksw.com/schemas/virtrdf#Geometry , т. е. сначала вы должны создать тип данных и использовать его вместо предопределенного XSD vocab. Итак, это Literal('POINT(5.0 8.0)', URIRef('http://www.openlinksw.com/schemas/virtrdf#Geometry'))

2. Спасибо. Опубликуйте свой комментарий в качестве ответа, если хотите, чтобы другие люди могли проголосовать за него.