mrglavas    2004/10/28 22:05:13

  Modified:    java/src/org/apache/xerces/impl/xs/traversers
                        XSAttributeChecker.java
               java/src/org/apache/xerces/impl/xs SchemaSymbols.java
  Log:
  Both <schema> and <documentation> may have an xml:lang attribute of type language.
  We need to check that when these attributes appear in a schema document on these
  elements that their value is valid with respect to the language type. Also fixed a 
couple
  bugs where we were incorrectly processing xml* and xmlns* attributes.
  
  Revision  Changes    Path
  1.36      +41 -26    
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.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- XSAttributeChecker.java   29 Oct 2004 04:07:12 -0000      1.35
  +++ XSAttributeChecker.java   29 Oct 2004 05:05:13 -0000      1.36
  @@ -18,7 +18,6 @@
   
   import java.util.Enumeration;
   import java.util.Hashtable;
  -import java.util.Locale;
   import java.util.StringTokenizer;
   import java.util.Vector;
   
  @@ -30,13 +29,13 @@
   import org.apache.xerces.impl.xs.XSAttributeDecl;
   import org.apache.xerces.impl.xs.XSGrammarBucket;
   import org.apache.xerces.impl.xs.XSWildcardDecl;
  -import org.apache.xerces.xs.XSConstants;
   import org.apache.xerces.impl.xs.util.XInt;
   import org.apache.xerces.impl.xs.util.XIntPool;
   import org.apache.xerces.util.DOMUtil;
   import org.apache.xerces.util.SymbolTable;
   import org.apache.xerces.util.XMLSymbols;
   import org.apache.xerces.xni.QName;
  +import org.apache.xerces.xs.XSConstants;
   import org.w3c.dom.Attr;
   import org.w3c.dom.Element;
   
  @@ -113,6 +112,7 @@
       public static final int ATTIDX_VALUE           = ATTIDX_COUNT++;
       public static final int ATTIDX_ENUMNSDECLS     = ATTIDX_COUNT++;
       public static final int ATTIDX_VERSION         = ATTIDX_COUNT++;
  +    public static final int ATTIDX_XML_LANG        = ATTIDX_COUNT++;
       public static final int ATTIDX_XPATH           = ATTIDX_COUNT++;
       public static final int ATTIDX_FROMDEFAULT     = ATTIDX_COUNT++;
       //public static final int ATTIDX_OTHERVALUES     = ATTIDX_COUNT++;
  @@ -156,9 +156,10 @@
       protected static final int DT_NCNAME           = 5;
       protected static final int DT_XPATH            = 6;
       protected static final int DT_XPATH1           = 7;
  +    protected static final int DT_LANGUAGE         = 8;
   
       // used to store extra datatype validators
  -    protected static final int DT_COUNT            = DT_XPATH1 + 1;
  +    protected static final int DT_COUNT            = DT_LANGUAGE + 1;
       private static final XSSimpleType[] fExtraDVs = new XSSimpleType[DT_COUNT];
       static {
           // step 5: register all datatype validators for new types
  @@ -179,6 +180,8 @@
           fExtraDVs[DT_XPATH] = fExtraDVs[DT_STRING];
           // xpath = a subset of XPath expression
           fExtraDVs[DT_XPATH] = fExtraDVs[DT_STRING];
  +        // language
  +        fExtraDVs[DT_LANGUAGE] = 
(XSSimpleType)grammar.getGlobalTypeDecl(SchemaSymbols.ATTVAL_LANGUAGE);
       }
   
       protected static final int DT_BLOCK            = -1;
  @@ -247,6 +250,7 @@
           int ATT_VALUE_STR_N         = attCount++;
           int ATT_VALUE_WS_N          = attCount++;
           int ATT_VERSION_N           = attCount++;
  +        int ATT_XML_LANG            = attCount++;
           int ATT_XPATH_R             = attCount++;
           int ATT_XPATH1_R            = attCount++;
   
  @@ -432,6 +436,10 @@
                                                           DT_TOKEN,
                                                           ATTIDX_VERSION,
                                                           null);
  +        allAttrs[ATT_XML_LANG]          =   new OneAttr(SchemaSymbols.ATT_XML_LANG,
  +                                                        DT_LANGUAGE,
  +                                                        ATTIDX_XML_LANG,
  +                                                        null);
           allAttrs[ATT_XPATH_R]           =   new OneAttr(SchemaSymbols.ATT_XPATH,
                                                           DT_XPATH,
                                                           ATTIDX_XPATH,
  @@ -779,10 +787,11 @@
           fEleAttrsMapL.put(SchemaSymbols.ELT_APPINFO, oneEle);
   
           // for element "documentation" - local
  -        attrList = Container.getContainer(1);
  +        attrList = Container.getContainer(2);
           // source = anyURI
           attrList.put(SchemaSymbols.ATT_SOURCE, allAttrs[ATT_SOURCE_N]);
  -        // xml:lang = language ???
  +        // xml:lang = language
  +        attrList.put(SchemaSymbols.ATT_XML_LANG, allAttrs[ATT_XML_LANG]);
           oneEle = new OneElement (attrList);
           fEleAttrsMapG.put(SchemaSymbols.ELT_DOCUMENTATION, oneEle);
           fEleAttrsMapL.put(SchemaSymbols.ELT_DOCUMENTATION, oneEle);
  @@ -829,7 +838,7 @@
           fEleAttrsMapL.put(SchemaSymbols.ELT_UNION, oneEle);
   
           // for element "schema" - global
  -        attrList = Container.getContainer(7);
  +        attrList = Container.getContainer(8);
           // attributeFormDefault = (qualified | unqualified) : unqualified
           attrList.put(SchemaSymbols.ATT_ATTRIBUTEFORMDEFAULT, 
allAttrs[ATT_ATTRIBUTE_FD_D]);
           // blockDefault = (#all | List of (substitution | extension | restriction | 
list | union))  : ''
  @@ -844,7 +853,8 @@
           attrList.put(SchemaSymbols.ATT_TARGETNAMESPACE, allAttrs[ATT_TARGET_N_N]);
           // version = token
           attrList.put(SchemaSymbols.ATT_VERSION, allAttrs[ATT_VERSION_N]);
  -        // xml:lang = language ???
  +        // xml:lang = language
  +        attrList.put(SchemaSymbols.ATT_XML_LANG, allAttrs[ATT_XML_LANG]);
           oneEle = new OneElement (attrList);
           fEleAttrsMapG.put(SchemaSymbols.ELT_SCHEMA, oneEle);
   
  @@ -1067,29 +1077,27 @@
               // get the attribute name/value
               //String attrName = DOMUtil.getLocalName(sattr);
               String attrName = sattr.getName();
  +            String attrURI = DOMUtil.getNamespaceURI(sattr);
               String attrVal = DOMUtil.getValue(sattr);
  -
  -            // we don't want to add namespace declarations to the non-schema 
attributes
  -            if (attrName.startsWith("xmlns")) {
  -                continue;
  -            }
  -
  -            // skip anything starts with x/X m/M l/L
  -            // add this to the list of "non-schema" attributes
  -            if (attrName.toLowerCase(Locale.ENGLISH).startsWith("xml")) {
  -                if(attrValues[ATTIDX_NONSCHEMA] == null) {
  -                    // these are usually small
  -                    attrValues[ATTIDX_NONSCHEMA] = new Vector(4,2);
  +            
  +            if (attrName.startsWith("xml")) {
  +                String attrPrefix = DOMUtil.getPrefix(sattr);
  +                // we don't want to add namespace declarations to the non-schema 
attributes
  +                if ("xmlns".equals(attrPrefix) || "xmlns".equals(attrName)) {
  +                    continue;
  +                }
  +                // Both <schema> and <documentation> may have an xml:lang attribute.
  +                // Set the URI for this attribute to null so that we process it
  +                // like any other schema attribute.
  +                else if (SchemaSymbols.ATT_XML_LANG.equals(attrName) &&
  +                        (SchemaSymbols.ELT_SCHEMA.equals(elName) ||
  +                                SchemaSymbols.ELT_DOCUMENTATION.equals(elName))) {
  +                    attrURI = null;
                   }
  -                ((Vector)attrValues[ATTIDX_NONSCHEMA]).addElement(attrName);
  -                ((Vector)attrValues[ATTIDX_NONSCHEMA]).addElement(attrVal);
  -                //otherValues.put(attrName, attrVal);
  -                continue;
               }
   
               // for attributes with namespace prefix
               //
  -            String attrURI = DOMUtil.getNamespaceURI(sattr);
               if (attrURI != null && attrURI.length() != 0) {
                   // attributes with schema namespace are not allowed
                   // and not allowed on "document" and "appInfo"
  @@ -1222,7 +1230,14 @@
           // To validate these types, we don't actually need to normalize the
           // strings. We only need to remove the whitespace from both ends.
           // In some special cases (list types), StringTokenizer can correctly
  -        // process the un-normalized whitespace.
  +        // process the un-normalized whitespace.        
  +        /**
  +         * REVISIT: Trim removes all leading and trailing characters less
  +         * than or equal to U+0020. This is okay for XML 1.0 since all
  +         * of the valid characters in that range are white space but
  +         * in XML 1.1 control chars are allowed. We shouldn't be trimming
  +         * those. -- mrglavas
  +         */
           String value = ivalue.trim();
           Object retValue = null;
           Vector memberType;
  
  
  
  1.10      +3 -2      xml-xerces/java/src/org/apache/xerces/impl/xs/SchemaSymbols.java
  
  Index: SchemaSymbols.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/SchemaSymbols.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SchemaSymbols.java        6 Oct 2004 15:14:55 -0000       1.9
  +++ SchemaSymbols.java        29 Oct 2004 05:05:13 -0000      1.10
  @@ -88,7 +88,7 @@
       public static final String ELT_UNIQUE               = "unique".intern();
       public static final String ELT_WHITESPACE           = "whiteSpace".intern();
   
  -    // all possible schema attribute names
  +    // all possible schema attribute names (and xml:lang defined on <schema> and 
<documentation>)
       public static final String ATT_ABSTRACT             = "abstract".intern();
       public static final String ATT_ATTRIBUTEFORMDEFAULT = 
"attributeFormDefault".intern();
       public static final String ATT_BASE                 = "base".intern();
  @@ -122,6 +122,7 @@
       public static final String ATT_USE                  = "use".intern();
       public static final String ATT_VALUE                = "value".intern();
       public static final String ATT_VERSION              = "version".intern();
  +    public static final String ATT_XML_LANG             = "xml:lang".intern();
       public static final String ATT_XPATH                = "xpath".intern();
   
       // all possible schema attribute values
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to