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