===== 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() ]) ]))