xsconstraints.java

来自「JAVA 所有包」· Java 代码 · 共 1,445 行 · 第 1/4 页

JAVA
1,445
字号
                throw new XMLSchemaException("Internal-Error",                                             new Object[]{"in particleValidRestriction"});              }            }         }         case XSParticleDecl.PARTICLE_WILDCARD:         {            switch (bType) {              // Any:Any NSSubset              case XSParticleDecl.PARTICLE_WILDCARD:              {                 checkNSSubset((XSWildcardDecl)dParticle.fValue, dMinOccurs, dMaxOccurs,                               (XSWildcardDecl)bParticle.fValue, bMinOccurs, bMaxOccurs);                 return;              }              case XSModelGroupImpl.MODELGROUP_CHOICE:              case XSModelGroupImpl.MODELGROUP_SEQUENCE:              case XSModelGroupImpl.MODELGROUP_ALL:              case XSParticleDecl.PARTICLE_ELEMENT:              {                 throw new XMLSchemaException("cos-particle-restrict.2",                                        new Object[]{"any:choice,sequence,all,elt"});              }              default:              {                throw new XMLSchemaException("Internal-Error",                                             new Object[]{"in particleValidRestriction"});              }            }         }         case XSModelGroupImpl.MODELGROUP_ALL:         {            switch (bType) {              // All:Any NSRecurseCheckCardinality              case XSParticleDecl.PARTICLE_WILDCARD:              {                 if (dMinEffectiveTotalRange == OCCURRENCE_UNKNOWN)                    dMinEffectiveTotalRange = dParticle.minEffectiveTotalRange();                 if (dMaxEffectiveTotalRange == OCCURRENCE_UNKNOWN)                    dMaxEffectiveTotalRange = dParticle.maxEffectiveTotalRange();                 checkNSRecurseCheckCardinality(dChildren, dMinEffectiveTotalRange,                                                dMaxEffectiveTotalRange,                                                dSGHandler,                                                bParticle,bMinOccurs,bMaxOccurs,                                                checkWCOccurrence);                 return;              }              case XSModelGroupImpl.MODELGROUP_ALL:              {                 checkRecurse(dChildren, dMinOccurs, dMaxOccurs, dSGHandler,                              bChildren, bMinOccurs, bMaxOccurs, bSGHandler);                 return;              }              case XSModelGroupImpl.MODELGROUP_CHOICE:              case XSModelGroupImpl.MODELGROUP_SEQUENCE:              case XSParticleDecl.PARTICLE_ELEMENT:              {                 throw new XMLSchemaException("cos-particle-restrict.2",                                        new Object[]{"all:choice,sequence,elt"});              }              default:              {                throw new XMLSchemaException("Internal-Error",                                             new Object[]{"in particleValidRestriction"});              }            }         }         case XSModelGroupImpl.MODELGROUP_CHOICE:         {            switch (bType) {              // Choice:Any NSRecurseCheckCardinality              case XSParticleDecl.PARTICLE_WILDCARD:              {                 if (dMinEffectiveTotalRange == OCCURRENCE_UNKNOWN)                    dMinEffectiveTotalRange = dParticle.minEffectiveTotalRange();                 if (dMaxEffectiveTotalRange == OCCURRENCE_UNKNOWN)                    dMaxEffectiveTotalRange = dParticle.maxEffectiveTotalRange();                 checkNSRecurseCheckCardinality(dChildren, dMinEffectiveTotalRange,                                                dMaxEffectiveTotalRange,                                                dSGHandler,                                                bParticle,bMinOccurs,bMaxOccurs,                                                checkWCOccurrence);                 return;              }              case XSModelGroupImpl.MODELGROUP_CHOICE:              {                 checkRecurseLax(dChildren, dMinOccurs, dMaxOccurs, dSGHandler,                                 bChildren, bMinOccurs, bMaxOccurs, bSGHandler);                 return;              }              case XSModelGroupImpl.MODELGROUP_ALL:              case XSModelGroupImpl.MODELGROUP_SEQUENCE:              case XSParticleDecl.PARTICLE_ELEMENT:              {                 throw new XMLSchemaException("cos-particle-restrict.2",                                        new Object[]{"choice:all,sequence,elt"});              }              default:              {                throw new XMLSchemaException("Internal-Error",                                             new Object[]{"in particleValidRestriction"});              }            }         }         case XSModelGroupImpl.MODELGROUP_SEQUENCE:         {            switch (bType) {              // Choice:Any NSRecurseCheckCardinality              case XSParticleDecl.PARTICLE_WILDCARD:              {                 if (dMinEffectiveTotalRange == OCCURRENCE_UNKNOWN)                    dMinEffectiveTotalRange = dParticle.minEffectiveTotalRange();                 if (dMaxEffectiveTotalRange == OCCURRENCE_UNKNOWN)                    dMaxEffectiveTotalRange = dParticle.maxEffectiveTotalRange();                 checkNSRecurseCheckCardinality(dChildren, dMinEffectiveTotalRange,                                                dMaxEffectiveTotalRange,                                                dSGHandler,                                                bParticle,bMinOccurs,bMaxOccurs,                                                checkWCOccurrence);                 return;              }              case XSModelGroupImpl.MODELGROUP_ALL:              {                 checkRecurseUnordered(dChildren, dMinOccurs, dMaxOccurs, dSGHandler,                                       bChildren, bMinOccurs, bMaxOccurs, bSGHandler);                 return;              }              case XSModelGroupImpl.MODELGROUP_SEQUENCE:              {                 checkRecurse(dChildren, dMinOccurs, dMaxOccurs, dSGHandler,                              bChildren, bMinOccurs, bMaxOccurs, bSGHandler);                 return;              }              case XSModelGroupImpl.MODELGROUP_CHOICE:              {                 int min1 = dMinOccurs * dChildren.size();                 int max1 = (dMaxOccurs == SchemaSymbols.OCCURRENCE_UNBOUNDED)?                             dMaxOccurs : dMaxOccurs * dChildren.size();                 checkMapAndSum(dChildren, min1, max1, dSGHandler,                                bChildren, bMinOccurs, bMaxOccurs, bSGHandler);                 return;              }              case XSParticleDecl.PARTICLE_ELEMENT:              {                 throw new XMLSchemaException("cos-particle-restrict.2",                                        new Object[]{"seq:elt"});              }              default:              {                throw new XMLSchemaException("Internal-Error",                                             new Object[]{"in particleValidRestriction"});              }            }         }       }    }    private static void addElementToParticleVector (Vector v, XSElementDecl d)  {       XSParticleDecl p = new XSParticleDecl();       p.fValue = d;       p.fType = XSParticleDecl.PARTICLE_ELEMENT;       v.addElement(p);    }    private static XSParticleDecl getNonUnaryGroup(XSParticleDecl p) {       if (p.fType == XSParticleDecl.PARTICLE_ELEMENT ||           p.fType == XSParticleDecl.PARTICLE_WILDCARD)         return p;       if (p.fMinOccurs==1 && p.fMaxOccurs==1 &&           p.fValue!=null && ((XSModelGroupImpl)p.fValue).fParticleCount == 1)         return getNonUnaryGroup(((XSModelGroupImpl)p.fValue).fParticles[0]);       else         return p;    }    private static Vector removePointlessChildren(XSParticleDecl p)  {       if (p.fType == XSParticleDecl.PARTICLE_ELEMENT ||           p.fType == XSParticleDecl.PARTICLE_WILDCARD)         return null;       Vector children = new Vector();       XSModelGroupImpl group = (XSModelGroupImpl)p.fValue;       for (int i = 0; i < group.fParticleCount; i++)           gatherChildren(group.fCompositor, group.fParticles[i], children);       return children;    }    private static void gatherChildren(int parentType, XSParticleDecl p, Vector children) {       int min = p.fMinOccurs;       int max = p.fMaxOccurs;       int type = p.fType;       if (type == XSParticleDecl.PARTICLE_MODELGROUP)          type = ((XSModelGroupImpl)p.fValue).fCompositor;       if (type == XSParticleDecl.PARTICLE_ELEMENT ||           type== XSParticleDecl.PARTICLE_WILDCARD) {          children.addElement(p);          return;       }       if (! (min==1 && max==1)) {          children.addElement(p);       }       else if (parentType == type) {          XSModelGroupImpl group = (XSModelGroupImpl)p.fValue;          for (int i = 0; i < group.fParticleCount; i++)             gatherChildren(type, group.fParticles[i], children);       }       else if (!p.isEmpty()) {          children.addElement(p);       }    }    private static void checkNameAndTypeOK(XSElementDecl dElement, int dMin, int dMax,                                           XSElementDecl bElement, int bMin, int bMax)                                   throws XMLSchemaException {      //      // Check that the names are the same      //      if (dElement.fName != bElement.fName ||          dElement.fTargetNamespace != bElement.fTargetNamespace) {          throw new XMLSchemaException(              "rcase-NameAndTypeOK.1",new Object[]{dElement.fName,               dElement.fTargetNamespace, bElement.fName, bElement.fTargetNamespace});      }      //      // Check nillable      //      if (!bElement.getNillable() && dElement.getNillable()) {        throw new XMLSchemaException("rcase-NameAndTypeOK.2",                                     new Object[]{dElement.fName});      }      //      // Check occurrence range      //      if (!checkOccurrenceRange(dMin, dMax, bMin, bMax)) {        throw new XMLSchemaException("rcase-NameAndTypeOK.3",                                      new Object[]{                                        dElement.fName,                                        Integer.toString(dMin),                                        dMax==SchemaSymbols.OCCURRENCE_UNBOUNDED?"unbounded":Integer.toString(dMax),                                        Integer.toString(bMin),                                        bMax==SchemaSymbols.OCCURRENCE_UNBOUNDED?"unbounded":Integer.toString(bMax)});      }      //      // Check for consistent fixed values      //      if (bElement.getConstraintType() == XSConstants.VC_FIXED) {         // derived one has to have a fixed value         if (dElement.getConstraintType() != XSConstants.VC_FIXED) {            throw new XMLSchemaException("rcase-NameAndTypeOK.4.a",                                         new Object[]{dElement.fName, bElement.fDefault.stringValue()});         }         // get simple type         boolean isSimple = false;         if (dElement.fType.getTypeCategory() == XSTypeDefinition.SIMPLE_TYPE ||             ((XSComplexTypeDecl)dElement.fType).fContentType == XSComplexTypeDecl.CONTENTTYPE_SIMPLE) {             isSimple = true;         }         // if there is no simple type, then compare based on string         if (!isSimple && !bElement.fDefault.normalizedValue.equals(dElement.fDefault.normalizedValue) ||             isSimple && !bElement.fDefault.actualValue.equals(dElement.fDefault.actualValue)) {            throw new XMLSchemaException("rcase-NameAndTypeOK.4.b",                                         new Object[]{dElement.fName,                                                      dElement.fDefault.stringValue(),                                                      bElement.fDefault.stringValue()});         }      }      //      // Check identity constraints      //      checkIDConstraintRestriction(dElement, bElement);      //      // Check for disallowed substitutions      //      int blockSet1 = dElement.fBlock;      int blockSet2 = bElement.fBlock;      if (((blockSet1 & blockSet2)!=blockSet2) ||            (blockSet1==XSConstants.DERIVATION_NONE && blockSet2!=XSConstants.DERIVATION_NONE))        throw new XMLSchemaException("rcase-NameAndTypeOK.6",                                  new Object[]{dElement.fName});      //      // Check that the derived element's type is derived from the base's.      //      if (!checkTypeDerivationOk(dElement.fType, bElement.fType,                                 (short)(XSConstants.DERIVATION_EXTENSION|XSConstants.DERIVATION_LIST|XSConstants.DERIVATION_UNION))) {          throw new XMLSchemaException("rcase-NameAndTypeOK.7",                                  new Object[]{dElement.fName, dElement.fType.getName(), bElement.fType.getName()});      }    }    private static void checkIDConstraintRestriction(XSElementDecl derivedElemDecl,                                                     XSElementDecl baseElemDecl)                                             throws XMLSchemaException {        // TODO    } // checkIDConstraintRestriction    private static boolean checkOccurrenceRange(int min1, int max1, int min2, int max2) {      if ((min1 >= min2) &&          ((max2==SchemaSymbols.OCCURRENCE_UNBOUNDED) ||           (max1!=SchemaSymbols.OCCURRENCE_UNBOUNDED && max1<=max2)))        return true;      else        return false;    }    private static void checkNSCompat(XSElementDecl elem, int min1, int max1,                                      XSWildcardDecl wildcard, int min2, int max2,                                      boolean checkWCOccurrence)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?