Opis podpisów (ang. signatures) został umieszczony tutaj. Podpisy nie są częścią składni RIFa.
RIF-BLD wspiera powyższe typy termów:
Serializacja XML dla składni prezentacji RIF-BLD zaprezentowana w tej sekcji jest z nią przemienna. Naśladując Javę i RDF, używamy nazw pisanych dużymi literami dla elementów klas oraz nazw które zaczynają się od małej litery dla elementów ról.
Wszystkie klasy zapisywane dużymi literami w składni prezentacji, jak CONDITION, stają się tagami (?) XMLa. Zachowują się jak makra i nie są widoczne w instance markup.
Zacznijmy od serializacji Języka Warunkowego w XMLu:
Klasy, role i ich zamierzone znaczenie - And (conjunction) - Or (disjunction) - Exists (quantified formula for 'Exists', containing declare and formula roles) - declare (declare role, containing a Var) - formula (formula role, containing a CONDITION formula) - Uniterm (term or atomic formula, positional or with named arguments) - Member (member formula) - Subclass (subclass formula) - Frame (Frame formula) - object (Member/Frame role containing a TERM or an object description) - op (Uniterm role for predicates/functions as operations) - arg (argument role) - upper (Member/Subclass upper class role) - lower (Member/Subclass lower instance/class role) - slot (Uniterm/Frame slot role, prefix version of slot infix ' -> ') - Equal (prefix version of term equation '=') - side (Equal left-hand side and right-hand side role) - Const (slot, individual, function, or predicate symbol, with optional 'type' attribute) - Var (logic variable)
Składnia XML dla przestrzeni symboli wykorzystuje atrybut type związany z elementami term, jak Const. Na przykład literał w xsd:dateTime data type może być przedstawiony jako <Const type=„xsd:dateTime”>2007-11-23T03:55:44-02:30</Const>.
Przykład 3
Przykład ten obrazuje serializację XML dla warunkór RIFa.
Serializacja języka reguł
Jest to rozszerzenie Języka Warunkowego poprzez serializację reguł RIF-BLD. Element Forall zawira role elements declare and formula, które były wcześniej wykorzystywane w elemencie Exists. Element Implies zawiera role elementów if oraz then rozróżniające te dwie części reguły.
Klasy, role i ich zamierzone znaczenie - Ruleset (rule collection, containing rule roles) - Forall (quantified formula for 'Forall', containing declare and formula roles) - Implies (implication, containing if and then roles) - if (antecedent role, containing CONDITION) - then (consequent role, containing a Uniterm, Equal, or Frame)
Przykład 4
Przykład przedstawia warunek z przykładu 2a zapisany za pomocą XML'a:
Przeglądając dokumentacje RIF'a nie znalazłem wzmianki o operacji przypisania. Jedną z metod, byłoby zaproponowanie zaimplementowanie predykatu fn:assign(A,B) przypisującego elementowi A wartość elementu B. Wydaje mi się, że ze względu na trwające ciągle prace nad formatem kwestia ta pozostaje otwarta i można przyjąć, że taki warunek jest formułowalny w RIF'ie.
Proponowany przeze mnie zapis wyglądał by tak:
<Ruleset> <rule> <declare><Var>A</Var></declare> <declare><Var>B</Var></declare> <declare><Var>C</Var></declare> <formula> <Implies> <if> <formula> <Uniterm> <op><Const type="rif:iri">op:numeric-lesser-than</Const></op> <arg><Var>A</Var></arg> <arg> <Uniterm> <op><Const type="rif:iri">op:numeric-add</Const></op> <arg><Const type="">3</Const></arg> <arg><Var>B</Var></arg> </Uniterm> </arg> </Uniterm> </formula> </if> <then> <Uniterm> <op><Const type="rif:iri">fn:assign</Const></op> <arg><Var>C</Var></arg> <arg><Var>B</Var></arg> </Uniterm> </then> </Implies> </formula> </rule> </Ruleset>
Poniższe propozycje zapisu XTT za pomocą RIFa są oparte na proponowanym XTTMLu i są z nim zestawione. Jest to wstępna wersja, która zostanie dopracowana.
XTTML | RIF |
---|---|
<xtt_table id="xtt_1"> ... </xtt_table> | <Group id="xtt_1"> ... </Group> |
<rule id="rul_1"> ... </rule> | <sentence id="rul_1"> ... </sentence> |
<schema> <independent> <attref ref="att_0"/> </independent> <dependent> <attref ref="att_1"/> </dependent> </schema> ... | <Forall> <declare><Var>att_0</Var></declare> <declare><Var>att_1</Var></declare> ... </Forall> |
<condition> ... </condition> | <formula> <Implies> <if> ... </if> ... </Implies> |
<decision> ... </decision> <link xtt="xtt_1"/> |
|----------------------------------------------------| | | | x s || s | |->------------ x y s || y | NA ||=x --+------> ------------------- | >0 ||=s-1 --| || | >0 >0 || =y*s -----| =0 || =1 -----------| >0 =1 || -----------+------>
<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>
Obie tablice w formacie xml: factorial.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.