sandygao 2004/01/29 12:32:05 Modified: java/src/org/apache/xerces/impl/xs/traversers XSAttributeChecker.java Log: Schema errata E1-52, E1-53, E2-56. The types of some attributes in schema documents were changed. Revision Changes Path 1.30 +71 -38 xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSAttributeChecker.java Index: XSAttributeChecker.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSAttributeChecker.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- XSAttributeChecker.java 12 Jan 2004 22:29:28 -0000 1.29 +++ XSAttributeChecker.java 29 Jan 2004 20:32:05 -0000 1.30 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001-2003 The Apache Software Foundation. All rights + * Copyright (c) 2001-2004 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -224,14 +224,14 @@ protected static final int DT_BLOCK1 = -2; protected static final int DT_FINAL = -3; protected static final int DT_FINAL1 = -4; - protected static final int DT_FORM = -5; - protected static final int DT_MAXOCCURS = -6; - protected static final int DT_MAXOCCURS1 = -7; - protected static final int DT_MEMBERTYPES = -8; - protected static final int DT_MINOCCURS1 = -9; - protected static final int DT_NAMESPACE = -10; - protected static final int DT_PROCESSCONTENTS = -11; - protected static final int DT_NSTRING = -12; + protected static final int DT_FINAL2 = -5; + protected static final int DT_FORM = -6; + protected static final int DT_MAXOCCURS = -7; + protected static final int DT_MAXOCCURS1 = -8; + protected static final int DT_MEMBERTYPES = -9; + protected static final int DT_MINOCCURS1 = -10; + protected static final int DT_NAMESPACE = -11; + protected static final int DT_PROCESSCONTENTS = -12; protected static final int DT_USE = -13; protected static final int DT_WHITESPACE = -14; protected static final int DT_BOOLEAN = -15; @@ -336,7 +336,7 @@ ATTIDX_FINAL, null); allAttrs[ATT_FINAL_D_D] = new OneAttr(SchemaSymbols.ATT_FINALDEFAULT, - DT_FINAL, + DT_FINAL2, ATTIDX_FINALDEFAULT, INT_EMPTY_SET); allAttrs[ATT_FIXED_N] = new OneAttr(SchemaSymbols.ATT_FIXED, @@ -468,7 +468,7 @@ ATTIDX_VALUE, null); allAttrs[ATT_VERSION_N] = new OneAttr(SchemaSymbols.ATT_VERSION, - DT_NSTRING, + DT_TOKEN, ATTIDX_VERSION, null); allAttrs[ATT_XPATH_R] = new OneAttr(SchemaSymbols.ATT_XPATH, @@ -828,7 +828,7 @@ // for element "simpleType" - global attrList = Container.getContainer(3); - // final = (#all | (list | union | restriction)) + // final = (#all | List of (list | union | restriction)) attrList.put(SchemaSymbols.ATT_FINAL, allAttrs[ATT_FINAL1_N]); // id = ID attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]); @@ -839,7 +839,7 @@ // for element "simpleType" - local attrList = Container.getContainer(2); - // final = (#all | (list | union | restriction)) + // final = (#all | List of (list | union | restriction)) attrList.put(SchemaSymbols.ATT_FINAL, allAttrs[ATT_FINAL1_N]); // id = ID attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]); @@ -875,7 +875,7 @@ attrList.put(SchemaSymbols.ATT_BLOCKDEFAULT, allAttrs[ATT_BLOCK_D_D]); // elementFormDefault = (qualified | unqualified) : unqualified attrList.put(SchemaSymbols.ATT_ELEMENTFORMDEFAULT, allAttrs[ATT_ELEMENT_FD_D]); - // finalDefault = (#all | List of (extension | restriction)) : '' + // finalDefault = (#all | List of (extension | restriction | list | union)) : '' attrList.put(SchemaSymbols.ATT_FINALDEFAULT, allAttrs[ATT_FINAL_D_D]); // id = ID attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]); @@ -1378,7 +1378,7 @@ retValue = fXIntPool.getXInt(choice); break; case DT_FINAL1: - // final = (#all | (list | union | restriction)) + // final = (#all | List of (list | union | restriction)) choice = 0; if (value.equals (SchemaSymbols.ATTVAL_POUNDALL)) { //choice = SchemaSymbols.RESTRICTION|SchemaSymbols.LIST| @@ -1391,17 +1391,64 @@ XSConstants.DERIVATION_RESTRICTION|XSConstants.DERIVATION_LIST| XSConstants.DERIVATION_UNION; } - else if (value.equals (SchemaSymbols.ATTVAL_LIST)) { - choice = XSConstants.DERIVATION_LIST; - } - else if (value.equals (SchemaSymbols.ATTVAL_UNION)) { - choice = XSConstants.DERIVATION_UNION; + else { + // use the default \t\r\n\f delimiters + StringTokenizer t = new StringTokenizer(value); + while (t.hasMoreTokens()) { + String token = t.nextToken (); + + if (token.equals (SchemaSymbols.ATTVAL_LIST)) { + choice |= XSConstants.DERIVATION_LIST; + } + else if (token.equals (SchemaSymbols.ATTVAL_UNION)) { + choice |= XSConstants.DERIVATION_UNION; + } + else if (token.equals (SchemaSymbols.ATTVAL_RESTRICTION)) { + choice |= XSConstants.DERIVATION_RESTRICTION; + } + else { + throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{value, "(#all | List of (list | union | restriction))"}); + } + } } - else if (value.equals (SchemaSymbols.ATTVAL_RESTRICTION)) { - choice = XSConstants.DERIVATION_RESTRICTION; + retValue = fXIntPool.getXInt(choice); + break; + case DT_FINAL2: + // finalDefault = (#all | List of (extension | restriction | list | union)) + choice = 0; + if (value.equals (SchemaSymbols.ATTVAL_POUNDALL)) { + //choice = SchemaSymbols.RESTRICTION|SchemaSymbols.LIST| + // SchemaSymbols.UNION; + // REVISIT: if #all, then make the result the combination of + // everything: substitution/externsion/restriction/list/union. + // would this be a problem? + // same reason as above DT_BLOCK1/DT_FINAL + choice = XSConstants.DERIVATION_SUBSTITUTION|XSConstants.DERIVATION_EXTENSION| + XSConstants.DERIVATION_RESTRICTION|XSConstants.DERIVATION_LIST| + XSConstants.DERIVATION_UNION; } else { - throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{value, "(#all | (list | union | restriction))"}); + // use the default \t\r\n\f delimiters + StringTokenizer t = new StringTokenizer(value); + while (t.hasMoreTokens()) { + String token = t.nextToken (); + + if (token.equals (SchemaSymbols.ATTVAL_EXTENSION)) { + choice |= XSConstants.DERIVATION_EXTENSION; + } + else if (token.equals (SchemaSymbols.ATTVAL_RESTRICTION)) { + choice |= XSConstants.DERIVATION_RESTRICTION; + } + else if (token.equals (SchemaSymbols.ATTVAL_LIST)) { + choice |= XSConstants.DERIVATION_LIST; + } + else if (token.equals (SchemaSymbols.ATTVAL_UNION)) { + choice |= XSConstants.DERIVATION_UNION; + } + else { + throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{value, "(#all | List of (extension | restriction | list | union))"}); + } + } } retValue = fXIntPool.getXInt(choice); break; @@ -1529,20 +1576,6 @@ else throw new InvalidDatatypeValueException("cvc-enumeration-valid", new Object[]{value, "(lax | skip | strict)"}); - break; - case DT_NSTRING: - StringBuffer buf = new StringBuffer(value); - boolean changed = false; - int len = value.length(); - char ch; - for (int i = 0; i < len; i++) { - ch = buf.charAt(i); - if (ch == 0x9 || ch == 0xa || ch == 0xd) { - buf.setCharAt(i, ' '); - changed = true; - } - } - retValue = changed ? buf.toString() : value; break; case DT_USE: // use = (optional | prohibited | required)
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]