3. Language Developed for ASI
|
Drug resistance algorithms can be specified in an XML document that
adheres to an XML Document Type Definition (DTD) that we have
developed (and refer to as the ASI DTD). The
DTD is available online and the text of the DTD
is shown in Appendix 1. It provides the basic framework that an
algorithm must adhere to. An entire algorithm encoded according to
this DTD is shown in Appendix 2. The algorithm shown is the RCG
algorithm, chosen for its relatively short description using the
ASI.
At the heart of an algorithm is a <DRUG> clause. An example clause taken from the RCG algorithm is shown below:
<DRUG>
<NAME>d4T</NAME>
<RULE>
<CONDITION>
SELECT ATLEAST 1 FROM (151M,69i)
</CONDITION>
<ACTIONS>
<LEVEL>3</LEVEL>
</ACTIONS>
</RULE>
</DRUG>
In this example, for the drug d4T the algorithm designer would like the drug to receive a level of 3 if either the mutation 151M is present or an insertion is present at position 69 (the designer would have previously specified what was meant by level 3 - in RCG it means "Drug is inactive"). That is, if the condition statement evaluates to true then the appropriate action is taken. Note that the <CONDITION> clause of each <RULE> is free-form text that adheres to a language grammar we have developed for the purpose. This grammar is described in the next section.
The grammar for the ASI language is described in the table that follows using BNF notation. An epsilon (ε) is show to indicate the possibility of an empty clause.
| Clause | Definition |
| statement | condition statement_2 |
| statement_2 | logic_symbol statment | ε |
| condition | lbracket statement rbracket | residue condition_2 | select_statement condition_2 | score_statement condition_2 |
| condition_2 | logic_symbol condition | ε |
| score_statement | score from lbracket score_list rbracket |
| score_list | residue_clause score_value score_list_2 |
| score_list_2 | comma score_list |
| residue_clause | lbracket residue_clause rbracket | residue residue_clause_2 |
| residue_clause_2 | logic_symbol residue_clause | ε |
| select_statement | select select_statement_2 |
| select_statement_2 | atleast select_statement_3 | notmorethan from lbracket select_list rbracket |
| select_statement_3 | from lbracket select_list rbracket | logic_symbol notmorethan from lbracket select_list rbracket |
| select_list | residue select_list_2 |
| select_list_2 | comma select_list | ε |
Some examples of valid clauses in the language follow. The language is very much fairly self-explanatory given that it reads similarly to an English sentence.
- 151M OR 69i
- SELECT ATLEAST 2 FROM (41L, 67N, 70R, 210W, 215FY, 219QE)
- SELECT ATLEAST 2 AND NOTMORETHAN 2 FROM (41L, 67N, 70R, 210W, 215FY,
219QE)
What this really means is "choose exactly two from the following list".
The keyword "EXACTLY", which has not been added to the language yet,
would allow that rule to be expressed more compactly.
- 215FY AND NOT 184VI
For this to be true, a mutation F or Y must be present at position 215 and
a V or I mutation must not be present at position 184.
- SCORE FROM (65R => 20, 74V => 20, 184VI => 20)
Scores are added for each score that is triggered by a
matching mutation, so if 65R and 74V were present the total score would be 40.
A <SCORERANGE> section of the <ACTIONS> would indicate
how scores were to be mapped to resistance levels.
- 151M AND EXCLUDE 69i
The mutation 69i must not be present for this clause
to evaluate to true. That is, 151M would have to be present
along with an arbitrary number of other mutations as long as one was not 69i.
- 69(NOT TDN)
A mutation at position 69 other than T69D and T69N. The
consensus must also be excluded to pick up atypical mutations at this position.
- 215F OR 215Y
A long way of saying 215FY.
|