public static Schema constructedFromString(String schemaStr)
            throws InvalidObjectStringException {
        String name;
        SortedSet<Dimension> dimensions = new TreeSet<Dimension>();
        if (!schemaStr.matches(regex)) {
            throw new InvalidObjectStringException("object string(" + schemaStr
                    + ") not matches: " + regex);
        }
        String tmp[] = schemaStr.split("^Schema *\\[");
        tmp = tmp[1].split("\\]$");
        tmp = tmp[0].split(", *dimensions=");
        name = tmp[0].split("=")[1];
        tmp = tmp[1].split("^\\{");
        tmp = tmp[1].split("\\}$");
        tmp = tmp[0].split("Dimension ");
        for (int i = 1; i < tmp.length; i += 1) {
            tmp[i] = "Dimension " + tmp[i].split(";$")[0];
        }
        for (String dimensionStr : tmp) {
            if ("".equals(dimensionStr)) {
                continue;
            }
            dimensions.add(Dimension.constructFromString(dimensionStr));
        }
        return Schema.getSchema(name, dimensions);
    }