|
50 | 50 | element('RuleML', [xmlns='http://ruleml.org/spec'], [ |
51 | 51 | element('Assert', [], Elements) |
52 | 52 | ]) |
53 | | - ) :- |
| 53 | +) :- |
| 54 | + DRS = drs(_, X), |
54 | 55 | numbervars(DRS, 0, End), |
55 | 56 | existdrs_els(DRS, Elements). |
56 | 57 |
|
| 58 | +%% |
| 59 | +%% Currently, we conly handle single questions properly. |
| 60 | +%% Having many questions as a single input will ultimately fail. |
| 61 | +%% |
| 62 | +%% It is generally more favourable to submit single sentences to |
| 63 | +%% the parser, whether they are facts, rules, or queries. |
| 64 | +%% |
| 65 | +%% |
| 66 | +drs_to_homl_ruleml( |
| 67 | + DRS, |
| 68 | + element('RuleML', [xmlns='http://ruleml.org/spec'], [ |
| 69 | + element('Query', [], Elements) |
| 70 | + ]) |
| 71 | +) :- |
| 72 | + write(DRS),nl,nl, |
| 73 | + DRS = drs([], [question(X)]), |
| 74 | + write(X), nl, nl, |
| 75 | + numbervars(X, 0, End), |
| 76 | + existdrs_els(X, Elements). |
57 | 77 |
|
58 | 78 | %% conds_and(+Conds:list, -Element:functor) is det. |
59 | 79 | % |
|
97 | 117 | append([Element1], SubElements2, SubElements1), |
98 | 118 | append(VarElements1, [element('Implies', [], SubElements1)], SubElements0). |
99 | 119 |
|
100 | | - |
| 120 | + |
101 | 121 | % element('Modal',[],[ |
102 | 122 | % element('variety',[],[ |
103 | 123 | % element('Box',[],[ |
104 | 124 | % element('arg',[],[ |
105 | 125 | % element('Const',[],['obl'])])])]), |
106 | 126 | % element('proposition',[],SubElements)]) |
107 | | - |
108 | | - |
109 | | -cond_element(obl(drs(DOM, Cond)), |
| 127 | + |
| 128 | + |
| 129 | +cond_element(obl(drs(DOM, Cond)), |
110 | 130 | element('Modal',[],[ |
111 | 131 | element('variety',[],[ |
112 | 132 | element('Box',[],[ |
|
115 | 135 | element('proposition',[],SubElements)])) |
116 | 136 | :- |
117 | 137 | existdrs_els(drs(DOM, Cond), SubElements). |
118 | | - |
119 | | -cond_element(per(drs(DOM, Cond)), |
| 138 | + |
| 139 | +cond_element(per(drs(DOM, Cond)), |
120 | 140 | element('Modal',[],[ |
121 | 141 | element('variety',[],[ |
122 | 142 | element('Dia',[],[ |
|
127 | 147 | existdrs_els(drs(DOM, Cond), SubElements). |
128 | 148 |
|
129 | 149 |
|
130 | | -cond_element(nec(drs(DOM, Cond)), |
| 150 | +cond_element(nec(drs(DOM, Cond)), |
131 | 151 | element('Modal',[],[ |
132 | 152 | element('variety',[],[ |
133 | 153 | element('Box',[],[ |
|
136 | 156 | element('proposition',[],SubElements)])) |
137 | 157 | :- |
138 | 158 | existdrs_els(drs(DOM, Cond), SubElements). |
139 | | - |
140 | | -cond_element(poss(drs(DOM, Cond)), |
| 159 | + |
| 160 | +cond_element(poss(drs(DOM, Cond)), |
141 | 161 | element('Modal',[],[ |
142 | 162 | element('variety',[],[ |
143 | 163 | element('Dia',[],[ |
|
180 | 200 |
|
181 | 201 | args_els([], []). |
182 | 202 |
|
| 203 | +%% |
| 204 | +%% Following the comments of Harold Boley, we can treat integers as individuals. |
| 205 | +%% Dealing with complext data like floats is subject to future research. |
| 206 | +%% |
| 207 | + |
| 208 | +args_els([H | T], [element('Ind', [], [HH]) | ElsTail]) :- |
| 209 | + integer(H), |
| 210 | + !, |
| 211 | + term_string(H, HH, [numbervars(true)]), |
| 212 | + args_els(T, ElsTail). |
| 213 | + |
| 214 | + |
183 | 215 | args_els([H | T], [element('Data', [], [HH]) | ElsTail]) :- |
184 | 216 | number(H), |
185 | 217 | !, |
|
192 | 224 | term_string(H, HH, [numbervars(true)]), |
193 | 225 | args_els(T, ElsTail). |
194 | 226 |
|
| 227 | +args_els([H | T], [element('Ind', [], [HH]) | ElsTail]) :- |
| 228 | + H = named(X), |
| 229 | + !, |
| 230 | + atom_string(X, QuotedString), |
| 231 | + string_lower(QuotedString, Lower), |
| 232 | + atom_string(Atom, Lower), |
| 233 | + term_string(Atom, HH, [numbervars(true)]), |
| 234 | + args_els(T, ElsTail). |
| 235 | + |
195 | 236 | args_els([H | T], [element('Var', [], [HH]) | ElsTail]) :- |
196 | | - term_string(H, HH, [numbervars(true)]), |
197 | | - args_els(T, ElsTail). |
| 237 | + term_string(H, HH, [numbervars(true)]), |
| 238 | + args_els(T, ElsTail). |
| 239 | + |
198 | 240 |
|
199 | 241 | %% existdrs_els(+Drs:drs, -Elements:list) is det. |
200 | 242 | % |
|
208 | 250 | args_els(Dom, DomElements), |
209 | 251 | conds_and(Conds, Element), |
210 | 252 | append(DomElements, [Element], Elements). |
211 | | - |
| 253 | + |
212 | 254 |
|
213 | 255 | %% to_xml(+Elements:list, -Xml:atom) is det. |
214 | 256 | % |
|
0 commit comments