% swift build -c release
要将 SPARQLSyntax 用于使用 Swift 包管理器的项目,请将以下内容添加到项目的 Package.swift 文件中
dependencies: [
.package(url: "https://github.com/kasei/swift-sparql-syntax.git", .upToNextMinor(from: "0.0.91"))
]
提供了一个命令行工具 sparql-parser,用于解析 SPARQL 查询并打印其解析后的查询代数、分词或美化打印的 SPARQL 字符串
% ./.build/release/sparql-parser
Usage: ./.build/release/sparql-parser [-v] COMMAND [ARGUMENTS]
./.build/release/sparql-parser parse query.rq
./.build/release/sparql-parser lint query.rq
./.build/release/sparql-parser tokens query.rq
要“检查”或“美化打印” SPARQL 查询
% cat examples/messy.rq
prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
select ?s
where{
?s geo:lat ?lat ;geo:long ?long ;
FILTER(?long < -117.0)
FILTER(?lat >= 31.0)
FILTER(?lat <= 33.0)
} ORDER BY ?s
% ./.build/release/sparql-parser lint examples/messy.rq
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT ?s WHERE {
?s geo:lat ?lat ;
geo:long ?long ;
FILTER (?long < - 117.0)
FILTER (?lat >= 31.0)
FILTER (?lat <= 33.0)
}
ORDER BY ?s
要解析查询并打印生成的查询代数
% ./.build/release/sparql-parser parse examples/messy.rq
Query
Select { ?s }
Project { ?s }
OrderBy { ?s }
Filter (((?long < -117.0) && (?lat >= 31.0)) && (?lat <= 33.0))
BGP
?s <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat .
?s <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?long .
SPARQLSyntax 库提供了一个 API,用于解析 SPARQL 查询并访问生成的抽象数据结构。此 API 的主要组件是
struct Term - RDF 术语(IRI、字面量或空白节点)的表示enum Algebra - 与正式 SPARQL 代数密切相关的查询模式的表示enum Expression - 逻辑表达式的表示struct Query - SPARQL 查询的表示,包括:查询形式 (SELECT, ASK, DESCRIBE, 或 CONSTRUCT), 查询 Algebra, 以及可选的基本 URI 和数据集规范struct SPARQLParser - 解析 SPARQL 查询字符串/数据并返回 Querystruct SPARQLSerializer - 提供序列化查询的能力,可以选择应用“美化打印”格式struct Term 表示一个 RDF 术语 (IRI、空白节点或 RDF 字面量)。 Term 还提供对 XSD 数字类型的一些支持,在 Term 和 enum NumericValue 之间架起桥梁,后者提供数字函数和 类型提升运算符。
struct Triple 和 struct Quad 将 Term 组合成 RDF 三元组和四元组。struct TriplePattern 和 struct QuadPattern 表示可以与具体的 Triple 和 Quad 匹配的模式。模式不是由 Term 组成,而是由 enum Node 组成,enum Node 可以是绑定的 Term,也可以是命名的 variable。
enum Algebra 是与 SPARQL 代数 对齐的查询模式的表示。情况包括简单的图模式匹配,例如 triple、quad 和 bgp,以及可用于连接其他 Algebra 值的更复杂运算符(例如 innerJoin、union、project、distinct)。
Algebra 提供函数和属性来访问图模式的特征,包括:使用的变量;以及作用域内、可投影和“必须绑定”的变量。可以使用重写 API 修改 Algebra 值的结构,该 API 可以:将值绑定到特定变量;替换整个 Algebra 子树;并重写 Algebra 中使用的 Expression。
enum Expression 表示变量、值、运算符和函数的逻辑表达式,可以在查询结果的上下文中对其进行评估以生成 Term 值。 Expression 用于以下 Algebra 操作:filter、left outer join ("OPTIONAL")、extend ("BIND") 和 aggregate。
可以使用类似于 Algebra 提供的重写 API 修改 Expression,该 API 可以:将值绑定到特定变量;并替换整个 Expression 子树。
struct Query 表示一个 SPARQL 查询,包括
SELECT, ASK, DESCRIBE, 或 CONSTRUCT, 以及任何相关数据,例如投影变量,或用于 CONSTRUCT 结果图的三元组模式)Algebra)struct SPARQLParser 提供了一个 API,用于解析 SPARQL 1.1 查询字符串并生成 Query。
struct SPARQLSerializer 提供了一个 API,用于序列化 SPARQL 1.1 查询,可以选择应用“美化打印”规则以生成一致格式的输出。 它可以序列化结构化查询(Query 和 Algebra)和非结构化查询(查询 String)。 在后一种情况下,即使查询包含语法错误,也可以使用序列化(错误后的数据按原样序列化)。
支持将窗口函数的解析作为 SPARQL 1.1 语法的扩展。 支持类似 SQL 的语法,用于在 SELECT 子句以及 HAVING 子句中投影窗口函数。 除了内置的聚合函数外,还支持以下窗口函数: RANK, ROW_NUMBER。
下面显示了一些支持的语法的示例。
# "Limit By Resource"
# This query limits results to two name/school pairs per person
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?school WHERE {
?s a foaf:Person ;
foaf:name ?name ;
foaf:schoolHomepage ?school
}
HAVING (RANK() OVER (PARTITION BY ?s) < 2)
# Use window framing to compute a moving average over the trailing four results
PREFIX : <http://example.org/>
SELECT (AVG(?value) OVER (ORDER BY ?date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS ?movingAverage) WHERE {
VALUES (?date ?value) {
(1 1.0)
(2 2.0)
(3 3.0)
(4 2.0)
(5 0.0)
(6 0.0)
(7 1.0)
}
}