knoaman 2003/12/17 12:50:36
Modified: c/src/xercesc/framework/psvi XSAttributeUse.cpp
XSAttributeUse.hpp
c/src/xercesc/internal XSObjectFactory.cpp
XSObjectFactory.hpp
c/src/xercesc/validators/schema SchemaAttDef.cpp
SchemaAttDef.hpp TraverseSchema.cpp
XercesAttGroupInfo.hpp
Log:
PSVI: fix for annotation of attributes in attributeGroup/derived types
Revision Changes Path
1.6 +13 -15 xml-xerces/c/src/xercesc/framework/psvi/XSAttributeUse.cpp
Index: XSAttributeUse.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAttributeUse.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XSAttributeUse.cpp 21 Nov 2003 17:19:30 -0000 1.5
+++ XSAttributeUse.cpp 17 Dec 2003 20:50:34 -0000 1.6
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.6 2003/12/17 20:50:34 knoaman
+ * PSVI: fix for annotation of attributes in attributeGroup/derived types
+ *
* Revision 1.5 2003/11/21 17:19:30 knoaman
* PSVI update.
*
@@ -77,7 +80,6 @@
*/
#include <xercesc/framework/psvi/XSAttributeUse.hpp>
-#include <xercesc/framework/psvi/XSAttributeDeclaration.hpp>
XERCES_CPP_NAMESPACE_BEGIN
@@ -88,6 +90,9 @@
XSModel* const xsModel,
MemoryManager* const manager)
: XSObject(XSConstants::ATTRIBUTE_USE, xsModel, manager)
+ , fRequired(false)
+ , fConstraintType(XSConstants::VC_NONE)
+ , fConstraintValue(0)
, fXSAttributeDeclaration(xsAttDecl)
{
}
@@ -97,25 +102,18 @@
{
// don't delete fXSAttributeDeclaration - deleted by XSModel
}
-// XSAttributeUse methods
// ---------------------------------------------------------------------------
-// XSAttributeUse: access methods
+// XSAttributeUse: helper methods
// ---------------------------------------------------------------------------
-bool XSAttributeUse::getRequired() const
-{
- return fXSAttributeDeclaration->getRequired();
-}
-
-XSConstants::VALUE_CONSTRAINT XSAttributeUse::getConstraintType() const
-{
- return fXSAttributeDeclaration->getConstraintType();
-}
-
-const XMLCh *XSAttributeUse::getConstraintValue()
+void XSAttributeUse::set(const bool isRequired,
+ XSConstants::VALUE_CONSTRAINT constraintType,
+ const XMLCh* const constraintValue)
{
- return fXSAttributeDeclaration->getConstraintValue();
+ fRequired = isRequired;
+ fConstraintType = constraintType;
+ fConstraintValue = constraintValue;
}
XERCES_CPP_NAMESPACE_END
1.6 +31 -1 xml-xerces/c/src/xercesc/framework/psvi/XSAttributeUse.hpp
Index: XSAttributeUse.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAttributeUse.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XSAttributeUse.hpp 21 Nov 2003 17:19:30 -0000 1.5
+++ XSAttributeUse.hpp 17 Dec 2003 20:50:34 -0000 1.6
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.6 2003/12/17 20:50:34 knoaman
+ * PSVI: fix for annotation of attributes in attributeGroup/derived types
+ *
* Revision 1.5 2003/11/21 17:19:30 knoaman
* PSVI update.
*
@@ -160,6 +163,16 @@
private:
+ // set data
+ void set
+ (
+ const bool isRequired
+ , XSConstants::VALUE_CONSTRAINT constraintType
+ , const XMLCh* const constraintValue
+ );
+
+ friend class XSObjectFactory;
+
// -----------------------------------------------------------------------
// Unimplemented constructors and operators
// -----------------------------------------------------------------------
@@ -171,7 +184,10 @@
// -----------------------------------------------------------------------
// data members
// -----------------------------------------------------------------------
- XSAttributeDeclaration* fXSAttributeDeclaration;
+ bool fRequired;
+ XSConstants::VALUE_CONSTRAINT fConstraintType;
+ const XMLCh* fConstraintValue;
+ XSAttributeDeclaration* fXSAttributeDeclaration;
};
inline XSAttributeDeclaration *XSAttributeUse::getAttrDeclaration() const
@@ -179,6 +195,20 @@
return fXSAttributeDeclaration;
}
+inline bool XSAttributeUse::getRequired() const
+{
+ return fRequired;
+}
+
+inline XSConstants::VALUE_CONSTRAINT XSAttributeUse::getConstraintType() const
+{
+ return fConstraintType;
+}
+
+const inline XMLCh *XSAttributeUse::getConstraintValue()
+{
+ return fConstraintValue;
+}
XERCES_CPP_NAMESPACE_END
1.12 +49 -4 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.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- XSObjectFactory.cpp 17 Dec 2003 19:58:25 -0000 1.11
+++ XSObjectFactory.cpp 17 Dec 2003 20:50:35 -0000 1.12
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.12 2003/12/17 20:50:35 knoaman
+ * PSVI: fix for annotation of attributes in attributeGroup/derived types
+ *
* Revision 1.11 2003/12/17 19:58:25 knoaman
* Check for NULL when building XSParticle
*
@@ -580,10 +583,17 @@
SchemaAttDefList& attDefList = (SchemaAttDefList&)
typeInfo->getAttDefList();
for(unsigned int i=0; i<attCount; i++)
{
+ XSAttributeDeclaration* xsAttDecl = 0;
SchemaAttDef& attDef = (SchemaAttDef&) attDefList.getAttDef(i);
- XSAttributeDeclaration* xsAttDecl = addOrFind(&attDef, xsModel);
+
+ if (attDef.getBaseAttDecl())
+ xsAttDecl = addOrFind(attDef.getBaseAttDecl(), xsModel);
+ else
+ xsAttDecl = addOrFind(&attDef, xsModel);
+
XSAttributeUse* attUse = createXSAttributeUse(xsAttDecl, xsModel);
xsAttList->addElement(attUse);
+ processAttUse(&attDef, attUse);
}
}
@@ -678,10 +688,14 @@
XSObjectFactory::createXSWildcard(SchemaAttDef* const attDef,
XSModel* const xsModel)
{
+ XSAnnotation* annot = (attDef->getBaseAttDecl())
+ ? getAnnotationFromModel(xsModel, attDef->getBaseAttDecl())
+ : getAnnotationFromModel(xsModel, attDef);
+
XSWildcard* xsWildcard = new (fMemoryManager) XSWildcard
(
attDef
- , getAnnotationFromModel(xsModel, attDef)
+ , annot
, xsModel
, fMemoryManager
);
@@ -750,11 +764,19 @@
xsAttList = new (fMemoryManager) RefVectorOf<XSAttributeUse>(attCount,
false, fMemoryManager);
for (unsigned int i=0; i < attCount; i++)
{
- XSAttributeDeclaration* xsAttDecl =
addOrFind(attGroupInfo->attributeAt(i), xsModel);
+ SchemaAttDef* attDef = attGroupInfo->attributeAt(i);
+ XSAttributeDeclaration* xsAttDecl = 0;
+
+ if (attDef->getBaseAttDecl())
+ xsAttDecl = addOrFind(attDef->getBaseAttDecl(), xsModel);
+ else
+ xsAttDecl = addOrFind(attDef, xsModel);
+
if (xsAttDecl) // just for sanity
{
- XSAttributeUse* attUse =
createXSAttributeUse(xsAttDecl, xsModel);
+ XSAttributeUse* attUse = createXSAttributeUse(xsAttDecl, xsModel);
xsAttList->addElement(attUse);
+ processAttUse(attDef, attUse);
}
}
}
@@ -951,6 +973,29 @@
}
xsST->setFacetInfo(definedFacets, fixedFacets, xsFacetList, xsMultiFacetList,
patternList);
+}
+
+void XSObjectFactory::processAttUse(SchemaAttDef* const attDef,
+ XSAttributeUse* const xsAttUse)
+{
+ bool isRequired = false;
+ XSConstants::VALUE_CONSTRAINT constraintType = XSConstants::VC_NONE;
+
+ if (attDef->getDefaultType() & XMLAttDef::Default)
+ {
+ constraintType = XSConstants::VC_DEFAULT;
+ }
+ else if (attDef->getDefaultType() & XMLAttDef::Fixed ||
+ attDef->getDefaultType() & XMLAttDef::Required_And_Fixed)
+ {
+ constraintType = XSConstants::VC_FIXED;
+ }
+
+ if (attDef->getDefaultType() == XMLAttDef::Required ||
+ attDef->getDefaultType() == XMLAttDef::Required_And_Fixed)
+ isRequired = true;
+
+ xsAttUse->set(isRequired, constraintType, attDef->getValue());
}
XERCES_CPP_NAMESPACE_END
1.5 +9 -0 xml-xerces/c/src/xercesc/internal/XSObjectFactory.hpp
Index: XSObjectFactory.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSObjectFactory.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XSObjectFactory.hpp 25 Nov 2003 18:11:54 -0000 1.4
+++ XSObjectFactory.hpp 17 Dec 2003 20:50:35 -0000 1.5
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.5 2003/12/17 20:50:35 knoaman
+ * PSVI: fix for annotation of attributes in attributeGroup/derived types
+ *
* Revision 1.4 2003/11/25 18:11:54 knoaman
* Make XSObjectFactory inherit from XMemory. Thanks to David Cargill.
*
@@ -253,6 +256,12 @@
DatatypeValidator* const dv
, XSModel* const xsModel
, XSSimpleTypeDefinition* const xsST
+ );
+
+ void processAttUse
+ (
+ SchemaAttDef* const attDef
+ , XSAttributeUse* const xsAttUse
);
// make XSModel our friend
1.11 +9 -0 xml-xerces/c/src/xercesc/validators/schema/SchemaAttDef.cpp
Index: SchemaAttDef.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaAttDef.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- SchemaAttDef.cpp 25 Nov 2003 18:15:00 -0000 1.10
+++ SchemaAttDef.cpp 17 Dec 2003 20:50:35 -0000 1.11
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.11 2003/12/17 20:50:35 knoaman
+ * PSVI: fix for annotation of attributes in attributeGroup/derived types
+ *
* Revision 1.10 2003/11/25 18:15:00 knoaman
* Serialize enclosing complex type. Thanks to David Cargill.
*
@@ -135,6 +138,7 @@
, fValidity(PSVIDefs::UNKNOWN)
, fValidation(PSVIDefs::NONE)
, fEnclosingCT(0)
+ , fBaseAttDecl(0)
{
}
@@ -153,6 +157,7 @@
, fValidity(PSVIDefs::UNKNOWN)
, fValidation(PSVIDefs::NONE)
, fEnclosingCT(0)
+ , fBaseAttDecl(0)
{
fAttName = new (manager) QName(prefix, localPart, uriId, manager);
}
@@ -175,6 +180,7 @@
, fValidity(PSVIDefs::UNKNOWN)
, fValidation(PSVIDefs::NONE)
, fEnclosingCT(0)
+ , fBaseAttDecl(0)
{
fAttName = new (manager) QName(prefix, localPart, uriId, manager);
}
@@ -193,6 +199,7 @@
, fValidity(other->fValidity)
, fValidation(other->fValidation)
, fEnclosingCT(other->fEnclosingCT)
+ , fBaseAttDecl(other->fBaseAttDecl)
{
QName* otherName = other->getAttName();
fAttName = new (getMemoryManager()) QName(otherName->getPrefix(),
@@ -248,6 +255,7 @@
serEng<<(int)fValidity;
serEng<<(int)fValidation;
serEng<<fEnclosingCT;
+ serEng<<fBaseAttDecl;
}
else
{
@@ -271,6 +279,7 @@
fValidation = (PSVIDefs::Validation)i;
serEng>>fEnclosingCT;
+ serEng>>fBaseAttDecl;
}
}
1.10 +31 -1 xml-xerces/c/src/xercesc/validators/schema/SchemaAttDef.hpp
Index: SchemaAttDef.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaAttDef.hpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- SchemaAttDef.hpp 24 Nov 2003 05:13:41 -0000 1.9
+++ SchemaAttDef.hpp 17 Dec 2003 20:50:35 -0000 1.10
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.10 2003/12/17 20:50:35 knoaman
+ * PSVI: fix for annotation of attributes in attributeGroup/derived types
+ *
* Revision 1.9 2003/11/24 05:13:41 neilg
* update method documentation
*
@@ -262,6 +265,8 @@
DatatypeValidator* getDatatypeValidator() const;
ValueVectorOf<unsigned int>* getNamespaceList() const;
ComplexTypeInfo* getEnclosingCT() const;
+ const SchemaAttDef* getBaseAttDecl() const;
+ SchemaAttDef* getBaseAttDecl();
// -----------------------------------------------------------------------
// Setter methods
@@ -275,6 +280,8 @@
);
void setDatatypeValidator(DatatypeValidator* newDatatypeValidator);
void setAnyDatatypeValidator(DatatypeValidator* newDatatypeValidator);
+ void setBaseAttDecl(SchemaAttDef* const attDef);
+
/*
* @deprecated
*/
@@ -327,6 +334,13 @@
// fValidation
// The type of validation that happened to this attr
//
+ // fBaseAttDecl
+ // The base attribute declaration that this attribute is based on
+ // NOTE: we do not have a notion of attribute use, so in the case
+ // of ref'd attributes and inherited attributes, we make a copy
+ // of the actual attribute declaration. The fBaseAttDecl stores that
+ // declaration, and will be helpful when we build the XSModel (i.e
+ // easy access the XSAnnotation object).
// -----------------------------------------------------------------------
unsigned int fElemId;
QName* fAttName;
@@ -337,6 +351,7 @@
PSVIDefs::Validity fValidity;
PSVIDefs::Validation fValidation;
ComplexTypeInfo* fEnclosingCT;
+ SchemaAttDef* fBaseAttDecl;
};
@@ -474,6 +489,16 @@
return fEnclosingCT;
}
+inline SchemaAttDef* SchemaAttDef::getBaseAttDecl()
+{
+ return fBaseAttDecl;
+}
+
+inline const SchemaAttDef* SchemaAttDef::getBaseAttDecl() const
+{
+ return fBaseAttDecl;
+}
+
// ---------------------------------------------------------------------------
// SchemaAttDef: Setter methods
// ---------------------------------------------------------------------------
@@ -534,6 +559,11 @@
inline void SchemaAttDef::setEnclosingCT(ComplexTypeInfo* complexTypeInfo)
{
fEnclosingCT = complexTypeInfo;
+}
+
+inline void SchemaAttDef::setBaseAttDecl(SchemaAttDef* const attDef)
+{
+ fBaseAttDecl = attDef;
}
XERCES_CPP_NAMESPACE_END
1.102 +13 -2 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.101
retrieving revision 1.102
diff -u -r1.101 -r1.102
--- TraverseSchema.cpp 17 Dec 2003 00:18:40 -0000 1.101
+++ TraverseSchema.cpp 17 Dec 2003 20:50:35 -0000 1.102
@@ -5543,6 +5543,8 @@
refAttDefType,
0, fGrammarPoolMemoryManager);
+ attDef->setBaseAttDecl(refAttDef);
+
if (refAttDefType == XMLAttDef::Fixed) {
if (required && !invalidAttUse) {
attDef->setDefaultType(XMLAttDef::Required_And_Fixed);
@@ -6399,6 +6401,11 @@
newAttDef->setDatatypeValidator(attDef.getDatatypeValidator());
typeInfo->addAttDef(newAttDef);
+
+ if (attDef.getBaseAttDecl())
+ newAttDef->setBaseAttDecl(attDef.getBaseAttDecl());
+ else
+ newAttDef->setBaseAttDecl(&attDef);
}
}
}
@@ -7069,7 +7076,11 @@
typeInfo->setAttWithTypeId(true);
}
- typeInfo->addAttDef(new (fGrammarPoolMemoryManager)
SchemaAttDef(attDef));
+ SchemaAttDef* clonedAttDef = new (fGrammarPoolMemoryManager)
SchemaAttDef(attDef);
+ typeInfo->addAttDef(clonedAttDef);
+
+ if (!clonedAttDef->getBaseAttDecl())
+ clonedAttDef->setBaseAttDecl(attDef);
if (toAttGroup) {
toAttGroup->addAttDef(attDef, true);
1.8 +13 -3
xml-xerces/c/src/xercesc/validators/schema/XercesAttGroupInfo.hpp
Index: XercesAttGroupInfo.hpp
===================================================================
RCS file:
/home/cvs/xml-xerces/c/src/xercesc/validators/schema/XercesAttGroupInfo.hpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- XercesAttGroupInfo.hpp 20 Nov 2003 17:06:05 -0000 1.7
+++ XercesAttGroupInfo.hpp 17 Dec 2003 20:50:35 -0000 1.8
@@ -244,7 +244,12 @@
}
if (toClone) {
- fAttributes->addElement(new (fMemoryManager) SchemaAttDef(toAdd));
+ SchemaAttDef* clonedAttDef = new (fMemoryManager) SchemaAttDef(toAdd);
+
+ if (!clonedAttDef->getBaseAttDecl())
+ clonedAttDef->setBaseAttDecl(toAdd);
+
+ fAttributes->addElement(clonedAttDef);
}
else {
fAttributes->addElement(toAdd);
@@ -259,7 +264,12 @@
}
if (toClone) {
- fAnyAttributes->addElement(new (fMemoryManager) SchemaAttDef(toAdd));
+ SchemaAttDef* clonedAttDef = new (fMemoryManager) SchemaAttDef(toAdd);
+
+ if (!clonedAttDef->getBaseAttDecl())
+ clonedAttDef->setBaseAttDecl(toAdd);
+
+ fAnyAttributes->addElement(clonedAttDef);
}
else {
fAnyAttributes->addElement(toAdd);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]