#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. Спасибо. Опубликуйте свой комментарий в качестве ответа, если хотите, чтобы другие люди могли проголосовать за него.