Profiles.hs revision ce5d83770556362fe2c8b567975c2a3758888358
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaederModule : $Header$
81d182b21020b815887e9057959228546cf61b6bChristian MaederCopyright : (c) Felix Gabriel Mance
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaederMaintainer : f.mance@jacobs-university.de
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederStability : provisional
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaederPortability : portable
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederContains : OWL2 Profiles (EL, QL, RL and combinations)
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederReferences : <http://www.w3.org/TR/owl2-profiles/>
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maederdata CoreProfiles = CoreProfiles {
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder } deriving (Show, Eq, Ord)
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maederdata AllProfiles = AllProfiles {
8b9fda012e5ee53b7b2320c0638896a0ff6e99f3Christian Maeder elql :: Bool,
8b9fda012e5ee53b7b2320c0638896a0ff6e99f3Christian Maeder elrl :: Bool,
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder qlrl :: Bool,
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder } deriving (Show, Eq, Ord)
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian MaederbottomProfile :: AllProfiles
04dada28736b4a237745e92063d8bdd49a362debChristian MaederbottomProfile = AllProfiles False False False False False False False
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedertopProfile :: AllProfiles
4ef2a978e66e2246ff0b7f00c77deb7aabb28b8eChristian MaedertopProfile = AllProfiles True True True True True True True
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaedernoProfile :: CoreProfiles
b190f5c7cf3ddda73724efe5ce82b9585ed76be1Christian MaedernoProfile = CoreProfiles False False False
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederelProfile :: CoreProfiles
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederelProfile = CoreProfiles True False False
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederqlProfile :: CoreProfiles
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederqlProfile = CoreProfiles False True False
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederrlProfile :: CoreProfiles
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederrlProfile = CoreProfiles False False True
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederelqlProfile :: CoreProfiles
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederelqlProfile = CoreProfiles True True False
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederelrlProfile :: CoreProfiles
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederelrlProfile = CoreProfiles True False True
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederqlrlProfile :: CoreProfiles
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederqlrlProfile = CoreProfiles False True True
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maederall3Profile :: CoreProfiles
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maederall3Profile = CoreProfiles True True True
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederextendProfile :: CoreProfiles -> AllProfiles
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian MaederextendProfile cp =
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder let e = el0 cp
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder in bottomProfile {
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder elql = e || q,
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder elrl = e || r,
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder qlrl = q || r,
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder all3 = e || q || r
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederandProfileList :: [AllProfiles] -> AllProfiles
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederandProfileList pl = bottomProfile {
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder el = all el pl,
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder ql = all ql pl,
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder rl = all rl pl,
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder elql = all elql pl,
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder elrl = all elrl pl,
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder qlrl = all qlrl pl,
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder all3 = all all3 pl
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederminimalCovering :: CoreProfiles -> [AllProfiles] -> AllProfiles
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian MaederminimalCovering c pl = andProfileList [extendProfile c, andProfileList pl]
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian MaederdatatypeRequirement :: Datatype -> AllProfiles
27912d626bf179b82fcb337077e5cd9653bb71cfChristian MaederdatatypeRequirement dt = topProfile -- needs to be implemented, of course
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maederliteral :: Literal -> AllProfiles
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maederliteral l = topProfile -- needs to be implemented
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maederindividual :: Individual -> AllProfiles
15bb922b665fcd44c6230a1202785d0c7890e90cChristian Maederindividual i = if isAnonymous i then extendProfile rlProfile else topProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederobjProp :: ObjectPropertyExpression -> AllProfiles
04dada28736b4a237745e92063d8bdd49a362debChristian MaederobjProp ope = case ope of
76fa667489c5e0868ac68de9f0253ac10f73d0b5Christian Maeder ObjectInverseOf _ -> extendProfile qlrlProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder _ -> topProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederdataRange :: DataRange -> AllProfiles
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederdataRange dr = case dr of
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder DataType dt cfl ->
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder if null cfl then datatypeRequirement dt
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder else bottomProfile
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder DataJunction IntersectionOf drl -> andProfileList $ map dataRange drl
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder DataOneOf ll -> minimalCovering elProfile $ map literal ll
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder _ -> bottomProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedersubClass :: ClassExpression -> AllProfiles
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedersubClass cex = case cex of
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder Expression c -> if isThing c then extendProfile elqlProfile else topProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder ObjectJunction jt cel -> case jt of
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder IntersectionOf -> minimalCovering elrlProfile $ map subClass cel
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder UnionOf -> minimalCovering rlProfile $ map subClass cel
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder ObjectOneOf il -> minimalCovering elrlProfile $ map individual il
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder ObjectValuesFrom SomeValuesFrom ope ce -> andProfileList [objProp ope,
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder Expression c -> if isThing c then topProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder else extendProfile elrlProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder _ -> minimalCovering elrlProfile [subClass ce]]
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder ObjectHasValue ope i -> minimalCovering elrlProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder [objProp ope, individual i]
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder ObjectHasSelf ope -> minimalCovering elProfile [objProp ope]
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder DataValuesFrom SomeValuesFrom _ dr -> dataRange dr
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder DataHasValue _ l -> literal l
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder _ -> bottomProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedersubClass :: ClassExpression -> AllProfiles
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedersubClass cex = case cex of
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder Expression c -> computeAll [True, True, (not . isThing) c]
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder ObjectJunction jt cel -> case jt of
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder IntersectionOf -> minimalCovering elrl $ map subClass cel
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder UnionOf -> minimalCovering rl $ map subClass cel
975642b989852fc24119c59cf40bc1af653608ffChristian Maeder ObjectOneOf _ -> computeAll elrl
975642b989852fc24119c59cf40bc1af653608ffChristian Maeder ObjectValuesFrom SomeValuesFrom _ ce -> case ce of
975642b989852fc24119c59cf40bc1af653608ffChristian Maeder Expression c -> if isThing c then topProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder else computeAll elrl
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder _ -> computeAll elrl
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder ObjectHasValue _ _ -> computeAll elrl
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder ObjectHasSelf _ -> computeAll el
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian Maeder DataHasValue _ _ -> computeAll elrl
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder DataValuesFrom SomeValuesFrom _ dr -> bottomProfile -- dataRange dr
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder _ -> bottomProfile
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian MaedersuperClass :: ClassExpression -> AllProfiles
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaedersuperClass cex = case cex of
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder Expression c -> computeAll [True, True, (not . isThing) c]
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder ObjectJunction IntersectionOf cel -> anaTable $ map superClass cel
962d5c684e2b86d1f9c556c096b426e10cc74026Christian Maeder ObjectComplementOf ce -> minimalCovering qlrl [subClass ce]
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder ObjectOneOf _ -> computeAll el
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder ObjectValuesFrom qt _ ce -> case qt of
962d5c684e2b86d1f9c556c096b426e10cc74026Christian Maeder SomeValuesFrom -> minimalCovering elql [subClass ce] -- !! check this
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder AllValuesFrom -> minimalCovering rl [superClass ce]
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder ObjectHasValue _ _ -> computeAll elrl
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder ObjectCardinality (Cardinality MaxCardinality i _ mce) ->
962d5c684e2b86d1f9c556c096b426e10cc74026Christian Maeder let tf = elem i [0, 1]
962d5c684e2b86d1f9c556c096b426e10cc74026Christian Maeder in minimalCovering rl [[tf, tf, tf, tf, tf, tf, tf],
962d5c684e2b86d1f9c556c096b426e10cc74026Christian Maeder Nothing -> topProfile
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder Just ce -> case ce of
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder Expression c -> topProfile
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder _ -> subClass ce)]
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian Maeder {- DataValuesFrom AllValuesFrom _ dr -> validDataRangeRL dr
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder DataHasValue _ _ -> True
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder DataCardinality (Cardinality MaxCardinality i _ mdr) -> elem i [0, 1] &&
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder Nothing -> True
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder Just dr -> validDataRangeRL dr)
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaedervalidEquivClassRL :: ClassExpression -> Bool
2ac1742771a267119f1d839054b5e45d0a468085Christian MaedervalidEquivClassRL cex = case cex of
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder Expression c -> (not . isThing) c
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder ObjectJunction IntersectionOf cel -> all validEquivClassRL cel
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian Maeder ObjectHasValue _ _ -> True
5a13581acc5a76d392c1dec01657bb3efd4dcf2dChristian Maeder DataHasValue _ _ -> True
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaedervalidDataRangeRL :: DataRange -> Bool
15bb922b665fcd44c6230a1202785d0c7890e90cChristian MaedervalidDataRangeRL dr = case dr of
15bb922b665fcd44c6230a1202785d0c7890e90cChristian Maeder DataType _ cfl -> null cfl
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder DataJunction IntersectionOf drl -> all validDataRangeRL drl