S-rule

From UNL Wiki
(Difference between revisions)
Jump to: navigation, search
(Formal Syntax)
(Types of S-rules)
Line 8: Line 8:
  
 
== Types of S-rules ==
 
== Types of S-rules ==
There are several different types of S-rules:
 
 
{{:Transformation over relations}}
 
{{:Transformation over relations}}
  

Revision as of 20:46, 21 August 2013

S-rule (syntactic/semantic rule) is a specific type of transformation rule used for dealing with syntactic relations and semantic relations in the UNL framework.

Contents

When to use S-rules

S-rules are used for altering, replacing, creating and deleting non-linear relations.

When not to use S-rules

S-rules are not used for for linear relations (such as affixation, string manipulation and list manipulation, which must be addressed by A-rules, N-rules and L-rules, respectively).

Types of S-rules

Relations are altered, replaced, created and deleted by S-rules:

Altering nodes in a relation

Elements of nodes in relations are altered through the operators + (add) and - (delete). The operator + may be omitted.

  • rel(%x,A;%y,B):=rel(%x,+C;%y,+D); (add the feature C to %x and D to %y)
  • rel(%x,A;%y,B):=rel(%x,C;%y,D);(the same as above)
  • rel(%x,A;%y,B):=rel(%x,-A;%y); (delete the feature A from %x)

"strings", [headwords] and [[UWs]] are considered to be features (but a single node may have only one of each)

  • rel(%x;%y):=rel(%x,"a";%y); (replace the existing string in %x, if any, by "a")
  • rel(%x;%y):=rel(%x,[A];%y);(replace the existing headword in %x, if any, by [A])
  • rel(%x;%y):=rel(%x,[[A]];%y); (replace the existing UW in %x, if any, by [[A]])

Creating nodes in a relation

Nodes are created when they are not co-indexed to any node in the left side (see Indexation):

  • rel(%x,A;%y,B):=rel(%x;%y;%z,+A); (the node %z, with the feature A, is created as a new argument of the relation rel)

Deleting nodes in a relation

Nodes are deleted when they are not co-indexed to any node in the right side (see Indexation):

  • rel(%x,A;%y,B;%z,C):=rel(%x;%y); (the node %z is deleted as an argument of the relation rel)

Nodes are completelly deleted if, and only if, they are not part of any other relation

Creating relations

Relations are created by the operator + (add) before the relation to be created. This operator may not be omitted.

  • rel(%x;%y):=+rel2(%x;%z); (a new relation rel2 is created between the nodes %x and %z; the original relation is not altered)

Creation of relations is a possible source of infinite loops. In order to prevent the rule from applying eternally, the condition field must be controlled:

  • rel(%x;%y)^rel2(%x;%z):=+rel2(%x;%z);

Deleting relations

Relations are deleted when they are not repeated in the right side, except in case of +

  • rel(%x;%y):=; (the relation rel between the nodes %x and %y is deleted)
  • rel(%x;%y):=rel2(%x;%y); (the relation rel between %x and %y is deleted and a new relation rel2 is created in its place) (replacement)
  • rel(%x;%y):=+rel2(%x;%y); (the relation rel is preserved and a new relation rel2 is created) (creation)

Replacing relations

Relations in the left side are replaced by relations in the right side, except in case of +:

  • rel(%x;%y):=rel2(%x;%y); (the relation rel between %x and %y is deleted and a new relation rel2 is created in its place)
  • rel1(%x;%y)rel2(%y;%z):=rel3(%x;%z); (the relations rel1 and rel2 are deleted and a new relation rel3 is created in their place) (merge)
  • rel(%x;%y):=rel1(%x;%y)rel2(%y;%z); (the relation rel is deleted and two new relations rel1 and rel2 are created in its place) (divide)
  • (%x)(%y):=rel(%x;%y); (the linear relation between the nodes %x and %y is replaced by the non-linear relation rel between the same nodes)
  • L(%x;%y):=rel(%x;%y); (the same as above)

Properties

  1. S-rules always end in ";"
    • rel("a");
    • rel("a")
  2. Relations are n-ary, i.e., they may have as many arguments as necessary, isolated by semicolon (";")
    • rel("a"); (relation with one argument)
    • rel("a";"b"); (relation with two arguments)
    • rel("a";"b";"c"); (relation with three arguments)
    • etc.
  3. Inside each relation, nodes may be referenced by any of its elements, isolated by comma (,):
    VC(%a;%b) - syntactic relation between a node where index = %a and another node where index = %b
    agt("a",[a],[[a]],A;"b",[b],[[b]],B) - semantic relation between a node having the feature A where string = "a" AND headword "a" AND UW = [[a]] AND another node having the feature B where string = "b" AND headword = [b] AND UW = [[b]]
  4. The arguments of a relation may be empty in case they are not affected by S-rules.
    rel(;):=rel2(;); (replace all relations rel by rel2, regardless of their arguments)
  5. Relations may be conjoined through juxtaposition:
    agt(%x;%y)obj(%x;%z) - two semantic relations: one between (%x) and (%y) AND other between (%x) and (%z)
    VC([a];[b]),VC([a];[c]) - conjoined relations must not be isolated by comma
  6. Relations may be disjoined through {braces}
    {("a")|("b")}("c") - either ("a")("c") or ("b")("c")
    {agt(%x;%y)|exp(%x;%y)}obj(%x;%z) - either agt(%x;%y)obj(%x;%z) or exp(%x;%y)obj(%x;%z)
  7. Order is not important between relations, but essential between arguments of the same relation
    rel1("b")rel2("c")rel3("d") = rel2("c")rel3("d")rel1("b") = rel3("d")rel2("c")rel1("b")
    rel1("a";"b"); rel1("b";"a");
  8. Relations may be replaced by regular expressions
    /.{2,3}/(%x;%y) - any relation made of two or three characters between %x and %y
  9. Arguments of relations may be expressed by A-rules, but only in the right side of rules
    rel("a"):=rel("an"); or rel("a"):=rel(0>"n");
  10. S-rules do not affect nodes unless explicitly informed
    rel("a",[a],a,A,%x;"b",[b],b,B,%y):=rel2(%x;%y); (the nodes %x and %y do not undergo any change)
    rel("a",[a],a,A,%x;"b",[b],b,B,%y):=rel2(%x); (the node %x does not undergo any change; the node %y is deleted)
    rel("a",[a],a,A,%x;"b",[b],b,B,%y):=rel2(%x,-A;%y); (the feature A is removed from the node %x; all the rest, including the node %y, does not undergo any change)
  11. "^" is used for negation
    rel1(%x;%y)^rel2(%y;%z):=+rel2(%y;%z); (if there is a rel1 between the nodes %x and %y and there is no relation rel2 between the nodes %y and %z, create a new relation rel2 between the nodes %y and %z)

Indexes

See Indexation

Examples

Examples of S-rules:

Software