Skip to content

Commit a0f5978

Browse files
committed
Fixed HOML RuleML output + int is treated as ind
1 parent 5784c4e commit a0f5978

File tree

1 file changed

+55
-13
lines changed

1 file changed

+55
-13
lines changed

utils/drs_to_homl_ruleml.pl

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,30 @@
5050
element('RuleML', [xmlns='http://ruleml.org/spec'], [
5151
element('Assert', [], Elements)
5252
])
53-
) :-
53+
) :-
54+
DRS = drs(_, X),
5455
numbervars(DRS, 0, End),
5556
existdrs_els(DRS, Elements).
5657

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).
5777

5878
%% conds_and(+Conds:list, -Element:functor) is det.
5979
%
@@ -97,16 +117,16 @@
97117
append([Element1], SubElements2, SubElements1),
98118
append(VarElements1, [element('Implies', [], SubElements1)], SubElements0).
99119

100-
120+
101121
% element('Modal',[],[
102122
% element('variety',[],[
103123
% element('Box',[],[
104124
% element('arg',[],[
105125
% element('Const',[],['obl'])])])]),
106126
% element('proposition',[],SubElements)])
107-
108-
109-
cond_element(obl(drs(DOM, Cond)),
127+
128+
129+
cond_element(obl(drs(DOM, Cond)),
110130
element('Modal',[],[
111131
element('variety',[],[
112132
element('Box',[],[
@@ -115,8 +135,8 @@
115135
element('proposition',[],SubElements)]))
116136
:-
117137
existdrs_els(drs(DOM, Cond), SubElements).
118-
119-
cond_element(per(drs(DOM, Cond)),
138+
139+
cond_element(per(drs(DOM, Cond)),
120140
element('Modal',[],[
121141
element('variety',[],[
122142
element('Dia',[],[
@@ -127,7 +147,7 @@
127147
existdrs_els(drs(DOM, Cond), SubElements).
128148

129149

130-
cond_element(nec(drs(DOM, Cond)),
150+
cond_element(nec(drs(DOM, Cond)),
131151
element('Modal',[],[
132152
element('variety',[],[
133153
element('Box',[],[
@@ -136,8 +156,8 @@
136156
element('proposition',[],SubElements)]))
137157
:-
138158
existdrs_els(drs(DOM, Cond), SubElements).
139-
140-
cond_element(poss(drs(DOM, Cond)),
159+
160+
cond_element(poss(drs(DOM, Cond)),
141161
element('Modal',[],[
142162
element('variety',[],[
143163
element('Dia',[],[
@@ -180,6 +200,18 @@
180200

181201
args_els([], []).
182202

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+
183215
args_els([H | T], [element('Data', [], [HH]) | ElsTail]) :-
184216
number(H),
185217
!,
@@ -192,9 +224,19 @@
192224
term_string(H, HH, [numbervars(true)]),
193225
args_els(T, ElsTail).
194226

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+
195236
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+
198240

199241
%% existdrs_els(+Drs:drs, -Elements:list) is det.
200242
%
@@ -208,7 +250,7 @@
208250
args_els(Dom, DomElements),
209251
conds_and(Conds, Element),
210252
append(DomElements, [Element], Elements).
211-
253+
212254

213255
%% to_xml(+Elements:list, -Xml:atom) is det.
214256
%

0 commit comments

Comments
 (0)