You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by kn...@apache.org on 2001/11/20 21:21:49 UTC
cvs commit: xml-xerces/c/src/validators/schema XercesAttGroupInfo.hpp XercesAttGroupInfo.cpp TraverseSchema.hpp TraverseSchema.cpp
knoaman 01/11/20 12:21:49
Modified: c/src/validators/schema XercesAttGroupInfo.hpp
XercesAttGroupInfo.cpp TraverseSchema.hpp
TraverseSchema.cpp
Log:
Add check for attribute derviation ok when redefining attribute group by restriction.
Revision Changes Path
1.4 +3 -1 xml-xerces/c/src/validators/schema/XercesAttGroupInfo.hpp
Index: XercesAttGroupInfo.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/validators/schema/XercesAttGroupInfo.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XercesAttGroupInfo.hpp 2001/11/20 15:57:04 1.3
+++ XercesAttGroupInfo.hpp 2001/11/20 20:21:49 1.4
@@ -55,7 +55,7 @@
*/
/*
- * $Id: XercesAttGroupInfo.hpp,v 1.3 2001/11/20 15:57:04 knoaman Exp $
+ * $Id: XercesAttGroupInfo.hpp,v 1.4 2001/11/20 20:21:49 knoaman Exp $
*/
#if !defined(XERCESATTGROUPINFO_HPP)
@@ -96,6 +96,8 @@
SchemaAttDef* anyAttributeAt(const unsigned int index);
const SchemaAttDef* anyAttributeAt(const unsigned int index) const;
SchemaAttDef* getCompleteWildCard() const;
+ const SchemaAttDef* getAttDef(const XMLCh* const baseName,
+ const int uriId) const;
// -----------------------------------------------------------------------
// Setter methods
1.4 +30 -0 xml-xerces/c/src/validators/schema/XercesAttGroupInfo.cpp
Index: XercesAttGroupInfo.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/validators/schema/XercesAttGroupInfo.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XercesAttGroupInfo.cpp 2001/11/20 15:57:04 1.3
+++ XercesAttGroupInfo.cpp 2001/11/20 20:21:49 1.4
@@ -56,6 +56,9 @@
/*
* $Log: XercesAttGroupInfo.cpp,v $
+ * Revision 1.4 2001/11/20 20:21:49 knoaman
+ * Add check for attribute derviation ok when redefining attribute group by restriction.
+ *
* Revision 1.3 2001/11/20 15:57:04 knoaman
* Add check for multiple attributes with type derived from ID.
*
@@ -115,6 +118,33 @@
}
return false;
+}
+
+// ---------------------------------------------------------------------------
+// XercesAttGroupInfo: Getter methods
+// ---------------------------------------------------------------------------
+const SchemaAttDef* XercesAttGroupInfo::getAttDef(const XMLCh* const baseName,
+ const int uriId) const {
+
+ // If no list, then return a null
+ if (!fAttributes)
+ return 0;
+
+ unsigned int attSize = fAttributes->size();
+
+ for (unsigned int i=0; i<attSize; i++) {
+
+ const SchemaAttDef* attDef = fAttributes->elementAt(i);
+ QName* attName = attDef->getAttName();
+
+ if (uriId == (int) attName->getURI() &&
+ !XMLString::compareString(baseName, attName->getLocalPart())) {
+
+ return attDef;
+ }
+ }
+
+ return 0;
}
/**
1.28 +3 -1 xml-xerces/c/src/validators/schema/TraverseSchema.hpp
Index: TraverseSchema.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/validators/schema/TraverseSchema.hpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- TraverseSchema.hpp 2001/11/16 15:03:37 1.27
+++ TraverseSchema.hpp 2001/11/20 20:21:49 1.28
@@ -55,7 +55,7 @@
*/
/*
- * $Id: TraverseSchema.hpp,v 1.27 2001/11/16 15:03:37 knoaman Exp $
+ * $Id: TraverseSchema.hpp,v 1.28 2001/11/20 20:21:49 knoaman Exp $
*/
#if !defined(TRAVERSESCHEMA_HPP)
@@ -570,6 +570,8 @@
*/
void checkAttDerivationOK(const ComplexTypeInfo* const baseTypeInfo,
const ComplexTypeInfo* const childTypeInfo);
+ void checkAttDerivationOK(const XercesAttGroupInfo* const baseAttGrpInfo,
+ const XercesAttGroupInfo* const childAttGrpInfo);
/**
* Check whether a namespace value is valid with respect to wildcard
1.63 +93 -1 xml-xerces/c/src/validators/schema/TraverseSchema.cpp
Index: TraverseSchema.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/validators/schema/TraverseSchema.cpp,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- TraverseSchema.cpp 2001/11/20 15:57:04 1.62
+++ TraverseSchema.cpp 2001/11/20 20:21:49 1.63
@@ -55,7 +55,7 @@
*/
/*
- * $Id: TraverseSchema.cpp,v 1.62 2001/11/20 15:57:04 knoaman Exp $
+ * $Id: TraverseSchema.cpp,v 1.63 2001/11/20 20:21:49 knoaman Exp $
*/
// ---------------------------------------------------------------------------
@@ -1474,6 +1474,26 @@
// ------------------------------------------------------------------
fCurrentAttGroupInfo = saveAttGroupInfo;
+ // ------------------------------------------------------------------
+ // Check Attribute Derivation Restriction OK
+ // ------------------------------------------------------------------
+ fBuffer.set(fTargetNSURIString);
+ fBuffer.append(chComma);
+ fBuffer.append(name);
+
+ unsigned int nameIndex = fStringPool->addOrFind(fBuffer.getRawBuffer());
+
+ if (fRedefineComponents && fRedefineComponents->get(SchemaSymbols::fgELT_ATTRIBUTEGROUP, nameIndex)) {
+
+ fBuffer.set(name);
+ fBuffer.append(SchemaSymbols::fgRedefIdentifier);
+ XercesAttGroupInfo* baseAttGroupInfo = fAttGroupRegistry->get(fBuffer.getRawBuffer());
+
+ if (baseAttGroupInfo) {
+ checkAttDerivationOK(baseAttGroupInfo, attGroupInfo);
+ }
+ }
+
return attGroupInfo;
}
@@ -6901,6 +6921,78 @@
// Constraint 4
const SchemaAttDef* childAttWildCard = childTypeInfo->getAttWildCard();
+
+ if (childAttWildCard) {
+
+ if (!baseAttWildCard) {
+ reportSchemaError(XMLUni::fgXMLErrDomain, XMLErrs::BadAttDerivation_6);
+ }
+ else if (!isWildCardSubset(baseAttWildCard, childAttWildCard)) {
+ reportSchemaError(XMLUni::fgXMLErrDomain, XMLErrs::BadAttDerivation_7);
+ }
+ }
+}
+
+void TraverseSchema::checkAttDerivationOK(const XercesAttGroupInfo* const baseAttGrpInfo,
+ const XercesAttGroupInfo* const childAttGrpInfo) {
+
+ unsigned int baseAttCount = baseAttGrpInfo->attributeCount();
+ unsigned int baseAnyAttCount = baseAttGrpInfo->anyAttributeCount();
+ unsigned int childAttCount = childAttGrpInfo->attributeCount();
+ unsigned int childAnyAttCount = childAttGrpInfo->anyAttributeCount();
+
+ if ((childAttCount || childAnyAttCount) && (!baseAttCount && !baseAnyAttCount)) {
+ reportSchemaError(XMLUni::fgXMLErrDomain, XMLErrs::BadAttDerivation_1);
+ }
+
+ const SchemaAttDef* baseAttWildCard = (baseAnyAttCount) ? baseAttGrpInfo->anyAttributeAt(0) : 0;
+
+ for (unsigned int i=0; i<childAttCount; i++) {
+
+ const SchemaAttDef* childAttDef = childAttGrpInfo->attributeAt(i);
+ QName* childAttName = childAttDef->getAttName();
+ const XMLCh* childLocalPart = childAttName->getLocalPart();
+ const SchemaAttDef* baseAttDef = baseAttGrpInfo->getAttDef(childLocalPart, childAttName->getURI());
+
+ if (baseAttDef) {
+
+ XMLAttDef::DefAttTypes baseAttDefType = baseAttDef->getDefaultType();
+ XMLAttDef::DefAttTypes childAttDefType = childAttDef->getDefaultType();
+
+ // Constraint 2.1.1 & 3 + check for prohibited base attribute
+ if (baseAttDefType == XMLAttDef::Prohibited
+ && childAttDefType != XMLAttDef::Prohibited) {
+ reportSchemaError(XMLUni::fgXMLErrDomain, XMLErrs::BadAttDerivation_8, childLocalPart);
+ }
+
+ if ((baseAttDefType & XMLAttDef::Required)
+ && !(childAttDefType & XMLAttDef::Required)) {
+ reportSchemaError(XMLUni::fgXMLErrDomain, XMLErrs::BadAttDerivation_2, childLocalPart);
+ }
+
+ // Constraint 2.1.2
+ DatatypeValidator* baseDV = baseAttDef->getDatatypeValidator();
+ DatatypeValidator* childDV = childAttDef->getDatatypeValidator();
+ if (!baseDV || !baseDV->isSubstitutableBy(childDV)) {
+ reportSchemaError(XMLUni::fgXMLErrDomain, XMLErrs::BadAttDerivation_3, childLocalPart);
+ }
+
+ // Constraint 2.1.3
+ if ((baseAttDefType & XMLAttDef::Fixed) &&
+ (!(childAttDefType & XMLAttDef::Fixed) ||
+ XMLString::compareString(baseAttDef->getValue(), childAttDef->getValue()))) {
+ reportSchemaError(XMLUni::fgXMLErrDomain, XMLErrs::BadAttDerivation_4, childLocalPart);
+ }
+ }
+ // Constraint 2.2
+ else if (!baseAttWildCard ||
+ !wildcardAllowsNamespace(baseAttWildCard, childAttName->getURI())) {
+ reportSchemaError(XMLUni::fgXMLErrDomain, XMLErrs::BadAttDerivation_5, childLocalPart);
+ }
+ }
+
+ // Constraint 4
+ const SchemaAttDef* childAttWildCard = (childAnyAttCount) ? childAttGrpInfo->anyAttributeAt(0) : 0;
if (childAttWildCard) {
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org