Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_xtt_rif [2008/05/28 17:34] miw |
pl:miw:miw08_xtt_rif [2019/06/27 15:50] (aktualna) |
====== Opis ====== | ====== Opis ====== |
| __**Projekt zakończony**__ |
| |
Mateusz Mazur, <m-a-t-i@o2.pl> | Mateusz Mazur, <m-a-t-i@o2.pl> |
| |
* [[http://xml.apache.org/]] | * [[http://xml.apache.org/]] |
* :!:**[[http://www.w3.org/2005/rules/wg/wiki/Arch/XML_Syntax_Issues_2]]** | * :!:**[[http://www.w3.org/2005/rules/wg/wiki/Arch/XML_Syntax_Issues_2]]** |
| |
| |
====== Sprawozdanie ====== | ====== Sprawozdanie ====== |
//W oparciu o dokumentację z 15.04.2008// ({{:pl:miw:miw08_xtt_rif:rif_bld_fld_freez.zip|rif_bld_fld_freez.zip}}) | //W oparciu o dokumentację z 15.04.2008// ({{:pl:miw:miw08_xtt_rif:rif_bld_fld_freez.zip|rif_bld_fld_freez.zip}}) |
---- | ---- |
| * 08.05.18 - nowy szkic specyfikacji. Nowości: |
| * Dokument: [[http://www.w3.org/2005/rules/wg/draft/ED-rif-dtb-20080518/|RIF Data Types and Built-Ins]] |
| * Dokument: [[http://www.w3.org/2005/rules/wg/draft/ED-rif-ucr-20080518/|RIF Use Cases and Requirements]] |
| * Rozdział w RIF-BLD: [[http://www.w3.org/2005/rules/wg/draft/ED-rif-bld-20080518/diff-since-20080415#Interpretation_of_Documents|Interpretation of Documents]] |
| * BLD: zmiany w opisie termów |
| * BLD: zmiany w opisie dobrze sformułowanych formuł |
| * BLD: zmiany w gramatyce |
| |
===== Wprowadzenie do RIF ===== | ===== Wprowadzenie do RIF ===== |
| |
Zbiór ''TV'' wartości prawdy w RIF-BLD składa się z dwóch wartości: ''t'' oraz ''f''. | Zbiór ''TV'' wartości prawdy w RIF-BLD składa się z dwóch wartości: ''t'' oraz ''f''. |
| |
| |
| |
| |
**Definicja (Struktura Semantyczna)**\\ | **Definicja (Struktura Semantyczna)**\\ |
Struktura semantyczna, ''I'', jest to tuple //(ang.)// postaci ''<TV, DTS, D, Dind, Dfunc, IC, IV, IF, Iframe, ISF, Isub, Iisa, I=, Iexternal, Itruth>''. Gdzie ''D'' jest niepustym zbiorem elementów zwanym //domeną ''I'' (ang. domain)//, natomiast ''Dind'', ''Dfunc'' są niepustymi podzbiorami ''D''. ''Ding'' jest używany do interpretowania elementów ''Const'', oznaczających osobniki. ''Dfunc'' zawiera elementy ''Const'' oznaczające symbole funkcyjne. Jak poprzednio, ''Const'' oznacza zbiór wszystkich stałych symboli, a ''Var'' - zbiór wszystkich zmiennych symboli. ''TV'' oznacza zbiór wartości prawdy, których używa struktura semantyczna, a ''DTS'' jest zbiorem prostych typów danych używanych w ''I'' (Rozdział Primitive Data Types w RIF-FLD). | Struktura semantyczna, ''I'', jest to entka //(ang. tuple)// postaci ''<TV, DTS, D, Dind, Dfunc, IC, IV, IF, Iframe, ISF, Isub, Iisa, I=, Iexternal, Itruth>''. Gdzie ''D'' jest niepustym zbiorem elementów zwanym //domeną ''I'' (ang. domain)//, natomiast ''Dind'', ''Dfunc'' są niepustymi podzbiorami ''D''. ''Ding'' jest używany do interpretowania elementów ''Const'', oznaczających osobniki. ''Dfunc'' zawiera elementy ''Const'' oznaczające symbole funkcyjne. Jak poprzednio, ''Const'' oznacza zbiór wszystkich stałych symboli, a ''Var'' - zbiór wszystkich zmiennych symboli. ''TV'' oznacza zbiór wartości prawdy, których używa struktura semantyczna, a ''DTS'' jest zbiorem prostych typów danych używanych w ''I'' (Rozdział Primitive Data Types w RIF-FLD). |
| |
Pozostałe składowe ''I'' są odwzorowaniami zupełnymi (ang. total mappings) zdefiniowanymi następująco: | Pozostałe składowe ''I'' są odwzorowaniami zupełnymi (ang. total mappings) zdefiniowanymi następująco: |
Wstępne przmyślenia: | Wstępne przmyślenia: |
* Do nadania identyfikatorów posłuży element spoza RIF, należący do języka XML - ''id''. | * Do nadania identyfikatorów posłuży element spoza RIF, należący do języka XML - ''id''. |
| |
| |
| |
| |
| |
<then> | <then> |
<Atom> <!-- specjalny predykat, sugerujący następną regułę/tablicę i wywołujący inne predykaty --> | <Atom> <!-- specjalny predykat, sugerujący następną regułę/tablicę i wywołujący inne predykaty --> |
<op><Const type="rif:iri">xtt:concl</Const></op> | <op><Const type="rif:iri">xtt:next_table_rule</Const></op> |
<arg> | <arg><Const type="xsd:string">xtt_table1</Const></arg> |
<Atom> <!-- predykat podajacy wartosci 'id' nastepnej tablicy/wiersza --> | <arg><Const type="xsd:string">xtt_table_row1</Const></arg> |
<op><Const type="rif:iri">xtt:next_table_rule</Const></op> | |
<arg><Const type="xsd:string">xtt_table1</Const></arg> | |
<arg><Const type="xsd:string">xtt_table_row1</Const></arg> | |
</Atom> | |
</arg> | |
<arg> | <arg> |
<!-- albo predykat do wywołania, albo predykat xtt:run_many wywołujący więcej niż jeden predykat --> | <!-- albo predykat do wywołania, albo predykat xtt:run_many wywołujący więcej niż jeden predykat --> |
| |
=== Wykorzystywane predykaty === | === Wykorzystywane predykaty === |
W najnowszej wersji dokumentacji RIFa pojawił się dokument definiujący zarówno [[http://www.w3.org/2005/rules/wg/draft/rif-dtb/|predykaty wbudowane]], jaki i [[http://www.w3.org/2005/rules/wg/draft/rif-dtb/#Appendix:_Schemas_for_Externally_Defined_Terms|definiowanie zewnętrznych]]. | W najnowszej wersji dokumentacji RIFa pojawił się dokument definiujący zarówno [[http://www.w3.org/2005/rules/wg/draft/ED-rif-dtb-20080518/#List_of_Supported_Built-in_Predicates_and_Functions|predykaty wbudowane]], jaki i [[http://www.w3.org/2005/rules/wg/draft/rif-dtb/#Appendix:_Schemas_for_Externally_Defined_Terms|definiowanie zewnętrznych]]. |
| |
^Predykat ^External schema ^Opis ^ | ^Predykat ^External schema ^Opis ^ |
* Każda tablica (element ''Group'') musi być w osobnym pliku (zgodność z plikami xsd). | * Każda tablica (element ''Group'') musi być w osobnym pliku (zgodność z plikami xsd). |
| |
=== Przykład 1: calculations (factorial) === | |
<code> | |
|----------------------------------------------------| | |
| | | |
| x s || s | | |
|->------------ x y s || y | | |
NA ||=x --+------> ------------------- | | |
>0 ||=s-1 --| || | | |
>0 >0 || =y*s -----| | |
=0 || =1 -----------| | |
>0 =1 || -----------+------> | |
</code> | |
<code xml> | |
<Group id="xtt_table1"> | |
<sentence id="xtt_table1_row1"> | |
<Implies> | |
<if> | |
<External> | |
<content> | |
<Atom> | |
<op><Const type="rif:iri">fn:is_empty</Const></op> | |
<arg><Var>x</Var></arg> | |
</Atom> | |
</content> | |
</External> | |
</if> | |
<then> | |
<Atom> | |
<op><Const type="rif:iri">xtt:concl</Const></op> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">xtt:next_table</Const></op> | |
<arg><Const type="xsd:string">xtt_table2</Const></arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">op:assign</Const></op> | |
<arg><Var>s</Var></arg> | |
<arg><Var>x</Var></arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
</Atom> | |
</then> | |
</Implies> | |
</sentence> | |
| |
<sentence id="xtt_table1_row2"> | |
<Implies> | |
<if> | |
<External> | |
<content> | |
<Atom> | |
<op><Const type="rif:iri">op:numeric-greater-than</Const></op> | |
<arg><Var>s</Var></arg> | |
<arg><Const type="xsd:decimal">0</Const></arg> | |
</Atom> | |
</content> | |
</External> | |
</if> | |
<then> | |
<Atom> | |
<op><Const type="rif:iri">xtt:concl</Const></op> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">xtt:next_table</Const></op> | |
<arg><Const type="xsd:string">xtt_table2</Const></arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">op:assign</Const></op> | |
<arg><Var>s</Var></arg> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">op:numeric-substract</Const></op> | |
<arg><Var>s</Var></arg> | |
<arg><Const type="xsd:decimal">1</Const></arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
</Atom> | |
</then> | |
</Implies> | |
</sentence> | |
</Group> | |
| |
<Group id="xtt_table2"> | |
<sentence id="xtt_table2_row1"> | |
<Implies> | |
<if> | |
<And> | |
<formula> | |
<External> | |
<content> | |
<Atom> | |
<op><Const type="rif:iri">op:numeric-greater-than</Const></op> | |
<arg><Var>x</Var></arg> | |
<arg><Const type="xsd:decimal">0</Const></arg> | |
</Atom> | |
</content> | |
</External> | |
</formula> | |
<formula> | |
<External> | |
<content> | |
<Atom> | |
<op><Const type="rif:iri">op:numeric-greater-than</Const></op> | |
<arg><Var>s</Var></arg> | |
<arg><Const type="xsd:decimal">0</Const></arg> | |
</Atom> | |
</content> | |
</External> | |
</formula> | |
</And> | |
</if> | |
<then> | |
<Atom> | |
<op><Const type="rif:iri">xtt:concl</Const></op> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">xtt:next_table</Const></op> | |
<arg><Const type="xsd:string">xtt_table1</Const></arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">op:assign</Const></op> | |
<arg><Var>y</Var></arg> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">op:numeric-multiply</Const></op> | |
<arg><Var>y</Var></arg> | |
<arg><Var>s</Var></arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
</Atom> | |
</then> | |
</Implies> | |
</sentence> | |
| |
<sentence id="xtt_table1_row2"> | |
<Implies> | |
<if> | |
<Equal> | |
<side><Var>x</Var></side> | |
<side><Const type="xsd:decimal">0</Const></side> | |
</Equal> | |
</if> | |
<then> | |
<Atom> | |
<op><Const type="rif:iri">xtt:run_many</Const></op> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">op:assign</Const></op> | |
<arg><Var>y</Var></arg> | |
<arg><Const type="xsd:decimal">1</Const></arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
<arg> | |
<External> | |
<content> | |
<Expr> | |
<op><Const type="rif:iri">xtt:return</Const></op> | |
<arg><Var>s</Var></arg> | |
<arg><Var>x</Var></arg> | |
<arg><Var>y</Var></arg> | |
</Expr> | |
</content> | |
</External> | |
</arg> | |
</Atom> | |
</then> | |
</Implies> | |
</sentence> | |
| |
<sentence id="xtt_table2_row3"> | |
<Implies> | |
<if> | |
<And> | |
<formula> | |
<External> | |
<content> | |
<Atom> | |
<op><Const type="rif:iri">op:numeric-greater-than</Const></op> | |
<arg><Var>x</Var></arg> | |
<arg><Const type="xsd:decimal">0</Const></arg> | |
</Atom> | |
</content> | |
</External> | |
</formula> | |
<formula> | |
<Equal> | |
<side><Var>s</Var></side> | |
<side><Const type="xsd:decimal">1</Const></side> | |
</Equal> | |
</formula> | |
</And> | |
</if> | |
<then> | |
<Atom> | |
<op><Const type="rif:iri">xtt:return</Const></op> | |
<arg><Var>s</Var></arg> | |
<arg><Var>x</Var></arg> | |
<arg><Var>y</Var></arg> | |
</Atom> | |
</then> | |
</Implies> | |
</sentence> | |
| |
</Group> | |
</code> | |
Obie tablice w formacie xml: {{:pl:miw:miw08_xtt_rif:factorial.xml|factorial.xml}}, {{:pl:miw:miw08_xtt_rif:factorial1.xml|factorial1.xml}} | |
---- | |
Powyższy przykład został zwalidowany za pomocą dostępnych arkuszy XSD. Jedyny element, który zgłasza błędy jest to parametr ''id'', aczkolwiek ze względu na brak walidacji niektórych przykładów obecnych w dokumentacji, nie należy się tym przejmować. Nigdzie w dokumentacji nie ma wyraźnego zakazu wykorzystywania elementów standardu XML. | |
| |
==== Proponowany zapis ==== | |
| |
| ==== Sugestie/Braki w RIF ==== |
| * Możliwość umieszczania kilku elementów ''Group'' w jednym pliku |
| * Identyfikowanie poszczególnych ''Group'', ''sentence'', np. poprzez parametr ''id'' |
| * Uproszczenie zapisu w xml ''External schema'', bo w tej chwili zapis powoduje spory rozrost pliku i zmniejsza czytelność |
| * "Wywoływanie" większej ilości predykatów w konkluzji |
| |
FIXME | FIXME |
* ^_^runmany, etc | * ^_^runmany, etc |
* ^_^zestawienie wprowadzonych predykatów iri:xtt_... -> odn. do ew. impl. | * ^_^zestawienie wprowadzonych predykatów iri:xtt_... -> odn. do ew. impl. |
* ew. lista sugestii/ograniczeń w rif (id reguł) | * ^_^ew. lista sugestii/ograniczeń w rif (id reguł) |
| |
==== Translacja XTTML => RIF ==== | ==== Translacja XTTML => RIF ==== |