| 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|extref|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 allowxmiidref (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|
metricprocedure|setprocedure|ruleprocedure)+ >
<!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|substring))>
<!ATTLIST metric
name CDATA #REQUIRED
domain CDATA #REQUIRED
inheritable (true|false) "false"
category CDATA #IMPLIED
internal (true|false) "false">
<!ELEMENT set (description?,(projection|compoundset|subelements|compare))>
<!ATTLIST set
name CDATA #REQUIRED
domain CDATA #REQUIRED
inheritable (true|false) "false"
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
inheritable (true|false) "false"
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 #IMPLIED
prologue CDATA #IMPLIED
value CDATA #IMPLIED
separator CDATA #IMPLIED
epilogue CDATA #IMPLIED
%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 #IMPLIED
%filteratts;>
<!ELEMENT substring EMPTY>
<!ATTLIST substring
source CDATA #REQUIRED
separator CDATA #REQUIRED
position CDATA #IMPLIED
endseparator CDATA #IMPLIED
limit CDATA #IMPLIED
result CDATA #IMPLIED>
<!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>
<!ELEMENT metricprocedure EMPTY>
<!ATTLIST metricprocedure
name CDATA #REQUIRED
class CDATA #REQUIRED>
<!ELEMENT setprocedure EMPTY>
<!ATTLIST setprocedure
name CDATA #REQUIRED
class CDATA #REQUIRED>
<!ELEMENT ruleprocedure EMPTY>
<!ATTLIST ruleprocedure
name CDATA #REQUIRED
class CDATA #REQUIRED>
Grammar of expressions in metric definitionsThe grammar for expressions in metric and set definitions is presented here using an extended Backus-Naur Formalism (EBNF). Note that the production rule FCT_LITERAL for function names recognized by the expression parser only lists the default functions provided by SDMetrics.
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 | "->" AdditiveExpression |
"in" 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 ExpressionList | "(" Expression ")".
ExpressionList = "(" Expression {"," 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" | "instanceof" |
"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" |