Author: amassari
Date: Tue Aug 2 12:11:12 2005
New Revision: 227067
URL: http://svn.apache.org/viewcvs?rev=227067&view=rev
Log:
DOM Level 3 Core: DOMTypeInfo
Modified:
xerces/c/trunk/samples/src/PSVIWriter/PSVIWriterHandlers.cpp
xerces/c/trunk/src/xercesc/dom/DOMTypeInfo.hpp
xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.cpp
xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.hpp
xerces/c/trunk/tests/src/DOM/TypeInfo/TypeInfo.cpp
Modified: xerces/c/trunk/samples/src/PSVIWriter/PSVIWriterHandlers.cpp
URL:
http://svn.apache.org/viewcvs/xerces/c/trunk/samples/src/PSVIWriter/PSVIWriterHandlers.cpp?rev=227067&r1=227066&r2=227067&view=diff
==============================================================================
--- xerces/c/trunk/samples/src/PSVIWriter/PSVIWriterHandlers.cpp (original)
+++ xerces/c/trunk/samples/src/PSVIWriter/PSVIWriterHandlers.cpp Tue Aug 2
12:11:12 2005
@@ -928,7 +928,7 @@
sendElementValue(PSVIUni::fgPrefix, attr->getPrefix());
sendElementValue(PSVIUni::fgNormalizedValue,
attr->getValue());
sendElementValue(PSVIUni::fgSpecified,
translateBool(attr->getSpecified()));
- sendElementValue(PSVIUni::fgAttributeType,
attr->getTypeInfo()->getName());
+ sendElementValue(PSVIUni::fgAttributeType,
attr->getTypeInfo()->getTypeName());
sendElementEmpty(PSVIUni::fgReferences);
sendUnindentedElement(PSVIUni::fgAttribute);
}
@@ -951,7 +951,7 @@
sendElementValue(PSVIUni::fgPrefix, attr->getPrefix());
sendElementValue(PSVIUni::fgNormalizedValue,
attr->getValue());
sendElementValue(PSVIUni::fgSpecified,
translateBool(attr->getSpecified()));
- sendElementValue(PSVIUni::fgAttributeType,
attr->getTypeInfo()->getName());
+ sendElementValue(PSVIUni::fgAttributeType,
attr->getTypeInfo()->getTypeName());
sendElementEmpty(PSVIUni::fgReferences);
sendUnindentedElement(PSVIUni::fgAttribute);
}
Modified: xerces/c/trunk/src/xercesc/dom/DOMTypeInfo.hpp
URL:
http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/dom/DOMTypeInfo.hpp?rev=227067&r1=227066&r2=227067&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/DOMTypeInfo.hpp (original)
+++ xerces/c/trunk/src/xercesc/dom/DOMTypeInfo.hpp Tue Aug 2 12:11:12 2005
@@ -66,35 +66,121 @@
virtual ~DOMTypeInfo() {};
//@}
+ // -----------------------------------------------------------------------
+ // Class Types
+ // -----------------------------------------------------------------------
+ /** @name Public Contants */
+ //@{
+ /**
+ * These are the available values for the derivationMethod parameter used
by the
+ * method <code>DOMTypeInfo::isDerivedFrom()</code>. It is a set of
possible types
+ * of derivation, and the values represent bit positions. If a bit in the
derivationMethod
+ * parameter is set to 1, the corresponding type of derivation will be
taken into account
+ * when evaluating the derivation between the reference type definition
and the other type
+ * definition. When using the isDerivedFrom method, combining all of them
in the
+ * derivationMethod parameter is equivalent to invoking the method for
each of them separately
+ * and combining the results with the OR boolean function. This
specification only defines
+ * the type of derivation for XML Schema.
+ *
+ * In addition to the types of derivation listed below, please note that:
+ * - any type derives from xsd:anyType.
+ * - any simple type derives from xsd:anySimpleType by restriction.
+ * - any complex type does not derive from xsd:anySimpleType by
restriction.
+ *
+ * <p><code>DERIVATION_EXTENSION:</code>
+ * If the document's schema is an XML Schema [XML Schema Part 1], this
constant represents the
+ * derivation by extension. The reference type definition is derived by
extension from the other
+ * type definition if the other type definition can be reached recursively
following the
+ * {base type definition} property from the reference type definition, and
at least one of the
+ * derivation methods involved is an extension.</p>
+ *
+ * <p><code>DERIVATION_LIST:</code>
+ * If the document's schema is an XML Schema [XML Schema Part 1], this
constant represents the list.
+ * The reference type definition is derived by list from the other type
definition if there exists
+ * two type definitions T1 and T2 such as the reference type definition is
derived from T1 by
+ * DERIVATION_RESTRICTION or DERIVATION_EXTENSION, T2 is derived from the
other type definition by
+ * DERIVATION_RESTRICTION, T1 has {variety} list, and T2 is the {item type
definition}. Note that
+ * T1 could be the same as the reference type definition, and T2 could be
the same as the other
+ * type definition.</p>
+ *
+ * <p><code>DERIVATION_RESTRICTION:</code>
+ * If the document's schema is an XML Schema [XML Schema Part 1], this
constant represents the
+ * derivation by restriction if complex types are involved, or a
restriction if simple types are
+ * involved.
+ * The reference type definition is derived by restriction from the other
type definition if the
+ * other type definition is the same as the reference type definition, or
if the other type definition
+ * can be reached recursively following the {base type definition}
property from the reference type
+ * definition, and all the derivation methods involved are restriction.</p>
+ *
+ * <p><code>DERIVATION_UNION:</code>
+ * If the document's schema is an XML Schema [XML Schema Part 1], this
constant represents the union
+ * if simple types are involved.
+ * The reference type definition is derived by union from the other type
definition if there exists
+ * two type definitions T1 and T2 such as the reference type definition is
derived from T1 by
+ * DERIVATION_RESTRICTION or DERIVATION_EXTENSION, T2 is derived from the
other type definition by
+ * DERIVATION_RESTRICTION, T1 has {variety} union, and one of the {member
type definitions} is T2.
+ * Note that T1 could be the same as the reference type definition, and T2
could be the same as the
+ * other type definition.</p>
+ *
+ * @since DOM Level 3
+ *
+ */
+ enum DerivationMethods {
+ DERIVATION_RESTRICTION = 0x001,
+ DERIVATION_EXTENSION = 0x002,
+ DERIVATION_UNION = 0x004,
+ DERIVATION_LIST = 0x008
+ };
+ //@}
+
//@{
// -----------------------------------------------------------------------
// Getter methods
// -----------------------------------------------------------------------
/**
* Returns The name of a type declared for the associated
<code>DOMElement</code>
- * or <code>DOMAttr</code>, or null if undeclared.
- *
- * <p><b>"Experimental - subject to change"</b></p>
+ * or <code>DOMAttr</code>, or null if unknown.
*
* @return The name of a type declared for the associated
<code>DOMElement</code>
- * or <code>DOMAttribute</code>, or null if undeclared.
+ * or <code>DOMAttribute</code>, or null if unknown.
* @since DOM level 3
*/
- virtual const XMLCh* getName() const = 0;
+ virtual const XMLCh* getTypeName() const = 0;
/**
* The namespace of the type declared for the associated
<code>DOMElement</code>
* or <code>DOMAttr</code> or null if the <code>DOMElement</code> does not
have
* declaration or if no namespace information is available.
*
- * <p><b>"Experimental - subject to change"</b></p>
- *
* @return The namespace of the type declared for the associated
<code>DOMElement</code>
* or <code>DOMAttr</code> or null if the <code>DOMElement</code> does not
have
* declaration or if no namespace information is available.
* @since DOM level 3
*/
- virtual const XMLCh* getNamespace() const = 0;
+ virtual const XMLCh* getTypeNamespace() const = 0;
+ //@}
+
+ //@{
+ /**
+ * This method returns if there is a derivation between the reference type
definition,
+ * i.e. the DOMTypeInfo on which the method is being called, and the other
type definition,
+ * i.e. the one passed as parameters.
+ *
+ * @param typeNamespaceArg The namespace of the other type definition.
+ * @param typeNameArg The name of the other type definition.
+ * @param derivationMethod The type of derivation and conditions applied
between two types,
+ * as described in the list of constants provided
in this interface.
+ * @return If the document's schema is a DTD or no schema is associated
with the document,
+ * this method will always return false.
+ * If the document's schema is an XML Schema, the method will true
if the reference
+ * type definition is derived from the other type definition
according to the derivation
+ * parameter. If the value of the parameter is 0 (no bit is set to
1 for the
+ * derivationMethod parameter), the method will return true if the
other type definition
+ * can be reached by recursing any combination of {base type
definition},
+ * {item type definition}, or {member type definitions} from the
reference type definition.
+ * @since DOM level 3
+ */
+ virtual bool isDerivedFrom(const XMLCh* typeNamespaceArg, const XMLCh*
typeNameArg, unsigned long derivationMethod) const = 0;
//@}
};
Modified: xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.cpp
URL:
http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.cpp?rev=227067&r1=227066&r2=227067&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.cpp (original)
+++ xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.cpp Tue Aug 2 12:11:12
2005
@@ -49,7 +49,7 @@
// - [schema specified]=false
}
-const XMLCh* DOMTypeInfoImpl::getName() const {
+const XMLCh* DOMTypeInfoImpl::getTypeName() const {
// if it's a DTD, return the data that was stored
if(!getNumericProperty(PSVI_Schema_Specified))
return fTypeName;
@@ -61,7 +61,7 @@
return fTypeName;
}
-const XMLCh* DOMTypeInfoImpl::getNamespace() const {
+const XMLCh* DOMTypeInfoImpl::getTypeNamespace() const {
// if it's a DTD, return the data that was stored
if(!getNumericProperty(PSVI_Schema_Specified))
return fTypeNamespace;
@@ -71,6 +71,17 @@
if(fMemberTypeName) // we check on the name, as the URI can be NULL
return fMemberTypeNamespace;
return fTypeNamespace;
+}
+
+bool DOMTypeInfoImpl::isDerivedFrom(const XMLCh* typeNamespaceArg, const
XMLCh* typeNameArg, unsigned long derivationMethod) const
+{
+ // if it's a DTD, return false
+ if(!getNumericProperty(PSVI_Schema_Specified))
+ return false;
+ if(XMLString::equals(typeNamespaceArg, getTypeNamespace()) &&
XMLString::equals(typeNameArg, getTypeName()))
+ return true;
+ // TODO: need a pointer to the Grammar object
+ return false;
}
const XMLCh* DOMTypeInfoImpl::getStringProperty(PSVIProperty prop) const {
Modified: xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.hpp
URL:
http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.hpp?rev=227067&r1=227066&r2=227067&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.hpp (original)
+++ xerces/c/trunk/src/xercesc/dom/impl/DOMTypeInfoImpl.hpp Tue Aug 2 12:11:12
2005
@@ -59,82 +59,26 @@
static DOMTypeInfoImpl g_DtdValidatedNOTATIONAttribute;
static DOMTypeInfoImpl g_DtdValidatedENUMERATIONAttribute;
- //@{
// -----------------------------------------------------------------------
- // Getter methods
+ // DOMTypeInfo interface
// -----------------------------------------------------------------------
- /**
- * Returns The name of a type declared for the associated
<code>DOMElement</code>
- * or <code>DOMAttr</code>, or null if undeclared.
- *
- * <p><b>"Experimental - subject to change"</b></p>
- *
- * @return The name of a type declared for the associated
<code>DOMElement</code>
- * or <code>DOMAttribute</code>, or null if undeclared.
- * @since DOM level 3
- */
- virtual const XMLCh* getName() const;
+ virtual const XMLCh* getTypeName() const;
+ virtual const XMLCh* getTypeNamespace() const;
+ virtual bool isDerivedFrom(const XMLCh* typeNamespaceArg, const XMLCh*
typeNameArg, unsigned long derivationMethod) const;
- /**
- * The namespace of the type declared for the associated
<code>DOMElement</code>
- * or <code>DOMAttr</code> or null if the <code>DOMElement</code> does not
have
- * declaration or if no namespace information is available.
- *
- * <p><b>"Experimental - subject to change"</b></p>
- *
- * @return The namespace of the type declared for the associated
<code>DOMElement</code>
- * or <code>DOMAttr</code> or null if the <code>DOMElement</code> does not
have
- * declaration or if no namespace information is available.
- * @since DOM level 3
- */
- virtual const XMLCh* getNamespace() const;
-
- /**
- * Returns the string value of the specified PSVI property associated to a
- * <code>DOMElement</code> or <code>DOMAttr</code>, or null if not
available.
- *
- * <p><b>"Experimental - subject to change"</b></p>
- *
- * @return the string value of the specified PSVI property associated to a
- * <code>DOMElement</code> or <code>DOMAttr</code>, or null if not
available.
- */
+ // -----------------------------------------------------------------------
+ // DOMPSVITypeInfo interface
+ // -----------------------------------------------------------------------
virtual const XMLCh* getStringProperty(PSVIProperty prop) const;
-
- /**
- * Returns the numeric value of the specified PSVI property associated to
a
- * <code>DOMElement</code> or <code>DOMAttr</code>, or 0 if not available.
- *
- * <p><b>"Experimental - subject to change"</b></p>
- *
- * @return the numeric value of the specified PSVI property associated to
a
- * <code>DOMElement</code> or <code>DOMAttr</code>, or 0 if not available.
- */
virtual int getNumericProperty(PSVIProperty prop) const;
- //@}
- //@{
// -----------------------------------------------------------------------
// Setter methods
// -----------------------------------------------------------------------
-
- /**
- * Set the value for a string PSVI property.
- *
- * <p><b>"Experimental - subject to change"</b></p>
- *
- */
virtual void setStringProperty(PSVIProperty prop, const XMLCh* value);
-
- /**
- * Set the value for a numeric PSVI property.
- *
- * <p><b>"Experimental - subject to change"</b></p>
- *
- */
virtual void setNumericProperty(PSVIProperty prop, int value);
- //@}
- private:
+private:
int fBitFields;
const XMLCh* fTypeName;
const XMLCh* fTypeNamespace;
Modified: xerces/c/trunk/tests/src/DOM/TypeInfo/TypeInfo.cpp
URL:
http://svn.apache.org/viewcvs/xerces/c/trunk/tests/src/DOM/TypeInfo/TypeInfo.cpp?rev=227067&r1=227066&r2=227067&view=diff
==============================================================================
--- xerces/c/trunk/tests/src/DOM/TypeInfo/TypeInfo.cpp (original)
+++ xerces/c/trunk/tests/src/DOM/TypeInfo/TypeInfo.cpp Tue Aug 2 12:11:12 2005
@@ -32,17 +32,17 @@
#define DOMTYPEINFOTEST(info, type, uri, line) \
- tmp = XMLString::equals(info->getName(), type) &&
XMLString::equals(info->getNamespace(), uri);\
+ tmp = XMLString::equals(info->getTypeName(), type) &&
XMLString::equals(info->getTypeNamespace(), uri);\
if(!tmp) { \
XERCES_STD_QUALIFIER cerr << "DOMTypeInfo test failed at line, " << line
<< "\nExpected values : typename '" << XMLString::transcode((XMLCh*)type) <<
"', uri '" << XMLString::transcode((XMLCh*)uri); \
XERCES_STD_QUALIFIER cerr << "'\nActual values : typename '"; \
- if(info->getName()) \
- XERCES_STD_QUALIFIER cerr << XMLString::transcode(info->getName()); \
+ if(info->getTypeName()) \
+ XERCES_STD_QUALIFIER cerr <<
XMLString::transcode(info->getTypeName()); \
else \
XERCES_STD_QUALIFIER cerr << "(null)"; \
XERCES_STD_QUALIFIER cerr << "', uri '"; \
- if(info->getNamespace()) \
- XERCES_STD_QUALIFIER cerr <<
XMLString::transcode(info->getNamespace()); \
+ if(info->getTypeNamespace()) \
+ XERCES_STD_QUALIFIER cerr <<
XMLString::transcode(info->getTypeNamespace()); \
else \
XERCES_STD_QUALIFIER cerr << "(null)"; \
XERCES_STD_QUALIFIER cerr << "'\n" << XERCES_STD_QUALIFIER endl; \
@@ -720,7 +720,7 @@
bool TypeInfo::compareDOMTypeInfo(const DOMTypeInfo *info, const XMLCh* type,
const XMLCh* uri) {
- return XMLString::equals(info->getName(), type) &&
XMLString::equals(info->getNamespace(), uri);
+ return XMLString::equals(info->getTypeName(), type) &&
XMLString::equals(info->getTypeNamespace(), uri);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]