| Prev - Next - Down | SDMetrics - the UML design measurement tool |
Metamodel definition file format
<!ELEMENT sdmetricsmetamodel ( modelelement+ ) > <!ATTLIST sdmetricsmetamodel version CDATA #REQUIRED> <!ELEMENT modelelement (#PCDATA|attribute)*> <!ATTLIST modelelement name CDATA #REQUIRED parent CDATA "sdmetricsbase"> <!ELEMENT attribute (#PCDATA)> <!ATTLIST attribute name CDATA #REQUIRED type (ref|data) "data" multiplicity (one|many) "one">XMI transformation file format
<!ELEMENT xmitransformations ( xmitransformation+ ) > <!ATTLIST xmitransformations version CDATA #REQUIRED requirexmiid (true|false) "true"> <!ELEMENT xmitransformation (trigger*) > <!ATTLIST xmitransformation modelelement CDATA #REQUIRED xmipattern CDATA #REQUIRED recurse (true|false) "false" requirexmiid (true|false) #IMPLIED condition CDATA #IMPLIED> <!ELEMENT trigger EMPTY> <!ATTLIST trigger name CDATA #REQUIRED type (attrval|cattrval|gcattrval|ctext|reflist|constant|ignore|xmi2assoc) #REQUIRED attr CDATA #IMPLIED src CDATA #IMPLIED linkbackattr CDATA #IMPLIED>Metric definition file format
<!ELEMENT sdmetrics (metric|set|matrix|rule|wordlist|reference|term)+ > <!ATTLIST sdmetrics version CDATA #REQUIRED ruleexemption CDATA #IMPLIED exemptiontag CDATA #IMPLIED exemptionvalue CDATA #IMPLIED> <!ELEMENT metric (description?,(projection|setoperation|compoundmetric| attributevalue|nesting|signature|connectedcomponents|count|compare| subelements|filtervalue)) > <!ATTLIST metric name CDATA #REQUIRED domain CDATA #REQUIRED category CDATA #IMPLIED internal (true|false) "false"> <!ELEMENT set (description?,(projection|compoundset|subelements|compare))> <!ATTLIST set name CDATA #REQUIRED domain CDATA #REQUIRED multiset (true|false) "false"> <!ELEMENT matrix (description?,(projection|setoperation|compoundset))> <!ATTLIST matrix name CDATA #REQUIRED from_row_type CDATA #REQUIRED to_col_type CDATA #REQUIRED> <!ELEMENT rule (description?,(violation|cycle|projection|compoundset| valueset|compare))> <!ATTLIST rule name CDATA #REQUIRED domain CDATA #REQUIRED category CDATA #IMPLIED severity CDATA #IMPLIED applies_to CDATA #IMPLIED disabled (true|false) "false"> <!ELEMENT wordlist (entry*)> <!ATTLIST wordlist name CDATA #REQUIRED ignorecase (true|false) "false"> <!ELEMENT entry EMPTY> <!ATTLIST entry word CDATA #REQUIRED> <!ELEMENT description (#PCDATA)> <!ENTITY % scopes "same|other|higher|lower|sameorhigher|sameorlower|samebranch| notsamebranch|containedin|notcontainedin|idem|notidem" > <!ENTITY % filteratts 'target CDATA #IMPLIED targetcondition CDATA #IMPLIED element CDATA #IMPLIED eltype CDATA #IMPLIED scope (%scopes;) #IMPLIED condition CDATA #IMPLIED' > <!ENTITY % sumatts 'sum CDATA #IMPLIED stat (sum|min|max) "sum"' > <!ENTITY % ruleatts 'precondition CDATA #IMPLIED mincnt CDATA #IMPLIED value CDATA #IMPLIED' > <!ELEMENT projection EMPTY> <!ATTLIST projection relation CDATA #IMPLIED relset CDATA #IMPLIED %sumatts; set CDATA #IMPLIED valueset CDATA #IMPLIED exclude_self (true|false) "false" recurse (true|false) "false" nesting (true|false) "false" %ruleatts; %filteratts;> <!ELEMENT compoundmetric EMPTY> <!ATTLIST compoundmetric term CDATA #IMPLIED condition CDATA #IMPLIED alt CDATA #IMPLIED fallback CDATA #IMPLIED> <!ELEMENT attributevalue EMPTY> <!ATTLIST attributevalue attr CDATA #REQUIRED element CDATA #IMPLIED> <!ELEMENT signature EMPTY> <!ATTLIST signature set CDATA #REQUIRED name CDATA #REQUIRED %filteratts;> <!ELEMENT connectedcomponents EMPTY> <!ATTLIST connectedcomponents set CDATA #REQUIRED nodes CDATA #REQUIRED> <!ELEMENT valuesetcount EMPTY> <!ATTLIST valuesetcount set CDATA #REQUIRED> <!ELEMENT count EMPTY> <!ATTLIST count term CDATA #REQUIRED set CDATA #REQUIRED relset CDATA #REQUIRED %filteratts;> <!ELEMENT compare EMPTY> <!ATTLIST compare term CDATA #IMPLIED set CDATA #IMPLIED with CDATA #IMPLIED comp CDATA #IMPLIED return_element (true|false) "false" exclude_self (true|false) "true" %ruleatts; %filteratts;> <!ELEMENT setoperation EMPTY> <!ATTLIST setoperation set CDATA #REQUIRED %sumatts; %filteratts;> <!ELEMENT nesting EMPTY> <!ATTLIST nesting relation CDATA #REQUIRED> <!ELEMENT subelements EMPTY> <!ATTLIST subelements set CDATA #IMPLIED exclude_self (true|false) "true" valueset CDATA #IMPLIED %filteratts; %sumatts;> <!ELEMENT filtervalue EMPTY> <!ATTLIST filtervalue relation CDATA #IMPLIED relset CDATA #IMPLIED value CDATA #REQUIRED %filteratts;> <!ELEMENT compoundset EMPTY> <!ATTLIST compoundset set CDATA #REQUIRED cum CDATA #IMPLIED valueset CDATA #IMPLIED exclude_self (true|false) "false" %ruleatts; %filteratts;> <!ELEMENT violation EMPTY> <!ATTLIST violation condition CDATA #REQUIRED value CDATA #IMPLIED> <!ELEMENT valueset EMPTY> <!ATTLIST valueset set CDATA #REQUIRED precondition CDATA #IMPLIED mincnt CDATA #IMPLIED> <!ELEMENT cycle EMPTY> <!ATTLIST cycle nodes CDATA #REQUIRED minnodes CDATA #IMPLIED> <!ELEMENT reference (#PCDATA|description)*> <!ATTLIST reference tag CDATA #REQUIRED> <!ELEMENT term (#PCDATA|description)*> <!ATTLIST term name CDATA #REQUIRED>Grammar of expressions in metric definitions
The grammar for expressions in metric and set definitions is presented here using an extended Backus-Naur Formalism (EBNF).
Expression = UptoExpression.
UptoExpression = OrExpression {"upto" OrExpression | "topmost" OrExpression}.
OrExpression = AndExpression {"|" AndExpression | "or" AndExpression}.
AndExpression = EqualExpression {"&" EqualExpression |
"and" EqualExpression}.
EqualExpression = RelationalExpression
["!=" RelationalExpression |
"=" RelationalExpression].
RelationalExpression = AdditiveExpression [ "<" AdditiveExpression |
">" AdditiveExpression | "<=" AdditiveExpression |
">=" AdditiveExpression |"lt" AdditiveExpression |
"le" AdditiveExpression | "gt" AdditiveExpression |
"ge" AdditiveExpression |
"startswith" AdditiveExpression |
"endswith" AdditiveExpression |
"onlist" AdditiveExpression].
AdditiveExpression = MultiplicativeExpression {
"+" MultiplicativeExpression |
"-" MultiplicativeExpression}.
MultiplicativeExpression
= PowerExpression {
"*" PowerExpression) | "/" PowerExpression }
PowerExpression = DotExpression {"^" DotExpression) |
("->" DotExpression) |
("in" DotExpression)}.
DotExpression = UnaryExpression {"." UnaryExpression}.
UnaryExpression = "+" UnaryExpression | "-" UnaryExpression |
"!" UnaryExpression | "not" UnaryExpression |
FCT_LITERAL UnaryExpression | "self" |
"(" Expression ")".
Constant = STRING_LITERAL | IDENTIFIER | INTEGER_LITERAL
| FLOATING_POINT_LITERAL.
FCT_LITERAL = "ln" | "exp" | "sqrt" | "abs" |
"ceil" | "floor" | "round" |
"startswithcapital" | "startswithlowercase" |
"islowercase" | "tolowercase" |
"length" | "size" | "flatsize" |
"isunique" | "typeof" | "qualifiedname".
INTEGER_LITERAL = DECIMAL_LITERAL.
DECIMAL_LITERAL = DIGIT {DIGIT}.
FLOATING_POINT_LITERAL= ({DIGIT} "." DIGIT {DIGIT} [EXPONENT])
| DIGIT {DIGIT} [EXPONENT].
EXPONENT = ("e"|"E") ["+"|"-"] DIGIT {DIGIT}.
STRING_LITERAL = "'" {LETTER|DIGIT} "'".
IDENTIFIER = LETTER {LETTER|DIGIT}.
LETTER = "_" | "A".."Z" | "a".."z".
DIGIT = "0" | "1" | "2" | "3" | "4" | "5" |
"6" | "7" | "8" | "9".
| Prev | Up | Next |
| Appendix D: "List of Matrices" | Contents | Appendix F: "Glossary" |