Kod translatora znajduje się w pliku: xttml2r2ml.xml
Konwersji dokonywałem programem oxygene. Należy utworzyć sobie schemat konwertowania przy użyciu powyższego pliku.
Poniżej przedstawiam efekt działania translatora na przykładzie.
Plik wejściowy:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="xtttorif.xsl"?> <hml> <xtt> <xtt_table id="xtt_1"> <schema> <independent> <attref ref="att_0"/> </independent> <dependent> <attref ref="att_1"/> </dependent> </schema> <rule id="rul_1"> <condition> <logop name="in"> <attref ref="att_0"/> <domain> <range from="1" to="5"/> <value>8</value> </domain> </logop> </condition> <decision> <modop name="assign"> <attref ref="att_1"/> <evalop name="add"> <attref ref="att_0"/> <domain> <value>1</value> </domain> </evalop> </modop> <modop name="assign"> <attref ref="att_1"/> <evalop name="add"> <domain> <value>5</value> </domain> <evalop name="sin"> <attref ref="att_0"/> </evalop> </evalop> </modop> </decision> <link xtt="xtt_1"/> </rule> </xtt_table> </xtt> </hml>
plik wyjściowy:
<?xml version="1.0" encoding="UTF-8"?> <r2ml:RuleBase xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:r2mlv="http://www.rewerse.net/I1/2006/R2ML/R2MLV" xmlns:r2ml="http://www.rewerse.net/I1/2006/R2ML" xmlns:soap="http://www.w3.org/2001/12/soap-envelope"> <r2mlv:Vocabulary> <r2mlv:Class r2mlv:ID="xtt_1"> <r2mlv:Attribute r2mlv:ID="att_0"/> <r2mlv:Attribute r2mlv:ID="att_1"/> </r2mlv:Class> </r2mlv:Vocabulary> <r2ml:ProductionRuleSet> <r2ml:ProductionRule r2ml:ruleID="rul_1"> <r2ml:conditions> <r2ml:qf.Disjunction> <r2ml:qf.Conjunction> <r2ml:DatatypePredicateAtom r2ml:datatypePredicateID="swrlb:greaterThan"> <r2ml:dataArguments> <r2ml:AttributeFunctionTerm r2ml:attributeID="att_0"> <r2ml:contextArgument> <r2ml:ObjectVariable r2ml:name="xtt_1" r2ml:classID="xtt_1"/> </r2ml:contextArgument> </r2ml:AttributeFunctionTerm> <r2ml:TypedLiteral r2ml:datatypeID="xs:integer" r2ml:lexicalValue="1"/> </r2ml:dataArguments> </r2ml:DatatypePredicateAtom> <r2ml:DatatypePredicateAtom r2ml:datatypePredicateID="swrlb:lessThan"> <r2ml:dataArguments> <r2ml:AttributeFunctionTerm r2ml:attributeID="att_0"> <r2ml:contextArgument> <r2ml:ObjectVariable r2ml:name="xtt_1" r2ml:classID="xtt_1"/> </r2ml:contextArgument> </r2ml:AttributeFunctionTerm> <r2ml:TypedLiteral r2ml:datatypeID="xs:integer" r2ml:lexicalValue="5"/> </r2ml:dataArguments> </r2ml:DatatypePredicateAtom> </r2ml:qf.Conjunction> <r2ml:DatatypePredicateAtom r2ml:datatypePredicateID="swrlb:equal"> <r2ml:dataArguments> <r2ml:AttributeFunctionTerm r2ml:attributeID="att_0"> <r2ml:contextArgument> <r2ml:ObjectVariable r2ml:name="xtt_1" r2ml:classID="xtt_1"/> </r2ml:contextArgument> </r2ml:AttributeFunctionTerm> <r2ml:TypedLiteral r2ml:datatypeID="xs:integer" r2ml:lexicalValue="8"/> </r2ml:dataArguments> </r2ml:DatatypePredicateAtom> </r2ml:qf.Disjunction> </r2ml:conditions> <r2ml:producedAction> <r2ml:AssignActionExpression> <r2ml:contextArgument> <r2ml:ObjectVariable r2ml:name="xtt_1" r2ml:classID="xtt_1"/> </r2ml:contextArgument> <r2ml:value> <r2ml:TypedLiteral r2ml:datatypeID="xs:integer" r2ml:lexicalValue="add att_0 1"/> </r2ml:value> </r2ml:AssignActionExpression> <r2ml:AssignActionExpression> <r2ml:contextArgument> <r2ml:ObjectVariable r2ml:name="xtt_1" r2ml:classID="xtt_1"/> </r2ml:contextArgument> <r2ml:value> <r2ml:TypedLiteral r2ml:datatypeID="xs:integer" r2ml:lexicalValue="add 5 sin att_0"/> </r2ml:value> </r2ml:AssignActionExpression> </r2ml:producedAction> </r2ml:ProductionRule> </r2ml:ProductionRuleSet> </r2ml:RuleBase>