public Clause(String clause) {
Matcher matcher = PATTERN_SYMBOLICNAME.matcher(clause);
if (!matcher.find())
throw new IllegalArgumentException("Missing symbolic name path: " + clause);
path = matcher.group();
matcher.usePattern(PATTERN_PARAMETER);
while (matcher.find()) {
Parameter parameter = ParameterFactory.create(matcher.group());
if (parameter instanceof VersionAttribute)
parameter = new VersionRangeAttribute(new VersionRange(String.valueOf(parameter.getValue())));
parameters.put(parameter.getName(), parameter);