===== Porównanie postaci prologowych w wybranych wersjach Prologu =====
Porównanie przeprowadzono dla pliku xml pochodzącego z syetemu VARDA-M_1
Do porównania postaci prologowej pliku XML zdecydowano się wykorzystać następujące wersje prologu.
- SWI-Prolog
- BProlog
- JIProlog
Wersje te nie posiadają żadnych ograniczeń w użyciu.
Otrzymano następujące wyniki:
==== SWI-Prolog ====
[[http://www.swi-prolog.org/packages/sgml2pl.html | SWI Prolog]]
Plik XML po sparsowaniu w SWI Prologu za pomocą predykatu //load_xml_file('therm.xml',X)// jest w postaci listy, która składa się z zagnieżdżonych struktur typu //**element(Node_Name, [Value], [child_element])**//.
X = [element(hml, [], [
, element(type_set, [], []),
, element(attribute_set, [], [
, element(att, [name=Thermostat, id=att_0, value=single, class=ro], []),
, element(att, [name=Time, id=att_1, value=single, class=ro], []),
, element(att, [name=Temperature, id=att_2, value=single, class=ro], []),
, element(att, [name=Date, id=att_3, value=single, class=ro], []),
, element(att, [name=Hour, id=att_4, value=single, class=ro], []),
, element(att, [name=season, id=att_5, value=single, class=ro], []),
, element(att, [name=operation, id=att_6, value=single, class=ro], []),
, element(att, [name=thermostat_settings, id=att_7, value=single, class=ro], []),
, element(att, [name=day, id=att_8, value=single, class=ro], []),
, element(att, [name=month, id=att_9, value=single, class=ro], []),
, element(att, [name=today, id=att_10, value=single, class=ro], []),
, element(att, [name=hour, id=att_11, value=single, class=ro], []),
]),
, element(property_set, [], [
, element(property, [id=prp_0], [
, element(attref, [ref=att_0], []),
]),
, element(property, [id=prp_1], [
, element(attref, [ref=att_1], []),
, element(attref, [ref=att_2], []),
]),
, element(property, [id=prp_2], [
, element(attref, [ref=att_1], []),
]),
, element(property, [id=prp_3], [
, element(attref, [ref=att_2], []),
]),
, element(property, [id=prp_4], [
, element(attref, [ref=att_3], []),
, element(attref, [ref=att_4], []),
, element(attref, [ref=att_5], []),
, element(attref, [ref=att_6], []),
]),
, element(property, [id=prp_5], [
, element(attref, [ref=att_3], []),
, element(attref, [ref=att_4], []),
]),
, element(property, [id=prp_6], [
, element(attref, [ref=att_5], []),
, element(attref, [ref=att_6], []),
]),
, element(property, [id=prp_7], [
, element(attref, [ref=att_7], []),
]),
, element(property, [id=prp_8], [
, element(attref, [ref=att_5], []),
]),
, element(property, [id=prp_9], [
, element(attref, [ref=att_6], []),
]),
, element(property, [id=prp_10], [
, element(attref, [ref=att_3], []),
]),
, element(property, [id=prp_11], [
, element(attref, [ref=att_4], []),
]),
, element(property, [id=prp_12], [
, element(attref, [ref=att_8], []),
, element(attref, [ref=att_9], []),
, element(attref, [ref=att_10], []),
]),
, element(property, [id=prp_13], [
, element(attref, [ref=att_9], []),
]),
, element(property, [id=prp_14], [
, element(attref, [ref=att_8], []),
, element(attref, [ref=att_10], []),
]),
, element(property, [id=prp_15], [
, element(attref, [ref=att_8], []),
]),
, element(property, [id=prp_16], [
, element(attref, [ref=att_10], []),
]),
, element(property, [id=prp_17], [
, element(attref, [ref=att_11], []),
]),
]),
, element(tph, [], [
, element(trans, [src=prp_0, dst=prp_1], []),
, element(trans, [src=prp_1, dst=prp_2], []),
, element(trans, [src=prp_1, dst=prp_3], []),
, element(trans, [src=prp_2, dst=prp_4], []),
, element(trans, [src=prp_4, dst=prp_5], []),
, element(trans, [src=prp_4, dst=prp_6], []),
, element(trans, [src=prp_3, dst=prp_7], []),
, element(trans, [src=prp_6, dst=prp_8], []),
, element(trans, [src=prp_6, dst=prp_9], []),
, element(trans, [src=prp_5, dst=prp_10], []),
, element(trans, [src=prp_5, dst=prp_11], []),
, element(trans, [src=prp_10, dst=prp_12], []),
, element(trans, [src=prp_12, dst=prp_13], []),
, element(trans, [src=prp_12, dst=prp_14], []),
, element(trans, [src=prp_14, dst=prp_15], []),
, element(trans, [src=prp_14, dst=prp_16], []),
, element(trans, [src=prp_11, dst=prp_17], []),
]),
, element(ard, [], [
, element(dep, [independent=prp_8, dependent=prp_7], []),
, element(dep, [independent=prp_9, dependent=prp_7], []),
, element(dep, [independent=prp_13, dependent=prp_8], []),
, element(dep, [independent=prp_15, dependent=prp_16], []),
, element(dep, [independent=prp_16, dependent=prp_9], []),
, element(dep, [independent=prp_17, dependent=prp_9], []),
]),
])]
==== BProlog ====
[[http://www.probp.com/publib/xml.html | BProlog]]
Struktura prologowa jest w postaci termu //**xml([version, encoding],[ element(...)])**// oraz zagnieżdżonych w nim termów //**element(Node_Name, [Value], [child_element])**//.
xml( [version="1.0", encoding="utf-8", standalone="no"],[
doctype( hml, system( "hml.dtd" ) ),
element( hml,[],[
element( type_set,[],[] ),
element( attribute_set,[],[
element( att,[name="Thermostat", id="att_0", value="single", class="ro"],[] ),
element( att,[name="Time", id="att_1", value="single", class="ro"],[] ),
element( att,[name="Temperature", id="att_2", value="single", class="ro"],[] ),
element( att,[name="Date", id="att_3", value="single", class="ro"],[] ),
element( att,[name="Hour", id="att_4", value="single", class="ro"],[] ),
element( att,[name="season", id="att_5", value="single", class="ro"],[] ),
element( att,[name="operation", id="att_6", value="single", class="ro"],[] ),
element( att,[name="thermostat_settings", id="att_7", value="single", class="ro"],[] ),
element( att,[name="day", id="att_8", value="single", class="ro"],[] ),
element( att,[name="month", id="att_9", value="single", class="ro"],[] ),
element( att,[name="today", id="att_10", value="single", class="ro"],[] ),
element( att,[name="hour", id="att_11", value="single", class="ro"],[] )
] ),
element( property_set,[],[
element( property,[id="prp_0"],[
element( attref,[ref="att_0"],[] )
] ),
element( property,[id="prp_1"],[
element( attref,[ref="att_1"],[] ),
element( attref,[ref="att_2"],[] )
] ),
element( property,[id="prp_2"],[
element( attref,[ref="att_1"],[] )
] ),
element( property,[id="prp_3"],[
element( attref,[ref="att_2"],[] )
] ),
element( property,[id="prp_4"],[
element( attref,[ref="att_3"],[] ),
element( attref,[ref="att_4"],[] ),
element( attref,[ref="att_5"],[] ),
element( attref,[ref="att_6"],[] )
] ),
element( property,[id="prp_5"],[
element( attref,[ref="att_3"],[] ),
element( attref,[ref="att_4"],[] )
] ),
element( property,[id="prp_6"],[
element( attref,[ref="att_5"],[] ),
element( attref,[ref="att_6"],[] )
] ),
element( property,[id="prp_7"],[
element( attref,[ref="att_7"],[] )
] ),
element( property,[id="prp_8"],[
element( attref,[ref="att_5"],[] )
] ),
element( property,[id="prp_9"],[
element( attref,[ref="att_6"],[] )
] ),
element( property,[id="prp_10"],[
element( attref,[ref="att_3"],[] )
] ),
element( property,[id="prp_11"],[
element( attref,[ref="att_4"],[] )
] ),
element( property,[id="prp_12"],[
element( attref,[ref="att_8"],[] ),
element( attref,[ref="att_9"],[] ),
element( attref,[ref="att_10"],[] )
] ),
element( property,[id="prp_13"],[
element( attref,[ref="att_9"],[] )
] ),
element( property,[id="prp_14"],[
element( attref,[ref="att_8"],[] ),
element( attref,[ref="att_10"],[] )
] ),
element( property,[id="prp_15"],[
element( attref,[ref="att_8"],[] )
] ),
element( property,[id="prp_16"],[
element( attref,[ref="att_10"],[] )
] ),
element( property,[id="prp_17"],[
element( attref,[ref="att_11"],[] )
] )
] ),
element( tph,[],[
element( trans,[src="prp_0", dst="prp_1"],[] ),
element( trans,[src="prp_1", dst="prp_2"],[] ),
element( trans,[src="prp_1", dst="prp_3"],[] ),
element( trans,[src="prp_2", dst="prp_4"],[] ),
element( trans,[src="prp_4", dst="prp_5"],[] ),
element( trans,[src="prp_4", dst="prp_6"],[] ),
element( trans,[src="prp_3", dst="prp_7"],[] ),
element( trans,[src="prp_6", dst="prp_8"],[] ),
element( trans,[src="prp_6", dst="prp_9"],[] ),
element( trans,[src="prp_5", dst="prp_10"],[] ),
element( trans,[src="prp_5", dst="prp_11"],[] ),
element( trans,[src="prp_10", dst="prp_12"],[] ),
element( trans,[src="prp_12", dst="prp_13"],[] ),
element( trans,[src="prp_12", dst="prp_14"],[] ),
element( trans,[src="prp_14", dst="prp_15"],[] ),
element( trans,[src="prp_14", dst="prp_16"],[] ),
element( trans,[src="prp_11", dst="prp_17"],[] )
] ),
element( ard,[],[
element( dep,[independent="prp_8", dependent="prp_7"],[] ),
element( dep,[independent="prp_9", dependent="prp_7"],[] ),
element( dep,[independent="prp_13", dependent="prp_8"],[] ),
element( dep,[independent="prp_15", dependent="prp_16"],[] ),
element( dep,[independent="prp_16", dependent="prp_9"],[] ),
element( dep,[independent="prp_17", dependent="prp_9"],[] )
] )
] )
] ).
==== JIProlog ====
[[http://www.ugosweb.com/jiprolog/index.aspx | JIProlog]]
Struktura postaci prologowej jest w postaci zagnieżdżonych termów zaczynając od xml_document i idąc wgłąb xml_element, xml_attribute oraz xml_text.
Charakterystyczne dla postaci prologowej są:
* **xml_document(Prolog, Root) [[version = V, encoding = E], DocType]**
* **xml_element(Name, Attributes, Children)**
* **xml_attribute(Name, Value)**
* **xml_text(Content)**
X=xml_document([version = 1.0, encoding = UTF-8], [],
xml_element(hml, [], [xml_text(),
xml_element(type_set, [], [xml_text()]), xml_text(),
xml_element(attribute_set, [], [xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_0),
xml_attribute(name, Thermostat),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_1),
xml_attribute(name, Time),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_2),
xml_attribute(name, Temperature),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_3),
xml_attribute(name, Date),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_4),
xml_attribute(name, Hour),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_5),
xml_attribute(name, season),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_6),
xml_attribute(name, operation),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_7),
xml_attribute(name, thermostat_settings),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_8),
xml_attribute(name, day),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_9),
xml_attribute(name, month),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_10),
xml_attribute(name, today),
xml_attribute(value, single)],
[]), xml_text(),
xml_element(att, [
xml_attribute(class, ro),
xml_attribute(id, att_11),
xml_attribute(name, hour),
xml_attribute(value, single)],
[]), xml_text()
]), xml_text(),
xml_element(property_set, [], [xml_text(),
xml_element(property, [xml_attribute(id, prp_0)],[xml_text(),
xml_element(attref, [xml_attribute(ref, att_0)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_1)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_1)], []), xml_text(),
xml_element(attref, [xml_attribute(ref, att_2)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_2)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_1)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_3)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_2)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_4)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_3)], []), xml_text(),
xml_element(attref, [xml_attribute(ref, att_4)], []), xml_text(),
xml_element(attref, [xml_attribute(ref, att_5)], []), xml_text(),
xml_element(attref, [xml_attribute(ref, att_6)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_5)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_3)], []), xml_text(),
xml_element(attref, [xml_attribute(ref, att_4)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_6)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_5)], []), xml_text(),
xml_element(attref, [xml_attribute(ref, att_6)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_7)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_7)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_8)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_5)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_9)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_6)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_10)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_3)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_11)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_4)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_12)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_8)], []), xml_text(),
xml_element(attref, [xml_attribute(ref, att_9)], []), xml_text(),
xml_element(attref, [xml_attribute(ref, att_10)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_13)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_9)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_14)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_8)], []), xml_text(),
xml_element(attref, [xml_attribute(ref, att_10)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_15)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_8)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_16)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_10)], []), xml_text()
]), xml_text(),
xml_element(property, [xml_attribute(id, prp_17)], [xml_text(),
xml_element(attref, [xml_attribute(ref, att_11)], []), xml_text()
]), xml_text()
]), xml_text(),
xml_element(tph, [], [xml_text(),
xml_element(trans, [xml_attribute(dst, prp_1), xml_attribute(src, prp_0)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_2), xml_attribute(src, prp_1)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_3), xml_attribute(src, prp_1)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_4), xml_attribute(src, prp_2)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_5), xml_attribute(src, prp_4)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_6), xml_attribute(src, prp_4)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_7), xml_attribute(src, prp_3)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_8), xml_attribute(src, prp_6)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_9), xml_attribute(src, prp_6)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_10), xml_attribute(src, prp_5)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_11), xml_attribute(src, prp_5)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_12), xml_attribute(src, prp_10)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_13), xml_attribute(src, prp_12)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_14), xml_attribute(src, prp_12)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_15), xml_attribute(src, prp_14)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_16), xml_attribute(src, prp_14)], []), xml_text(),
xml_element(trans, [xml_attribute(dst, prp_17), xml_attribute(src, prp_11)], []), xml_text()
]), xml_text(),
xml_element(ard, [], [xml_text(),
xml_element(dep, [xml_attribute(dependent, prp_7), xml_attribute(independent, prp_8)], []), xml_text(),
xml_element(dep, [xml_attribute(dependent, prp_7), xml_attribute(independent, prp_9)], []), xml_text(),
xml_element(dep, [xml_attribute(dependent, prp_8), xml_attribute(independent, prp_13)], []), xml_text(),
xml_element(dep, [xml_attribute(dependent, prp_16), xml_attribute(independent, prp_15)], []), xml_text(),
xml_element(dep, [xml_attribute(dependent, prp_9), xml_attribute(independent, prp_16)], []), xml_text(),
xml_element(dep, [xml_attribute(dependent, prp_9), xml_attribute(independent, prp_17)], []), xml_text()
])
]))