Skip to content

Commit 046f65c

Browse files
committed
Add solutions for exercise 11
1 parent 128bdf3 commit 046f65c

File tree

4 files changed

+68
-0
lines changed

4 files changed

+68
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
@import spouse :- tsv{ resource = f"https://query.wikidata.org/sparql?query={URIENCODE(?query)}",
2+
ignore_headers = true
3+
}, ?query = """
4+
SELECT ?stmt ?subj ?obj WHERE {
5+
?subj p:P26 ?stmt . ?stmt ps:P26 ?obj
6+
}""" .
7+
8+
violations(?stmt) :- spouse(?stmt, ?subj, ?obj), ~spouse(?reverse_stmt, ?obj, ?subj) .
9+
10+
@export violations :- csv{ resource = "" } .
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# -*- mode: sparql -*-
2+
#title:spouse statements lacking an inverse
3+
SELECT ?stmt WHERE {
4+
?subject p:P26 ?stmt .
5+
?stmt ps:P26 ?object .
6+
FILTER NOT EXISTS {
7+
?object wdt:P26 ?subject .
8+
}
9+
}

solutions/schemas/11.2.shacl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
eg:CoordinateShape
2+
a sh:NodeShape ;
3+
sh:targetClass wikibase:GlobecoordinateValue ;
4+
sh:property [
5+
sh:path wikibase:geoLatitude ;
6+
sh:datatype xsd:double
7+
sh:minCount 1;
8+
sh:maxCount 1;
9+
] ;
10+
sh:property [
11+
sh:path wikibase:geoLongitude ;
12+
sh:datatype xsd:double;
13+
sh:minCount 1;
14+
sh:maxCount 1;
15+
] ;
16+
sh:property [
17+
sh:path wikibase:geoPrecision ;
18+
sh:datatype xsd:double;
19+
sh:minCount 1;
20+
sh:maxCount 1;
21+
] ;
22+
sh:property [
23+
sh:path wikibase:geoGlobe ;
24+
sh:nodeKind sh:IRI;
25+
sh:minCount 1;
26+
sh:maxCount 1;
27+
] ;
28+
sh:closed true .

solutions/schemas/11.3.shex

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
PREFIX eg: <http://example.org/>
2+
3+
eg:Coloured @eg:Red OR @eg:Green OR @eg:Blue
4+
5+
eg:Red CLOSED {
6+
a [eg:Node] ;
7+
(eg:edge @eg:Green | eg:edge @eg:Blue |
8+
^eg:edge @eg:Green | ^eg:edge @eg:Blue) * ;
9+
} AND NOT @eg:Green AND NOT @eg:Blue
10+
11+
eg:Green CLOSED {
12+
a [eg:Node] ;
13+
(eg:edge @eg:Red | eg:edge @eg:Blue |
14+
^eg:edge @eg:Red | ^eg:edge @eg:Blue) * ;
15+
} AND NOT @eg:Red AND NOT @eg:Blue
16+
17+
eg:Blue CLOSED {
18+
a [eg:Node] ;
19+
(eg:edge @eg:Green | eg:edge @eg:Red |
20+
^eg:edge @eg:Green | ^eg:edge @eg:Red) * ;
21+
} AND NOT @eg:Red AND NOT @eg:Green

0 commit comments

Comments
 (0)