knoaman 2004/01/05 19:55:26
Modified: c/src/xercesc/internal XSObjectFactory.cpp
c/src/xercesc/framework/psvi XSAttributeDeclaration.cpp
c/src/xercesc/validators/schema TraverseSchema.cpp
Log:
Various PSVI fixes.
Revision Changes Path
1.17 +4 -1 xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp
Index: XSObjectFactory.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- XSObjectFactory.cpp 30 Dec 2003 19:46:15 -0000 1.16
+++ XSObjectFactory.cpp 6 Jan 2004 03:55:26 -0000 1.17
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.17 2004/01/06 03:55:26 knoaman
+ * Various PSVI fixes.
+ *
* Revision 1.16 2003/12/30 19:46:15 neilg
* use a null-terminated string when tokenizing pattern facets
*
@@ -1055,7 +1058,7 @@
bool isRequired = false;
XSConstants::VALUE_CONSTRAINT constraintType = XSConstants::VC_NONE;
- if (attDef->getDefaultType() & XMLAttDef::Default)
+ if (attDef->getDefaultType() == XMLAttDef::Default)
{
constraintType = XSConstants::VC_DEFAULT;
}
1.11 +6 -2
xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.cpp
Index: XSAttributeDeclaration.cpp
===================================================================
RCS file:
/home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- XSAttributeDeclaration.cpp 30 Dec 2003 20:41:06 -0000 1.10
+++ XSAttributeDeclaration.cpp 6 Jan 2004 03:55:26 -0000 1.11
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.11 2004/01/06 03:55:26 knoaman
+ * Various PSVI fixes.
+ *
* Revision 1.10 2003/12/30 20:41:06 neilg
* do not report anything about default/fixed values for non-global attribute
declarations
*
@@ -157,7 +160,8 @@
{
if (fScope != XSConstants::SCOPE_GLOBAL)
return XSConstants::VC_NONE;
- if (fAttDef->getDefaultType() & XMLAttDef::Default)
+
+ if (fAttDef->getDefaultType() == XMLAttDef::Default)
return XSConstants::VC_DEFAULT;
if ((fAttDef->getDefaultType() == XMLAttDef::Fixed) ||
1.106 +81 -85 xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp
Index: TraverseSchema.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -r1.105 -r1.106
--- TraverseSchema.cpp 29 Dec 2003 16:15:42 -0000 1.105
+++ TraverseSchema.cpp 6 Jan 2004 03:55:26 -0000 1.106
@@ -570,7 +570,7 @@
reportSchemaError(elem, XMLUni::fgXMLErrDomain,
XMLErrs::OnlyAnnotationExpected);
if (fAnnotation)
- delete fAnnotation;//fSchemaGrammar->addAnnotation(fAnnotation);
+ fSchemaGrammar->addAnnotation(fAnnotation);
// -----------------------------------------------------------------------
// Get 'schemaLocation' attribute
@@ -718,7 +718,7 @@
reportSchemaError(elem, XMLUni::fgXMLErrDomain,
XMLErrs::OnlyAnnotationExpected);
if (fAnnotation)
- delete fAnnotation;//fSchemaGrammar->addAnnotation(fAnnotation);
+ fSchemaGrammar->addAnnotation(fAnnotation);
// -----------------------------------------------------------------------
// Handle 'namespace' attribute
@@ -1646,107 +1646,112 @@
// ------------------------------------------------------------------
// Handle "ref="
// ------------------------------------------------------------------
+ XercesAttGroupInfo* attGroupInfo = 0;
if (!topLevel) {
if (refEmpty) {
return 0;
}
- return processAttributeGroupRef(elem, ref, typeInfo);
- }
-
- // ------------------------------------------------------------------
- // Handle "name="
- // ------------------------------------------------------------------
- // name must be a valid NCName
- if (!XMLString::isValidNCName(name)) {
- reportSchemaError(elem, XMLUni::fgXMLErrDomain,
XMLErrs::InvalidDeclarationName,
- SchemaSymbols::fgELT_ATTRIBUTEGROUP, name);
- return 0;
+ attGroupInfo = processAttributeGroupRef(elem, ref, typeInfo);
}
+ else
+ {
+ // name must be a valid NCName
+ if (!XMLString::isValidNCName(name)) {
+ reportSchemaError(elem, XMLUni::fgXMLErrDomain,
XMLErrs::InvalidDeclarationName,
+ SchemaSymbols::fgELT_ATTRIBUTEGROUP, name);
+ return 0;
+ }
- // ------------------------------------------------------------------
- // Check for annotations
- // ------------------------------------------------------------------
- DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem),
true);
- Janitor<XSAnnotation> janAnnot(fAnnotation);
+ // Check for annotations
+ DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem),
true);
+ Janitor<XSAnnotation> janAnnot(fAnnotation);
- // ------------------------------------------------------------------
- // Process contents of global attributeGroups
- // ------------------------------------------------------------------
- XercesAttGroupInfo* saveAttGroupInfo = fCurrentAttGroupInfo;
- XercesAttGroupInfo* attGroupInfo = new (fGrammarPoolMemoryManager)
XercesAttGroupInfo(
- fStringPool->addOrFind(name), fTargetNSURI, fGrammarPoolMemoryManager);
+ // Process contents of global attributeGroups
+ XercesAttGroupInfo* saveAttGroupInfo = fCurrentAttGroupInfo;
+ attGroupInfo = new (fGrammarPoolMemoryManager) XercesAttGroupInfo(
+ fStringPool->addOrFind(name), fTargetNSURI, fGrammarPoolMemoryManager);
- fDeclStack->addElement(elem);
- fCurrentAttGroupInfo = attGroupInfo;
+ fDeclStack->addElement(elem);
+ fCurrentAttGroupInfo = attGroupInfo;
- for (; content !=0; content = XUtil::getNextSiblingElement(content)) {
+ for (; content !=0; content = XUtil::getNextSiblingElement(content)) {
- if (XMLString::equals(content->getLocalName(),
SchemaSymbols::fgELT_ATTRIBUTE)) {
- traverseAttributeDecl(content, typeInfo);
- }
- else if (XMLString::equals(content->getLocalName(),
SchemaSymbols::fgELT_ATTRIBUTEGROUP)) {
- traverseAttributeGroupDecl(content, typeInfo);
- }
- else {
- break;
+ if (XMLString::equals(content->getLocalName(),
SchemaSymbols::fgELT_ATTRIBUTE)) {
+ traverseAttributeDecl(content, typeInfo);
+ }
+ else if (XMLString::equals(content->getLocalName(),
SchemaSymbols::fgELT_ATTRIBUTEGROUP)) {
+ traverseAttributeGroupDecl(content, typeInfo);
+ }
+ else {
+ break;
+ }
}
- }
- if (content != 0) {
+ if (content != 0) {
- if (XMLString::equals(content->getLocalName(),
SchemaSymbols::fgELT_ANYATTRIBUTE)) {
+ if (XMLString::equals(content->getLocalName(),
SchemaSymbols::fgELT_ANYATTRIBUTE)) {
- SchemaAttDef* anyAtt = traverseAnyAttribute(content);
+ SchemaAttDef* anyAtt = traverseAnyAttribute(content);
- if (anyAtt) {
- fCurrentAttGroupInfo->addAnyAttDef(anyAtt);
- }
+ if (anyAtt) {
+ fCurrentAttGroupInfo->addAnyAttDef(anyAtt);
+ }
- if (XUtil::getNextSiblingElement(content) != 0) {
+ if (XUtil::getNextSiblingElement(content) != 0) {
+ reportSchemaError(content, XMLUni::fgXMLErrDomain,
XMLErrs::AttGroupContentError, name);
+ }
+ }
+ else {
reportSchemaError(content, XMLUni::fgXMLErrDomain,
XMLErrs::AttGroupContentError, name);
}
}
- else {
- reportSchemaError(content, XMLUni::fgXMLErrDomain,
XMLErrs::AttGroupContentError, name);
- }
- }
- // ------------------------------------------------------------------
- // Pop declaration
- // ------------------------------------------------------------------
- fDeclStack->removeElementAt(fDeclStack->size() - 1);
+ // Pop declaration
+ fDeclStack->removeElementAt(fDeclStack->size() - 1);
- // ------------------------------------------------------------------
- // Restore old attGroupInfo
- // ------------------------------------------------------------------
- fAttGroupRegistry->put((void*)
fStringPool->getValueForId(fStringPool->addOrFind(name)), attGroupInfo);
- fCurrentAttGroupInfo = saveAttGroupInfo;
+ // Restore old attGroupInfo
+ fAttGroupRegistry->put((void*)
fStringPool->getValueForId(fStringPool->addOrFind(name)), attGroupInfo);
+ fCurrentAttGroupInfo = saveAttGroupInfo;
- // ------------------------------------------------------------------
- // Check Attribute Derivation Restriction OK
- // ------------------------------------------------------------------
- fBuffer.set(fTargetNSURIString);
- fBuffer.append(chComma);
- fBuffer.append(name);
+ // Check Attribute Derivation Restriction OK
+ fBuffer.set(fTargetNSURIString);
+ fBuffer.append(chComma);
+ fBuffer.append(name);
- unsigned int nameIndex = fStringPool->addOrFind(fBuffer.getRawBuffer());
+ unsigned int nameIndex = fStringPool->addOrFind(fBuffer.getRawBuffer());
- if (fRedefineComponents &&
fRedefineComponents->get(SchemaSymbols::fgELT_ATTRIBUTEGROUP, nameIndex)) {
+ if (fRedefineComponents &&
fRedefineComponents->get(SchemaSymbols::fgELT_ATTRIBUTEGROUP, nameIndex)) {
- fBuffer.set(name);
- fBuffer.append(SchemaSymbols::fgRedefIdentifier);
- XercesAttGroupInfo* baseAttGroupInfo =
fAttGroupRegistry->get(fBuffer.getRawBuffer());
+ fBuffer.set(name);
+ fBuffer.append(SchemaSymbols::fgRedefIdentifier);
+ XercesAttGroupInfo* baseAttGroupInfo =
fAttGroupRegistry->get(fBuffer.getRawBuffer());
- if (baseAttGroupInfo) {
- checkAttDerivationOK(elem, baseAttGroupInfo, attGroupInfo);
+ if (baseAttGroupInfo)
+ checkAttDerivationOK(elem, baseAttGroupInfo, attGroupInfo);
}
+
+ // Store annotation
+ if (!janAnnot.isDataNull())
+ fSchemaGrammar->putAnnotation(attGroupInfo, janAnnot.release());
}
- // Store annotation
- if (!janAnnot.isDataNull())
- fSchemaGrammar->putAnnotation(attGroupInfo, janAnnot.release());
+ // calculate complete wildcard if necessary
+ if (attGroupInfo)
+ {
+ unsigned int anyAttCount = attGroupInfo->anyAttributeCount();
+ if (anyAttCount && !attGroupInfo->getCompleteWildCard())
+ {
+ SchemaAttDef* attGroupWildCard = new (fGrammarPoolMemoryManager)
+ SchemaAttDef(attGroupInfo->anyAttributeAt(0));
+
+ for (unsigned int k= 1; k < anyAttCount; k++)
+ attWildCardIntersection(attGroupWildCard,
attGroupInfo->anyAttributeAt(k));
+
+ attGroupInfo->setCompleteWildCard(attGroupWildCard);
+ }
+ }
return attGroupInfo;
}
@@ -6264,18 +6269,6 @@
}
SchemaAttDef* attGroupWildCard =
attGroupInfo->getCompleteWildCard();
-
- if (!attGroupWildCard) {
-
- attGroupWildCard = new (fGrammarPoolMemoryManager)
SchemaAttDef(attGroupInfo->anyAttributeAt(0));
-
- for (unsigned int i= 1; i < anyAttCount; i++) {
- attWildCardIntersection(attGroupWildCard,
attGroupInfo->anyAttributeAt(i));
- }
-
- attGroupInfo->setCompleteWildCard(attGroupWildCard);
- }
-
if (completeWildCard) {
attWildCardIntersection(completeWildCard, attGroupWildCard);
}
@@ -6540,6 +6533,9 @@
(XMLString::equals(fixedFacet, SchemaSymbols::fgATTVAL_TRUE)
|| XMLString::equals(fixedFacet, fgValueOne))) {
+ if (XMLString::equals(SchemaSymbols::fgELT_LENGTH, facetName)) {
+ flags |= DatatypeValidator::FACET_LENGTH;
+ }
if (XMLString::equals(SchemaSymbols::fgELT_MINLENGTH, facetName)) {
flags |= DatatypeValidator::FACET_MINLENGTH;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]