tng 2002/11/26 13:20:09
Modified: c/src/xercesc/validators/schema SchemaValidator.cpp
Log:
Schema Fix: List can have Union, and Union can have List. So need to check its
items for ID/IDREF/Entity.
Revision Changes Path
1.19 +33 -0 xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp
Index: SchemaValidator.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- SchemaValidator.cpp 7 Nov 2002 21:57:37 -0000 1.18
+++ SchemaValidator.cpp 26 Nov 2002 21:20:09 -0000 1.19
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.19 2002/11/26 21:20:09 tng
+ * Schema Fix: List can have Union, and Union can have List. So need to check its
items for ID/IDREF/Entity.
+ *
* Revision 1.18 2002/11/07 21:57:37 tng
* Fix the following Schema Test Failures:
* 1. Typo when comparing miscFlags with FIXED
@@ -351,6 +354,21 @@
else if (itemDTVType == DatatypeValidator::IDREF) {
((IDREFDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList());
}
+ else if (itemDTVType == DatatypeValidator::Union) {
+ RefVectorOf<DatatypeValidator>* memberDTV =
((UnionDatatypeValidator*)itemDTV)->getMemberTypeValidators();
+ unsigned int memberTypeNumber = memberDTV->size();
+ for ( unsigned int memberIndex = 0; memberIndex <
memberTypeNumber; ++memberIndex)
+ {
+ DatatypeValidator::ValidatorType memberDTVType =
memberDTV->elementAt(memberIndex)->getType();
+ if (memberDTVType == DatatypeValidator::ENTITY)
+
((ENTITYDatatypeValidator*)memberDTV->elementAt(memberIndex))->setEntityDeclPool(getScanner()->getEntityDeclPool());
+ else if (memberDTVType == DatatypeValidator::ID)
+
((IDDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList());
+ else if (memberDTVType == DatatypeValidator::IDREF)
{
+
((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList());
+ }
+ }
+ }
}
else if (eleDefDVType == DatatypeValidator::Union) {
RefVectorOf<DatatypeValidator>* memberDTV =
((UnionDatatypeValidator*)fCurrentDV)->getMemberTypeValidators();
@@ -364,6 +382,17 @@
((IDDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList());
else if (memberDTVType == DatatypeValidator::IDREF) {
((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList());
+ }
+ else if (memberDTVType == DatatypeValidator::List) {
+ DatatypeValidator* itemDTV =
((ListDatatypeValidator*)memberDTV->elementAt(memberIndex))->getItemTypeDTV();
+ DatatypeValidator::ValidatorType itemDTVType =
itemDTV->getType();
+ if (itemDTVType == DatatypeValidator::ENTITY)
+
((ENTITYDatatypeValidator*)itemDTV)->setEntityDeclPool(getScanner()->getEntityDeclPool());
+ else if (itemDTVType == DatatypeValidator::ID)
+
((IDDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList());
+ else if (itemDTVType == DatatypeValidator::IDREF) {
+
((IDREFDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList());
+ }
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]