Cross Reference: /hets/OWL2/Profiles.hs
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 Maeder{- |
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaederModule : $Header$
81d182b21020b815887e9057959228546cf61b6bChristian MaederCopyright : (c) Felix Gabriel Mance
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaederMaintainer : f.mance@jacobs-university.de
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederStability : provisional
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaederPortability : portable
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederContains : OWL2 Profiles (EL, QL, RL and combinations)
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederReferences : <http://www.w3.org/TR/owl2-profiles/>
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder-}
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maedermodule OWL2.Profiles where
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder
23a00c966f2aa8da525d7a7c51933c99964426c0Christian Maederimport OWL2.AS
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maederimport OWL2.MS
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maederimport Common.Id
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maederimport Data.Maybe
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian Maeder
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maederdata CoreProfiles = CoreProfiles {
04dada28736b4a237745e92063d8bdd49a362debChristian Maeder el0 :: Bool,
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder ql0 :: Bool,
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder rl0 :: Bool
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder } deriving (Show, Eq, Ord)
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maederdata AllProfiles = AllProfiles {
89054b2b95a3f92e78324dc852f3d34704e2ca49Christian Maeder el :: Bool,
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder ql :: Bool,
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder rl :: Bool,
8b9fda012e5ee53b7b2320c0638896a0ff6e99f3Christian Maeder elql :: Bool,
8b9fda012e5ee53b7b2320c0638896a0ff6e99f3Christian Maeder elrl :: Bool,
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder qlrl :: Bool,
8b9fda012e5ee53b7b2320c0638896a0ff6e99f3Christian Maeder all3 :: Bool
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder } deriving (Show, Eq, Ord)
b190f5c7cf3ddda73724efe5ce82b9585ed76be1Christian Maeder
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian MaederbottomProfile :: AllProfiles
04dada28736b4a237745e92063d8bdd49a362debChristian MaederbottomProfile = AllProfiles False False False False False False False
5a13581acc5a76d392c1dec01657bb3efd4dcf2dChristian Maeder
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedertopProfile :: AllProfiles
4ef2a978e66e2246ff0b7f00c77deb7aabb28b8eChristian MaedertopProfile = AllProfiles True True True True True True True
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaedernoProfile :: CoreProfiles
b190f5c7cf3ddda73724efe5ce82b9585ed76be1Christian MaedernoProfile = CoreProfiles False False False
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederelProfile :: CoreProfiles
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederelProfile = CoreProfiles True False False
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederqlProfile :: CoreProfiles
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederqlProfile = CoreProfiles False True False
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederrlProfile :: CoreProfiles
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederrlProfile = CoreProfiles False False True
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederelqlProfile :: CoreProfiles
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederelqlProfile = CoreProfiles True True False
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederelrlProfile :: CoreProfiles
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederelrlProfile = CoreProfiles True False True
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian MaederqlrlProfile :: CoreProfiles
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederqlrlProfile = CoreProfiles False True True
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maederall3Profile :: CoreProfiles
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maederall3Profile = CoreProfiles True True True
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederextendProfile :: CoreProfiles -> AllProfiles
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian MaederextendProfile cp =
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder let e = el0 cp
f94e26f892cf0fe2aa54252ec98920aed3a5c5ecChristian Maeder q = ql0 cp
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder r = rl0 cp
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder in bottomProfile {
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder el = e,
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder ql = q,
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian Maeder rl = r,
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder elql = e || q,
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder elrl = e || r,
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder qlrl = q || r,
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder all3 = e || q || r
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder }
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder
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
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder }
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaederminimalCovering :: CoreProfiles -> [AllProfiles] -> AllProfiles
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian MaederminimalCovering c pl = andProfileList [extendProfile c, andProfileList pl]
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian MaederdatatypeRequirement :: Datatype -> AllProfiles
27912d626bf179b82fcb337077e5cd9653bb71cfChristian MaederdatatypeRequirement dt = topProfile -- needs to be implemented, of course
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maederliteral :: Literal -> AllProfiles
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maederliteral l = topProfile -- needs to be implemented
04dada28736b4a237745e92063d8bdd49a362debChristian Maeder
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maederindividual :: Individual -> AllProfiles
15bb922b665fcd44c6230a1202785d0c7890e90cChristian Maederindividual i = if isAnonymous i then extendProfile rlProfile else topProfile
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaederobjProp :: ObjectPropertyExpression -> AllProfiles
04dada28736b4a237745e92063d8bdd49a362debChristian MaederobjProp ope = case ope of
76fa667489c5e0868ac68de9f0253ac10f73d0b5Christian Maeder ObjectInverseOf _ -> extendProfile qlrlProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder _ -> topProfile
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
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 Maeder
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 case ce of
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 Maeder
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder{-
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder
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
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
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 (case mce of
962d5c684e2b86d1f9c556c096b426e10cc74026Christian Maeder Nothing -> topProfile
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder Just ce -> case ce of
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder Expression c -> topProfile
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder _ -> subClass ce)]
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian Maeder-}
ee9eddfa6953868fd6fbaff0d9ff68675a13675aChristian Maeder {- DataValuesFrom AllValuesFrom _ dr -> validDataRangeRL dr
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder DataHasValue _ _ -> True
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder DataCardinality (Cardinality MaxCardinality i _ mdr) -> elem i [0, 1] &&
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder (case mdr of
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder Nothing -> True
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder Just dr -> validDataRangeRL dr)
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder _ -> False
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder-}
6cca02cb6a5ae882d887a879f8b7a71941c3715cChristian Maeder{-
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
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder _ -> False
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaedervalidDataRangeRL :: DataRange -> Bool
15bb922b665fcd44c6230a1202785d0c7890e90cChristian MaedervalidDataRangeRL dr = case dr of
15bb922b665fcd44c6230a1202785d0c7890e90cChristian Maeder DataType _ cfl -> null cfl
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder DataJunction IntersectionOf drl -> all validDataRangeRL drl
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski _ -> False
validEDClassesRL :: Relation -> [ClassExpression] -> Bool
validEDClassesRL r cel = case r of
EDRelation Equivalent -> all validEquivClassRL cel
EDRelation Disjoint -> all validSubClassRL cel
_ -> False
validLfbRL :: Maybe Relation -> Extended -> ListFrameBit -> Bool
validLfbRL mr ext lfb = case lfb of
ExpressionBit anl ->
let cel = map snd anl
r = fromMaybe (error "relation needed") mr
in case ext of
Misc _ -> validEDClassesRL r cel
ClassEntity c -> case r of
SubClass -> validSubClassRL c && all validSuperClassRL cel
_ -> validEDClassesRL r cel
_ -> all validSuperClassRL cel
IndividualSameOrDifferent _ -> True
ObjectCharacteristics anl ->
let cl = map snd anl
in notElem Reflexive cl && notElem Antisymmetric cl
DataPropRange anl -> all validDataRangeRL $ map snd anl
_ -> True
validAfbRL :: Extended -> AnnFrameBit -> Bool
validAfbRL ext afb = case afb of
DatatypeBit dr -> validDataRangeRL dr
ClassDisjointUnion _ -> False
ClassHasKey _ _ -> case ext of
ClassEntity ce -> validSubClassRL ce
_ -> False
_ -> True
validFbRL :: Extended -> FrameBit -> Bool
validFbRL ext fb = case fb of
ListFrameBit mr lfb -> validLfbRL mr ext lfb
AnnFrameBit _ afb -> validAfbRL ext afb
validAxiomRL :: Axiom -> Bool
validAxiomRL (PlainAxiom ext fb) = validFbRL ext fb
-}