code: public static AssetVersionSpec parse(String versionSpec) {
          Matcher matcher = VERSION_PATTERN.matcher(versionSpec);
          String name = null;
          String ver = null;
          String pkg = null;
          if (matcher.find()) {
              int start = matcher.start();
              ver = versionSpec.substring(start + 2);
              if (!ver.equals(VERSION_LATEST) && ver.indexOf('.') == -1 && Character.isDigit(ver.charAt(0)))
                  ver = "0." + ver;
              name = versionSpec.substring(0, start);
          }
          else {
              name = versionSpec; // no version
              ver = VERSION_LATEST;
          }
  
          int slash = name.indexOf('/');
          if (slash != -1) {
              pkg = name.substring(0, slash);
              name = name.substring(slash + 1);
          }
          return new AssetVersionSpec(pkg, name, ver);
      }
docs: Smart Version Ranges:
  This is similar to the OSGi version spec.  There are four supported syntaxes:
  - A specific version -- such as 1.2 -- can be specified.
  - Zero can be specified to always use the latest asset version.
  - A 'half-open' range -- such as [1.2,2) -- designates an inclusive lower limit and an exclusive upper limit,
  denoting version 1.2 and any version after this, up to, but not including, version 2.0.
  - An 'unbounded' version range -- such as [1.2 -- which denotes version 1.2 and all later versions.