You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by sa...@apache.org on 2001/08/29 15:00:47 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl/v2 SchemaValidator.java XSAttributeChecker.java XSDAbstractTraverser.java XSDElementTraverser.java

sandygao    01/08/29 06:00:47

  Modified:    java/src/org/apache/xerces/impl/v2 SchemaValidator.java
                        XSAttributeChecker.java XSDAbstractTraverser.java
                        XSDElementTraverser.java
  Log:
  SchemaValidator is ready to validate element against a simpleType.
  It's only temprory code to test our schema implementation.
  It won't compile yet, because we need to decide:
  1. how to store simple types in the grammar;
  2. using parallel arrays vs. objects.
  
  Revision  Changes    Path
  1.2       +45 -5     xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaValidator.java
  
  Index: SchemaValidator.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaValidator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SchemaValidator.java	2001/08/27 20:57:05	1.1
  +++ SchemaValidator.java	2001/08/29 13:00:47	1.2
  @@ -107,7 +107,7 @@
    * @author Andy Clark, IBM
    * @author Jeffrey Rodriguez IBM
    *
  - * @version $Id: SchemaValidator.java,v 1.1 2001/08/27 20:57:05 sandygao Exp $
  + * @version $Id: SchemaValidator.java,v 1.2 2001/08/29 13:00:47 sandygao Exp $
    */
   public class SchemaValidator
       implements XMLComponent, XMLDocumentHandler {
  @@ -191,8 +191,11 @@
       /** Schema grammar. */
       private SchemaGrammar fSchemaGrammar;
   
  -    /** Schema grammar. */
  +    /** Schema grammar resolver. */
       private XSGrammarResolver fGrammarResolver;
  +    
  +    /** Schema handler */
  +    private XSDHandler fSchemaHandler;
   
       /** Perform validation. */
       private boolean fPerformValidation;
  @@ -280,9 +283,6 @@
       /** Temporary qualified name. */
       private QName fTempQName = new QName();
   
  -    /** Temporary string buffer for buffering datatype value. */
  -    //private StringBuffer fDatatypeBuffer = new StringBuffer();
  -
       /** Notation declaration hash. */
       private Hashtable fNDataDeclNotations = new Hashtable();
   
  @@ -392,6 +392,11 @@
           fErrorReporter = (XMLErrorReporter)componentManager.getProperty(Constants.XERCES_PROPERTY_PREFIX+Constants.ERROR_REPORTER_PROPERTY);
           fSymbolTable = (SymbolTable)componentManager.getProperty(Constants.XERCES_PROPERTY_PREFIX+Constants.SYMBOL_TABLE_PROPERTY);
   
  +        fGrammarResolver = new XSGrammarResolver();
  +        fSchemaHandler = new XSDHandler(fGrammarResolver, fErrorReporter,
  +                                        null,//fEntityResolver,
  +                                        fSymbolTable);
  +        
           fElementDepth = -1;
           init();
   
  @@ -588,6 +593,7 @@
   
           //???handleStartElement(element, attributes, false);
           System.out.println("startElement: " + element.rawname);
  +        doStart (element, attributes);
           if (fDocumentHandler != null) {
               fDocumentHandler.startElement(element, attributes);
           }
  @@ -608,6 +614,7 @@
           //???handleStartElement(element, attributes, true);
           //???handleEndElement(element, true);
           System.out.println("start/endElement: " + element.rawname);
  +        doStart (element, attributes);
           if (fDocumentHandler != null) {
               fDocumentHandler.emptyElement(element, attributes);
           }
  @@ -644,6 +651,7 @@
           }
   
           // validate
  +        fBuffer.append(text.toString());
   
           // call handlers
           if (callNextCharacters && fDocumentHandler != null) {
  @@ -684,6 +692,12 @@
   
           //???handleEndElement(element, false);
           System.out.println("endElement: " + element.rawname);
  +        
  +        SchemaGrammar grammar = fGrammarResolver.getGrammar(fTempElementDecl.fTypeNS);
  +        XSType elemType = grammar.getTypeDecl(fTempElementDecl.fXSTypeDecl, fTempTypeDecl);
  +        if (elemType.getXSType() == XSType.SIMPLE_TYPE)
  +            ((DatatypeValidator)elemType).validate(fBuffer.toString(), null);
  +        
           if (fDocumentHandler != null) {
               fDocumentHandler.endElement(element);
           }
  @@ -1182,5 +1196,31 @@
           fInElementContent = fCurrentContentModel.childrenCount() > 0;
   
       } // handleEndElement(QName,boolean)*/
  +
  +    void doStart (QName element, XMLAttributes attrs) {
  +        String sLocation = attrs.getValue(SchemaSymbols.URI_XSI, SchemaSymbols.XSI_SCHEMALOCACTION);
  +        String nsLocation = attrs.getValue(SchemaSymbols.URI_XSI, SchemaSymbols.XSI_NONAMESPACESCHEMALOCACTION);
  +        if (sLocation != null) {
  +            StringTokenizer t = new StringTokenizer(sLocation, " ");
  +            String namespace, location;
  +            while (t.hasMoreTokens()) {
  +                namespace = t.nextToken ();
  +                if (!t.hasMoreTokens())
  +                    break;
  +                location = t.nextToken();
  +                if (fGrammarResolver.getGrammar(namespace) == null)
  +                    fSchemaHandler.parseSchema(namespace, location);
  +            }
  +        }
  +        if (nsLocation != null) {
  +            if (fGrammarResolver.getGrammar("") == null)
  +                fSchemaHandler.parseSchema("", nsLocation);
  +        }
  +        
  +        fSchemaGrammar = fGrammarResolver.getGrammar(element.uri);
  +        fTempElementDecl = fSchemaGrammar.getElementDecl(element.localpart, fTempElementDecl);
  +
  +        fBuffer.setLength(0);
  +    }
   
   } // class XMLDTDValidator
  
  
  
  1.8       +9 -12     xml-xerces/java/src/org/apache/xerces/impl/v2/XSAttributeChecker.java
  
  Index: XSAttributeChecker.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSAttributeChecker.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XSAttributeChecker.java	2001/08/28 19:57:46	1.7
  +++ XSAttributeChecker.java	2001/08/29 13:00:47	1.8
  @@ -91,9 +91,9 @@
    * - Should return QName instead of String for QName type values
    * - Should return compiled form for wildcard namespace
    *
  - * @version $Id: XSAttributeChecker.java,v 1.7 2001/08/28 19:57:46 sandygao Exp $
  + * @version $Id: XSAttributeChecker.java,v 1.8 2001/08/29 13:00:47 sandygao Exp $
   =======
  - * @version $Id: XSAttributeChecker.java,v 1.7 2001/08/28 19:57:46 sandygao Exp $
  + * @version $Id: XSAttributeChecker.java,v 1.8 2001/08/29 13:00:47 sandygao Exp $
   >>>>>>> 1.6
    */
   
  @@ -1083,12 +1083,10 @@
           for (int i = 0; i < reqAttrs.length; i++) {
               OneAttr oneAttr = reqAttrs[i];
   
  -            // if the attribute appreared, skip to the next one
  -            if (DOMUtil.getAttr(element, oneAttr.name) != null)
  -                continue;
  -
  +            // if the attribute didn't apprear, and
               // if the attribute is optional with default value, apply it
  -            else if (oneAttr.dfltValue != null) {
  +            if (oneAttr.dfltValue != null &&
  +                DOMUtil.getAttr(element, oneAttr.name) != null) {
                   attrValues.put(oneAttr.name, oneAttr.dfltValue);
               }
           }
  @@ -1319,11 +1317,10 @@
               }
           }
           else {
  -            //REVISIT: how to report schema errors?
  -            //fErrorReporter.reportError(SomeMessageProvider.SCHEMA_DOMAIN,
  -            //                           key,
  -            //                           args,
  -            //                           XMLErrorReporter.SEVERITY_ERROR);
  +            fErrorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN,
  +                                       key,
  +                                       args,
  +                                       XMLErrorReporter.SEVERITY_ERROR);
           }
       }
   
  
  
  
  1.8       +2 -2      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractTraverser.java
  
  Index: XSDAbstractTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractTraverser.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XSDAbstractTraverser.java	2001/08/28 20:21:15	1.7
  +++ XSDAbstractTraverser.java	2001/08/29 13:00:47	1.8
  @@ -68,7 +68,7 @@
    * other <code>XSD???Traverser</code>s. It holds the common data and provide
    * a unified way to initialize these data.
    *
  - * @version $Id: XSDAbstractTraverser.java,v 1.7 2001/08/28 20:21:15 elena Exp $
  + * @version $Id: XSDAbstractTraverser.java,v 1.8 2001/08/29 13:00:47 sandygao Exp $
    */
   abstract class XSDAbstractTraverser {
   
  @@ -115,7 +115,7 @@
               // "appinfo" and "documentation"
               if(!((name.equals(SchemaSymbols.ELT_APPINFO)) ||
                    (name.equals(SchemaSymbols.ELT_DOCUMENTATION)))) {
  -                reportSchemaError("an <annotation> can only contain <appinfo> and <documentation> elements", null);
  +                reportGenericSchemaError("an <annotation> can only contain <appinfo> and <documentation> elements");
               }
   
               // General Attribute Checking
  
  
  
  1.4       +4 -3      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDElementTraverser.java
  
  Index: XSDElementTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDElementTraverser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XSDElementTraverser.java	2001/08/28 19:57:46	1.3
  +++ XSDElementTraverser.java	2001/08/29 13:00:47	1.4
  @@ -84,7 +84,7 @@
    *   Content: (annotation?, ((simpleType | complexType)?, (unique | key | keyref)*))
    * </element>
    *
  - * @version $Id: XSDElementTraverser.java,v 1.3 2001/08/28 19:57:46 sandygao Exp $
  + * @version $Id: XSDElementTraverser.java,v 1.4 2001/08/29 13:00:47 sandygao Exp $
    */
   class XSDElementTraverser extends XSDAbstractTraverser{
   
  @@ -292,7 +292,7 @@
           }
           // type specified as an attribute and no child is type decl.
           else if (!haveAnonType && typeAtt != null) {
  -            elementType = fSchemaHandler.getTypeDecl(typeAtt.uri, typeAtt.localpart);
  +            elementType = fSchemaHandler.getGlobalDecl(schemaDoc, fSchemaHandler.TYPE_TYPE, typeAtt);
               if (elementType == -1) {
                   noErrorSoFar = false;
                   reportGenericSchemaError("type not found: "+typeAtt.uri+":"+typeAtt.localpart);
  @@ -415,7 +415,7 @@
           }*/
   
           if (elementType == -1 && noErrorSoFar) {
  -            elementType = fSchemaHandler.getTypeDecl(ANY_TYPE.uri, ANY_TYPE.localpart);
  +            elementType = fSchemaHandler.getGlobalDecl(schemaDoc, fSchemaHandler.TYPE_TYPE, ANY_TYPE);
           }
   
           // Now we can handle validation etc. of default and fixed attributes,
  @@ -471,6 +471,7 @@
           }
   
           // add element decl to the registry
  +        fTempElementDecl.clear();
           fTempElementDecl.fQName.setValues(null, nameAtt, nameAtt, namespace);
           fTempElementDecl.fTypeNS = typeAtt == null ? schemaDoc.fTargetNamespace : typeAtt.uri;
           fTempElementDecl.fXSTypeDecl = elementType;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org