knoaman 2002/12/12 08:54:38 Modified: c/src/xercesc/validators/schema TraverseSchema.cpp Log: Schema Errata E1-10. Revision Changes Path 1.40 +94 -20 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.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- TraverseSchema.cpp 10 Dec 2002 16:58:22 -0000 1.39 +++ TraverseSchema.cpp 12 Dec 2002 16:54:37 -0000 1.40 @@ -6759,7 +6759,8 @@ unsigned int nameURI = nameURIList->elementAt(i); - if (nameURI != compareURI) { + if (nameURI != compareURI && + nameURI != (unsigned int) fEmptyNamespaceURI) { tmpURIList.addElement(nameURI); } else { @@ -6809,16 +6810,23 @@ return; } - // If the two are negations of different namespace names, then the - // intersection is not expressible. + // If the two are negations of different namespace names, then: + // if one is a negation of absent, then result is negation of namespace + // else intersection is not expressible. if (typeR == XMLAttDef::Any_Other && typeC == XMLAttDef::Any_Other) { QName* qnameR = resultWildCard->getAttName(); if (qnameR->getURI() != compareWildCard->getAttName()->getURI()) { - qnameR->setURI(fEmptyNamespaceURI); - resultWildCard->setType(XMLAttDef::AttTypes_Unknown); + if (qnameR->getURI() == (unsigned int)fEmptyNamespaceURI) { + qnameR->setURI(compareWildCard->getAttName()->getURI()); + } + else if (compareWildCard->getAttName()->getURI() != (unsigned int)fEmptyNamespaceURI) { + + qnameR->setURI(fEmptyNamespaceURI); + resultWildCard->setType(XMLAttDef::AttTypes_Unknown); + } } } } @@ -6878,8 +6886,8 @@ return; } - // If the two are negations of different namespace names, then any must - // be the value + // If the two are negations of different namespace names, then not and + // absent must be the value if (typeR == XMLAttDef::Any_Other && typeC == XMLAttDef::Any_Other) { QName* qnameR = resultWildCard->getAttName(); @@ -6887,15 +6895,27 @@ if (qnameR->getURI() != compareWildCard->getAttName()->getURI()) { qnameR->setURI(fEmptyNamespaceURI); - resultWildCard->setType(XMLAttDef::Any_Any); + resultWildCard->setType(XMLAttDef::Any_Other); } } - // If either O1 or O2 is a pair of not and a namespace name and the other - // is a set, then: - // 1. If the set includes the negated namespace name, then any must be the value. - // 2. If the set does not include the negated namespace name, then whichever of O1 or O2 is a - // pair of not and a namespace name must be the value. + // 5. If either O1 or O2 is a pair of not and a namespace name and the + // other is a set, then: + // 1. If the set includes both the negated namespace name and absent + // then any must be the value. + // 2. If the set includes the negated namespace name but not absent, + // then a pair of not and absent must be the value. + // 3. If the set includes absent but not the negated namespace name, + // then the union is not expressible. + // 4. If the set does not include either the negated namespace or + // absent, then whichever of O1 or O2 is a pair of not and a + // namespace name. + // + // 6. If either O1 or O2 is a pair of not and absent and the other is a + // set, then: + // 1. If the set includes absent then any must be the value. + // 2. If the set does not include absent, then a pair of not and + // absent. if ((typeC == XMLAttDef::Any_Other && typeR == XMLAttDef::Any_List) || (typeR == XMLAttDef::Any_Other && typeC == XMLAttDef::Any_List)) { @@ -6912,16 +6932,70 @@ compareURI = compareWildCard->getAttName()->getURI(); } + // 6. not and absent + if (compareURI == (unsigned int) fEmptyNamespaceURI) { + + if (nameURIList) { - if (nameURIList && nameURIList->containsElement(compareURI)) { + // 6.1 result is any + if (nameURIList->containsElement(compareURI)) { - resultWildCard->setType(XMLAttDef::Any_Any); - attNameR->setURI(fEmptyNamespaceURI); + resultWildCard->setType(XMLAttDef::Any_Any); + attNameR->setURI(fEmptyNamespaceURI); + } + // 6.2 result is not and absent + else if (typeR == XMLAttDef::Any_List){ + + resultWildCard->setType(XMLAttDef::Any_Other); + attNameR->setURI(fEmptyNamespaceURI); + } + } + // 6.2 result is not and absent + else if (typeR == XMLAttDef::Any_List) { + + resultWildCard->setType(XMLAttDef::Any_Other); + attNameR->setURI(fEmptyNamespaceURI); + } } - else if (typeR == XMLAttDef::Any_List) { + // 5. not and namespace + else { + + // 5.3 result is not expressible + if (!nameURIList) { + resultWildCard->setType(XMLAttDef::AttTypes_Unknown); + attNameR->setURI(fEmptyNamespaceURI); + } + else { + bool containsAbsent = + nameURIList->containsElement(fEmptyNamespaceURI); + bool containsNamespace = + nameURIList->containsElement(compareURI); - resultWildCard->setType(XMLAttDef::Any_Other); - attNameR->setURI(compareURI); + // 5.1 result is any + if (containsAbsent && containsNamespace) { + + resultWildCard->setType(XMLAttDef::Any_Any); + attNameR->setURI(fEmptyNamespaceURI); + } + // 5.2 result is not and absent + else if (containsNamespace) { + + resultWildCard->setType(XMLAttDef::Any_Other); + attNameR->setURI(fEmptyNamespaceURI); + } + // 5.3 result is not expressible + else if (containsAbsent) { + + resultWildCard->setType(XMLAttDef::AttTypes_Unknown); + attNameR->setURI(fEmptyNamespaceURI); + } + // 5.4. whichever is not and namespace + else if (typeR == XMLAttDef::Any_List) { + + resultWildCard->setType(XMLAttDef::Any_Other); + attNameR->setURI(compareURI); + } + } } resultWildCard->resetNamespaceList();
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]