sparql

原文链接

SELECT [DISTINCT] <variable1> [<variable2> ...]
[FROM ...]
WHERE
{
triple pattern 1.
[triple pattern 2.]
...
[附加条件...]
}
[OFFSET 数字]
[LIMIT 数字]
[ORDER BY | GROUP BY ...]

例如

SELECT ?x
WHERE {
dbr:James_Cameron dbo:directs ?x .
}

符号:

  • variable: 变量,使用?变量名来表示变量,例如?x1
  • : 注释

  • *和+: 正则表达式,*表示0次或多次,+表示一次或多次
  • ^: 用来反转主语和宾语之间的关系,例如s p oo ^p s等价
  • /: 表示拼接谓语。例如?s c:cites/c:cites/c:cites :paperA表示s经过引用距离为3的所有论文

关键字:

  • WHERE: 用来表示查询条件,它由主谓宾三部分组成,其中主语和宾语可以为变量
  • FROM: 用来表明数据集位置,例如
    SELECT ?email 
    FROM <ex069.ttl> # 从该文件中查找
    FROM <ex122.ttl>
    WHERE
    { ?s ab:email ?email . }
  • OPTIONAL: 如果存在则返回,否则返回空
    SELECT ?first ?last ?workTel
    WHERE
    {
    ?s ab:firstName ?first ;
    ab:lastName ?last .
    OPTIONAL
    { ?s ab:workTel ?workTel . }
    }
  • FILTER: 一个函数,如果输入bool为真,则选择
    SELECT ?s ?cost
    WHERE
    {
    ?s dm:cost ?cost .
    FILTER (?cost < 10)
    }
  • MINUS:在查询结果中减去某种模式的数据
    SELECT ?first ?last 
    WHERE
    {
    ?s ab:firstName ?first ;
    ab:lastName ?last .
    MINUS { ?s ab:workTel ?workNum }
  • UNION: 合并两个模式的查询结果
    SELECT ?first ?last ?instrument 
    WHERE
    {
    ?person ab:firstName ?first ;
    ab:lastName ?last ;
    ab:instrument ?instrument .
    { ?person ab:instrument "sax" . }
    UNION
    { ?person ab:instrument "trumpet" . }
    }
  • IN: 变量是否在集合中

cpyher

原文链接

每个点都有三个特征:名称,类型,属性。每条边有三个特征: 名称,动作,属性

节点语法

() # 匿名的节点
(matrix) # 使用一个变量 matrix 与这个节点关联
(:Movie) # 类型为 Movie 的节点
(matrix:Movie)
(matrix:Movie {title: "The Matrix"}) # 指含有特定属性的某类节点
(matrix:Movie {title: "The Matrix", released: 1997})

关系语法

--> # 非直接相连的关系
-[role]-> # 使用变量关联此关系
-[:ACTED_IN]-> # 类型为 ACTED_IN 的关系
-[role:ACTED_IN]->
-[role:ACTED_IN {roles: ["Neo"]}]-> # 含有特定属性的关系

二者组合便成了一个模式,两端是两个节点,中间是他们的关系

(keanu:Person:Actor {name:  "Keanu Reeves"} )
-[role:ACTED_IN {roles: ["Neo"] } ]->
(matrix:Movie {title: "The Matrix"} )

一个模式也可以赋给一个变量

acted_in = (:Person)-[:ACTED_IN]->(:Movie)

子句

  • CREATE: 创建节点,关系,模式
    CREATE (:Movie { title:"The Matrix",released:1997 })

    CREATE (a:Person { name:"Tom Hanks",
    born:1956 })-[r:ACTED_IN { roles: ["Forrest"]}]->(m:Movie { title:"Forrest Gump",released:1994 })
    CREATE (d:Person { name:"Robert Zemeckis", born:1951 })-[:DIRECTED]->(m)
    RETURN a,d,r,m
    为现有节点添加关系
    MATCH (p:Person { name:"Tom Hanks" })
    CREATE (m:Movie { title:"Cloud Atlas",released:2012 })
    CREATE (p)-[r:ACTED_IN { roles: ['Zachry']}]->(m)
    RETURN p,r,m
  • MATCH: 查找并返回
    MATCH (m:Movie)
    RETURN m


    MATCH (p:Person { name:"Keanu Reeves" })
    RETURN p


    MATCH (p:Person { name:"Tom Hanks" })-[r:ACTED_IN]->(m:Movie)
    RETURN m.title, r.roles
  • MERGE: 查找模式,如果不存在则创建。并且可以通过ON CREATE添加某些属性
    MERGE (m:Movie { title:"Cloud Atlas" })
    ON CREATE SET m.released = 2012
    RETURN m
  • WHERE: 对查找结果进行过滤
    MATCH (m:Movie)
    WHERE m.title = "The Matrix"
    RETURN m
  • RETURN: 对结果进行处理
    MATCH (:Person)
    RETURN count(*) AS people