{"id":16010601,"url":"https://github.com/kasei/kineo","last_synced_at":"2025-03-16T07:32:13.529Z","repository":{"id":49194313,"uuid":"65223723","full_name":"kasei/kineo","owner":"kasei","description":"A persistent RDF quadstore and SPARQL engine","archived":false,"fork":false,"pushed_at":"2024-11-17T19:37:21.000Z","size":1442,"stargazers_count":38,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-27T05:49:41.418Z","etag":null,"topics":["database","endpoint","graph","rdf","sparql"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kasei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-08T17:13:43.000Z","updated_at":"2025-01-12T15:39:54.000Z","dependencies_parsed_at":"2024-11-17T20:26:30.352Z","dependency_job_id":"69ef86a7-4969-4a22-958f-0868d0eb0f59","html_url":"https://github.com/kasei/kineo","commit_stats":{"total_commits":680,"total_committers":1,"mean_commits":680.0,"dds":0.0,"last_synced_commit":"9086d86480b3c09715cdd510ec25b468a119fe58"},"previous_names":[],"tags_count":111,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kasei%2Fkineo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kasei%2Fkineo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kasei%2Fkineo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kasei%2Fkineo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kasei","download_url":"https://codeload.github.com/kasei/kineo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243806046,"owners_count":20350775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","endpoint","graph","rdf","sparql"],"created_at":"2024-10-08T13:06:36.814Z","updated_at":"2025-03-16T07:32:13.159Z","avatar_url":"https://github.com/kasei.png","language":"Swift","funding_links":[],"categories":["Programming","Swift"],"sub_categories":["Swift"],"readme":"# Kineo\n\n## A persistent RDF quadstore and SPARQL engine\n\n### Build\n\n`swift build -c release`\n\n### Swift Package Manager\n\nYou can use the [Swift Package Manager](https://swift.org/package-manager/) to add Kineo to a Swift project by adding it as a dependency in `Package.swift`:\n\n```swift\n.package(name: \"Kineo\", url: \"https://github.com/kasei/kineo.git\", .upToNextMinor(from: \"0.0.91\")),\n```\n\n### Load data\n\nCreate a database file (`geo.db`) and load one or more N-Triples or Turtle files:\n\n```\n% ./.build/release/kineo -q geo.db -d examples/geo-data/geo.ttl load\n```\n\nSpecifying `-d FILENAME` will load data from `FILENAME` into the default graph.\nAlternatively, data can be loaded into a specific named graph (similarly, a\ncustom graph name can be used for the query default graph):\n\n```\n% ./.build/release/kineo -q geo.db -g http://example.org/dbpedia examples/geo-data/geo.ttl load\n```\n\n### Query\n\nQuerying of the data can be done using SPARQL:\n\n```\n% cat examples/geo-data/geo.rq\nPREFIX geo: \u003chttp://www.w3.org/2003/01/geo/wgs84_pos#\u003e\nSELECT  ?s\nWHERE {\n\t?s geo:lat ?lat ;\n\t   geo:long ?long ;\n\tFILTER(?long \u003c -120)\n\tFILTER(?lat \u003e= 34.0)\n\tFILTER(?lat \u003c= 35.0)\n}\nORDER BY ?s\n\n% ./.build/release/kineo -q geo.db query examples/geo-data/geo.rq\nUsing default graph \u003cfile://examples/geo-data/geo.ttl\u003e\n1\tResult[s: \u003chttp://dbpedia.org/resource/Buellton,_California\u003e]\n2\tResult[s: \u003chttp://dbpedia.org/resource/Lompoc,_California\u003e]\n3\tResult[s: \u003chttp://dbpedia.org/resource/Los_Alamos,_California\u003e]\n4\tResult[s: \u003chttp://dbpedia.org/resource/Mission_Hills,_California\u003e]\n5\tResult[s: \u003chttp://dbpedia.org/resource/Orcutt,_California\u003e]\n6\tResult[s: \u003chttp://dbpedia.org/resource/Santa_Barbara_County,_California\u003e]\n7\tResult[s: \u003chttp://dbpedia.org/resource/Santa_Maria,_California\u003e]\n8\tResult[s: \u003chttp://dbpedia.org/resource/Santa_Ynez,_California\u003e]\n9\tResult[s: \u003chttp://dbpedia.org/resource/Solvang,_California\u003e]\n10\tResult[s: \u003chttp://dbpedia.org/resource/Vandenberg_Air_Force_Base\u003e]\n```\n\n### Kineo API\n\nThe Kineo API can be used to create an in-memory or persistent quadstore,\nload RDF data into it, and evaluate SPARQL queries over the data:\n\n```swift\nimport Foundation\nimport SPARQLSyntax\nimport Kineo\n\nlet graph = Term(iri: \"http://example.org/default-graph\")\nlet store = MemoryQuadStore()\n\nlet url = URL(string: \"http://kasei.us/about/foaf.ttl\")!\ntry store.load(url: url, defaultGraph: graph)\n\nlet sparql = \"PREFIX foaf: \u003chttp://xmlns.com/foaf/0.1/\u003e SELECT * WHERE { ?person a foaf:Person ; foaf:name ?name }\"\nlet q = try SPARQLParser.parse(query: sparql)\nlet results = try store.query(q, defaultGraph: graph)\nfor (i, result) in results.bindings.enumerated() {\n    print(\"\\(i+1)\\t\\(result)\")\n}\n```\n\nThere is also an API that exposes the RDF data in terms of graph vertices and edge traversals:\n\n```swift\nimport Foundation\nimport SPARQLSyntax\nimport Kineo\n\nlet graph = Term(iri: \"http://example.org/default-graph\")\nlet store = MemoryQuadStore()\n\nlet url = URL(string: \"http://kasei.us/about/foaf.ttl\")!\ntry store.load(url: url, defaultGraph: graph)\n\nlet graphView = store.graph(graph)\nlet greg = graphView.vertex(Term(iri: \"http://kasei.us/about/#greg\"))\n\nlet knows = Term(iri: \"http://xmlns.com/foaf/0.1/knows\")\nlet name = Term(iri: \"http://xmlns.com/foaf/0.1/name\")\nfor v in try greg.outgoing(knows) {\n    let names = try v.outgoing(name)\n    if let nameVertex = names.first {\n        let name = nameVertex.term\n        print(\"Greg know \\(name)\")\n    }\n}\n```\n\n### SPARQL Endpoint\n\nFinally, using the companion [kineo-endpoint](https://github.com/kasei/kineo-endpoint) package,\na SPARQL endpoint can be run allowing SPARQL Protocol clients to access the data:\n\n```\n% kineo-endpoint -q geo.db \u0026\n% curl -H \"Accept: application/sparql-results+json\" -H \"Content-Type: application/sparql-query\" --data 'PREFIX geo: \u003chttp://www.w3.org/2003/01/geo/wgs84_pos#\u003e SELECT ?s ?lat ?long WHERE { ?s geo:lat ?lat ; geo:long ?long } LIMIT 3' 'http://localhost:8080/sparql'\n{\n  \"head\": {\n    \"vars\": [ \"s\", \"lat\", \"long\" ]\n  },\n  \"results\": {\n    \"bindings\": [\n      {\n        \"s\": { \"type\": \"uri\", \"value\": \"http://dbpedia.org/resource/'s-Gravendeel\" },\n        \"lat\": { \"type\": \"literal\", \"value\": \"5.17833333333333E1\", \"datatype\": \"http://www.w3.org/2001/XMLSchema#float\" },\n        \"long\": { \"type\": \"literal\", \"value\": \"4.61666666666667E0\", \"datatype\": \"http://www.w3.org/2001/XMLSchema#float\" }\n      },\n      {\n        \"s\": { \"type\": \"uri\", \"value\": \"http://dbpedia.org/resource/'s-Hertogenbosch\" },\n        \"lat\": { \"type\": \"literal\", \"value\": \"5.17833333333333E1\", \"datatype\": \"http://www.w3.org/2001/XMLSchema#float\" },\n        \"s\": { \"type\": \"uri\", \"value\": \"http://dbpedia.org/resource/Groesbeek\" },\n        \"long\": { \"type\": \"literal\", \"value\": \"5.93333333333333E0\", \"datatype\": \"http://www.w3.org/2001/XMLSchema#float\" }\n      },\n      {\n        \"s\": { \"type\": \"uri\", \"value\": \"http://dbpedia.org/resource/'s-Hertogenbosch\" },\n        \"lat\": { \"type\": \"literal\", \"value\": \"5.1729918E1\", \"datatype\": \"http://www.w3.org/2001/XMLSchema#float\" },\n        \"long\": { \"type\": \"literal\", \"value\": \"5.306938E0\", \"datatype\": \"http://www.w3.org/2001/XMLSchema#float\" }\n      }\n    ]\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkasei%2Fkineo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkasei%2Fkineo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkasei%2Fkineo/lists"}