[prev in list] [next in list] [prev in thread] [next in thread]
List: xerces-cvs
Subject: svn commit: r1084840 - in
From: mukulg () apache ! org
Date: 2011-03-24 4:22:54
Message-ID: 20110324042254.3039123889B2 () eris ! apache ! org
[Download RAW message or body]
Author: mukulg
Date: Thu Mar 24 04:22:53 2011
New Revision: 1084840
URL: http://svn.apache.org/viewvc?rev=1084840&view=rev
Log:
refactoring schema 1.1 assertions codebase a bit. also moved methods textually within \
a class, and miscellaneous comments & javadocs improvements. i did try to improve the \
readability and maintainibility of the code base involved in this commit.
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apac \
he/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java?rev=1084840&r1=1084839&r2=1084840&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java \
(original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java \
Thu Mar 24 04:22:53 2011 @@ -197,32 +197,14 @@ public class \
XMLAssertPsychopathXPath2Im
Augmentations attrAugs = attributes.getAugmentations(attrIdx);
AttributePSVImpl attrPsvi = \
(AttributePSVImpl)attrAugs.getItem(Constants.ATTRIBUTE_PSVI);
XSSimpleTypeDefinition attrSimpleType = (XSSimpleTypeDefinition) \
attrPsvi.getTypeDefinition();
- final boolean isTypeDerivedFromList = ((XSSimpleType) \
attrSimpleType.getBaseType()).getVariety() == \
XSSimpleType.VARIETY_LIST;
- final boolean isTypeDerivedFromUnion = ((XSSimpleType) \
attrSimpleType.getBaseType()).getVariety() == \
XSSimpleType.VARIETY_UNION;
List attrAssertList = \
fXmlSchemaValidator.getAssertionValidator().getAssertsFromSimpleType(attrSimpleType);
- if (attrAssertList != null) {
+ if (attrAssertList != null) {
+ boolean isTypeDerivedFromList = ((XSSimpleType) \
attrSimpleType.getBaseType()).getVariety() == XSSimpleType.VARIETY_LIST; + \
boolean isTypeDerivedFromUnion = ((XSSimpleType) \
attrSimpleType.getBaseType()).getVariety() == XSSimpleType.VARIETY_UNION; \
for (int assertIdx = 0; assertIdx < attrAssertList.size(); \
assertIdx++) {
XSAssertImpl assertImpl = \
(XSAssertImpl)attrAssertList.get(assertIdx); \
assertImpl.setAttrName(attrQname.localpart);
- if (attrSimpleType.getVariety() == \
XSSimpleTypeDefinition.VARIETY_ATOMIC) {
- // evaluating assertions for "simpleType -> restriction" \
(not derived by union)
- setTypedValueFor$value(attrValue, null, attrSimpleType, \
false);
- AssertionError assertError = evaluateOneAssertion(element, \
assertImpl, attrValue, false, false);
- if (assertError != null) {
- reportAssertionsError(assertError);
- }
- }
- else if (attrSimpleType.getVariety() == \
XSSimpleTypeDefinition.VARIETY_LIST) {
- // evaluating assertions for "simpleType -> list" \
- evaluateAssertionOnSTListValue(element, attrValue, \
assertImpl, false, attrSimpleType.getItemType(), \
isTypeDerivedFromList);
- }
- else if \
(((Boolean)attrAugs.getItem("ASSERT_PROC_NEEDED_FOR_UNION")).booleanValue()) \
{
- // evaluating assertions for "simpleType -> union"
- boolean isAttrValidWithAssertions = \
evaluateAssertionOnSTUnion(element, attrSimpleType, isTypeDerivedFromUnion, \
assertImpl, attrValue, attrAugs);
- if (!isAttrValidWithAssertions) { \
- fXmlSchemaValidator.reportSchemaError("cvc-attribute.3", \
new Object[] {element.rawname, attrQname.localpart, attrValue, \
((XSSimpleTypeDecl)attrSimpleType).getTypeName()});
- }
- }
+ evaluateOneAssertionFromSimpleType(element, attrValue, attrAugs, \
attrSimpleType, isTypeDerivedFromList, isTypeDerivedFromUnion, assertImpl, true, \
attrQname); // evaluate assertions on itemType of xs:list
XSSimpleTypeDefinition attrItemType = \
attrSimpleType.getItemType(); if (isTypeDerivedFromList && attrItemType != null) {
@@ -295,199 +277,75 @@ public class XMLAssertPsychopathXPath2Im
} // processAllAssertionsOnElement
-
- /*
- * Determine "string value" of XPath2 context variable $value.
- */
- private String getStringValueOf$value(ElementPSVI pElemPSVI) throws DOMException \
{
-
- // there could be adjacent text nodes in a DOM tree. merge them to get the \
value.
- NodeList childList = fCurrentAssertDomNode.getChildNodes();
- StringBuffer textValueContents = new StringBuffer();
- final int childListLength = childList.getLength();
- int textChildCount = 0;
- // we are only interested in text & element nodes. store count of them in \
this variable.
- int effectiveChildNodeCount = 0;
- for (int childNodeIndex = 0; childNodeIndex < childListLength; \
childNodeIndex++) {
- Node node = childList.item(childNodeIndex);
- short nodeType = node.getNodeType();
- if (nodeType == Node.TEXT_NODE) {
- textChildCount++;
- effectiveChildNodeCount++;
- textValueContents.append(node.getNodeValue());
- }
- else if (nodeType == Node.ELEMENT_NODE) {
- effectiveChildNodeCount++;
- }
- }
-
- String strValueOf$value = "";
-
- if (textChildCount == effectiveChildNodeCount) {
- // the DOM tree we are inspecting has simple content. therefore we can \
find the desired string value.
- XSElementDeclaration elemDecl = pElemPSVI.getElementDeclaration();
- if ((elemDecl.getTypeDefinition()).derivedFrom(SchemaSymbols.URI_SCHEMAFORSCHEMA, \
SchemaSymbols.ATTVAL_STRING, XSConstants.DERIVATION_RESTRICTION)) {
- // if element's schema type is derived by restriction from \
xs:string, white-space normalization is not needed for the
- // string value for context variable $value.
- strValueOf$value = textValueContents.toString();
- }
- else {
- // white-space normalization is needed for the string value of \
$value in case of derivation from non xs:string atomic types
- strValueOf$value = XMLChar.trim(textValueContents.toString());
- }
- }
- else {
- // the DOM tree we are inspecting has 'mixed/element only' content.
- strValueOf$value = null;
- }
-
- return strValueOf$value;
-
- } // getStringValueOf$value
-
-
+
/*
- * Evaluate assertions on a "complex type".
+ * Evaluate assertions on a "simple type" on elements.
*/
- private void evaluateAssertionsFromAComplexType(QName element, List assertions, \
String value, Augmentations augs) throws Exception {
-
- if (value != null) {
- // complex type with simple content
- setTypedValueFor$value(value, null, null, false);
- } else {
- // complex type with complex content. set xpath context variable $value \
to an empty sequence.
- fXpath2DynamicContext.set_variable(new \
org.eclipse.wst.xml.xpath2.processor.internal.types.QName("value"), \
getXPath2ResultSequence(new ArrayList()));
- }
+ private void evaluateAssertionsFromASimpleType(QName element, List assertions, \
String value, Augmentations augs) throws Exception { +
+ XSSimpleTypeDefinition simpleTypeDefn = (XSSimpleTypeDefinition) \
((ElementPSVI) augs.getItem(Constants.ELEMENT_PSVI)).getTypeDefinition(); + \
boolean isTypeDerivedFromList = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == XSSimpleType.VARIETY_LIST; + \
boolean isTypeDerivedFromUnion = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == XSSimpleType.VARIETY_UNION;
- XSObjectList assertList = (XSObjectList) assertions;
+ Vector assertList = (Vector) assertions;
for (int assertIdx = 0; assertIdx < assertList.size(); assertIdx++) {
XSAssertImpl assertImpl = (XSAssertImpl) assertList.get(assertIdx);
- String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace(); \
+ String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace();
if (xPathDefaultNamespace != null) {
fXpath2DynamicContext.add_namespace(null, xPathDefaultNamespace);
}
- // NOTE: asserts from attributes are not evaluated here. they are \
evaluated in method startElement -> evaluateAssertsFromAttributes.
- if (assertImpl.getType() == XSConstants.ASSERTION) {
- // is an xs:assert component
- AssertionError assertError = evaluateOneAssertion(element, \
assertImpl, value, true, false);
- if (assertError != null) {
- reportAssertionsError(assertError);
- }
- }
- else if (assertImpl.getAttrName() == null) {
- // complex type with simple content
- XSSimpleTypeDefinition simpleTypeDefn = null;
- XSTypeDefinition xsTypeDefn = assertImpl.getTypeDefinition(); \
- if (xsTypeDefn instanceof XSComplexTypeDefinition) {
- simpleTypeDefn = ((XSComplexTypeDefinition) \
xsTypeDefn).getSimpleType();
- }
- else {
- simpleTypeDefn = (XSSimpleTypeDefinition) xsTypeDefn;
- }
- ElementPSVI elemPSVI = (ElementPSVI) \
augs.getItem(Constants.ELEMENT_PSVI);
- XSComplexTypeDefinition complexTypeDef = \
(XSComplexTypeDefinition)elemPSVI.getTypeDefinition();
- if (XSTypeHelper.isComplexTypeDerivedFromSTListByExt(complexTypeDef)) \
{
- // reassign value to simple type instance
- simpleTypeDefn = \
(XSSimpleTypeDefinition)complexTypeDef.getBaseType();
- }
- final boolean isTypeDerivedFromList = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == \
XSSimpleType.VARIETY_LIST;
- final boolean isTypeDerivedFromUnion = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == \
XSSimpleType.VARIETY_UNION;
- if (simpleTypeDefn.getVariety() == \
XSSimpleTypeDefinition.VARIETY_ATOMIC) {
- // evaluating assertions for "simpleType -> restriction" (not \
derived by union)
- setTypedValueFor$value(value, null, simpleTypeDefn, false);
- AssertionError assertError = evaluateOneAssertion(element, \
assertImpl, value, false, false);
- if (assertError != null) {
- reportAssertionsError(assertError);
- }
- }
- else if (simpleTypeDefn.getVariety() == \
XSSimpleTypeDefinition.VARIETY_LIST) {
- // evaluating assertions for "simpleType -> list" \
- evaluateAssertionOnSTListValue(element, value, assertImpl, \
false, simpleTypeDefn.getItemType(), isTypeDerivedFromList);
- }
- else if (((Boolean) \
augs.getItem("ASSERT_PROC_NEEDED_FOR_UNION")).booleanValue()) {
- // evaluating assertions for "simpleType -> union"
- boolean isElemValidWithAssertions = \
evaluateAssertionOnSTUnion(element, simpleTypeDefn, isTypeDerivedFromUnion, \
assertImpl, value, augs);
- if (!isElemValidWithAssertions) {
- fXmlSchemaValidator.reportSchemaError("cvc-type.3.1.3", new \
Object[] {element.rawname, value});
- }
- }
- // evaluate assertions on itemType of xs:list
- XSSimpleTypeDefinition listItemType = simpleTypeDefn.getItemType();
- if (isTypeDerivedFromList && listItemType != null) {
- evaluateAssertsFromItemTypeOfSTList(element, listItemType, \
value);
- }
- }
+ evaluateOneAssertionFromSimpleType(element, value, augs, simpleTypeDefn, \
isTypeDerivedFromList, isTypeDerivedFromUnion, assertImpl, false, null); }
-
- } // evaluateAssertionsFromAComplexType
-
+ // evaluate assertions on itemType of xs:list
+ if (isTypeDerivedFromList && simpleTypeDefn.getItemType() != null) {
+ evaluateAssertsFromItemTypeOfSTList(element, \
simpleTypeDefn.getItemType(), value); + }
+
+ } // evaluateAssertionsFromASimpleType
+
/*
- * Evaluate assertions on a "simple type" on elements.
+ * Evaluate one assertion instance for a simpleType (this assertion could be \
from an attribute, simpleType on element or a complexType with simple \
content).
*/
- private Augmentations evaluateAssertionsFromASimpleType(QName element, List \
assertions, String value, Augmentations augs) throws Exception {
-
- // initially PSVI object to be returned
- ElementPSVI elemPSVI = (ElementPSVI) augs.getItem(Constants.ELEMENT_PSVI);
+ private void evaluateOneAssertionFromSimpleType(QName element, String value, \
Augmentations augs, XSSimpleTypeDefinition simpleTypeDefn, boolean \
isTypeDerivedFromList, boolean isTypeDerivedFromUnion, + \
XSAssertImpl assertImpl, boolean isAttribute, QName attrQname) throws Exception {
- // find the itemType and memberTypes of xs:list and xs:union respectively \
(only one of these will be applicable)
- XSSimpleTypeDefinition itemType = null;
- XSObjectList memberTypes = null;
- XSSimpleTypeDefinition simpleTypeDefn = null;
- if (elemPSVI.getTypeDefinition().getTypeCategory() == \
XSTypeDefinition.SIMPLE_TYPE) {
- simpleTypeDefn = (XSSimpleTypeDefinition) elemPSVI.getTypeDefinition();
- itemType = simpleTypeDefn.getItemType();
- if (itemType == null) {
- memberTypes = simpleTypeDefn.getMemberTypes();
- }
- }
-
- final boolean isTypeDerivedFromList = ((XSSimpleType) \
elemPSVI.getTypeDefinition().getBaseType()).getVariety() == \
XSSimpleType.VARIETY_LIST;
- final boolean isTypeDerivedFromUnion = ((XSSimpleType) \
elemPSVI.getTypeDefinition().getBaseType()).getVariety() == \
XSSimpleType.VARIETY_UNION;
- // process assertions from a simple type definition
- Vector assertList = (Vector) assertions;
- final int assertListLength = assertList.size();
- for (int assertIdx = 0; assertIdx < assertListLength; assertIdx++) {
- XSAssertImpl assertImpl = (XSAssertImpl) assertList.get(assertIdx);
- String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace();
- if (xPathDefaultNamespace != null) {
- fXpath2DynamicContext.add_namespace(null, xPathDefaultNamespace);
- }
- if (memberTypes != null && memberTypes.getLength() == 0) {
- // evaluating assertions for "simpleType -> restriction" (not \
derived by union)
- setTypedValueFor$value(value, null, null, false);
- AssertionError assertError = evaluateOneAssertion(element, \
assertImpl, value, false, false);
- if (assertError != null) {
- reportAssertionsError(assertError);
- }
+ if (simpleTypeDefn.getVariety() == XSSimpleTypeDefinition.VARIETY_ATOMIC) {
+ // evaluating assertions for "simpleType -> restriction" (not derived by \
union) + if (isAttribute) {
+ setTypedValueFor$value(value, null, simpleTypeDefn, false);
}
- else if (itemType != null) {
- // evaluating assertions for "simpleType -> list"
- evaluateAssertionOnSTListValue(element, value, assertImpl, false, \
itemType, isTypeDerivedFromList);
- }
- else if (((Boolean) \
augs.getItem("ASSERT_PROC_NEEDED_FOR_UNION")).booleanValue()) {
- // evaluating assertions for "simpleType -> union"
- boolean isElemValidWithAssertions = \
evaluateAssertionOnSTUnion(element, simpleTypeDefn, isTypeDerivedFromUnion, \
assertImpl, value, augs);
- if (!isElemValidWithAssertions) {
- fXmlSchemaValidator.reportSchemaError("cvc-type.3.1.3", new \
Object[] {element.rawname, value});
- }
+ else {
+ setTypedValueFor$value(value, null, null, false);
}
+ AssertionError assertError = evaluateOneAssertion(element, assertImpl, \
value, false, false); + if (assertError != null) {
+ reportAssertionsError(assertError);
+ }
}
-
- // evaluate assertions on itemType of xs:list
- if (isTypeDerivedFromList && itemType != null) {
- evaluateAssertsFromItemTypeOfSTList(element, itemType, value);
+ else if (simpleTypeDefn.getVariety() == XSSimpleTypeDefinition.VARIETY_LIST) \
{ + // evaluating assertions for "simpleType -> list"
+ evaluateAssertionOnSTListValue(element, value, assertImpl, false, \
simpleTypeDefn.getItemType(), isTypeDerivedFromList); + }
+ else if (((Boolean)augs.getItem("ASSERT_PROC_NEEDED_FOR_UNION")).booleanValue()) \
{ + // evaluating assertions for "simpleType -> union"
+ boolean isValueValidWithSTUnion = evaluateAssertionOnSTUnion(element, \
simpleTypeDefn, isTypeDerivedFromUnion, assertImpl, value, augs); + if \
(!isValueValidWithSTUnion) { + if (isAttribute) {
+ fXmlSchemaValidator.reportSchemaError("cvc-attribute.3", new \
Object[] {element.rawname, attrQname.localpart, value, \
((XSSimpleTypeDecl)simpleTypeDefn).getTypeName()}); + }
+ else {
+ fXmlSchemaValidator.reportSchemaError("cvc-type.3.1.3", new \
Object[] {element.rawname, value}); + }
+ }
}
- return augs;
-
- } // evaluateAssertionsFromASimpleType
+ } // evaluateOneAssertionFromSimpleType
/*
- * Evaluate assertions from itemType (having variety 'atomic') of xs:list. This \
method is used to evaluate assertions from elements
- * with simple content, and simpleType definitions from attributes.
+ * Evaluate assertions from itemType with variety 'atomic' on a \
simpleType->list.
*/
private void evaluateAssertsFromItemTypeOfSTList(QName element, \
XSSimpleTypeDefinition listItemType, String value) throws Exception {
@@ -581,6 +439,110 @@ public class XMLAssertPsychopathXPath2Im
/*
+ * Evaluate assertions on a "complex type".
+ */
+ private void evaluateAssertionsFromAComplexType(QName element, List assertions, \
String value, Augmentations augs) throws Exception { +
+ if (value != null) {
+ // complex type with simple content
+ setTypedValueFor$value(value, null, null, false);
+ } else {
+ // complex type with complex content. set xpath context variable $value \
to an empty sequence. + fXpath2DynamicContext.set_variable(new \
org.eclipse.wst.xml.xpath2.processor.internal.types.QName("value"), \
getXPath2ResultSequence(new ArrayList())); + }
+
+ XSObjectList assertList = (XSObjectList) assertions;
+ for (int assertIdx = 0; assertIdx < assertList.size(); assertIdx++) {
+ XSAssertImpl assertImpl = (XSAssertImpl) assertList.get(assertIdx);
+ String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace(); \
+ if (xPathDefaultNamespace != null) {
+ fXpath2DynamicContext.add_namespace(null, xPathDefaultNamespace);
+ }
+ // NOTE: asserts from attributes are not evaluated here. they are \
evaluated in method startElement -> evaluateAssertsFromAttributes. + if \
(assertImpl.getType() == XSConstants.ASSERTION) { + // is an xs:assert \
component + AssertionError assertError = evaluateOneAssertion(element, \
assertImpl, value, true, false); + if (assertError != null) {
+ reportAssertionsError(assertError);
+ }
+ }
+ else if (assertImpl.getAttrName() == null) {
+ // complex type with simple content
+ XSSimpleTypeDefinition simpleTypeDefn = null;
+ XSTypeDefinition xsTypeDefn = assertImpl.getTypeDefinition(); \
+ if (xsTypeDefn instanceof XSComplexTypeDefinition) {
+ simpleTypeDefn = ((XSComplexTypeDefinition) \
xsTypeDefn).getSimpleType(); + }
+ else {
+ simpleTypeDefn = (XSSimpleTypeDefinition) xsTypeDefn;
+ }
+ ElementPSVI elemPSVI = (ElementPSVI) \
augs.getItem(Constants.ELEMENT_PSVI); + XSComplexTypeDefinition \
complexTypeDef = (XSComplexTypeDefinition)elemPSVI.getTypeDefinition(); + \
if (XSTypeHelper.isComplexTypeDerivedFromSTList(complexTypeDef, \
XSConstants.DERIVATION_EXTENSION)) { + // reassign value to simple \
type instance + simpleTypeDefn = \
(XSSimpleTypeDefinition)complexTypeDef.getBaseType(); + }
+ boolean isTypeDerivedFromList = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == XSSimpleType.VARIETY_LIST; + \
boolean isTypeDerivedFromUnion = ((XSSimpleType) \
simpleTypeDefn.getBaseType()).getVariety() == XSSimpleType.VARIETY_UNION; + \
evaluateOneAssertionFromSimpleType(element, value, augs, simpleTypeDefn, \
isTypeDerivedFromList, isTypeDerivedFromUnion, assertImpl, false, null); \
+ // evaluate assertions on itemType of xs:list
+ XSSimpleTypeDefinition listItemType = simpleTypeDefn.getItemType();
+ if (isTypeDerivedFromList && listItemType != null) {
+ evaluateAssertsFromItemTypeOfSTList(element, listItemType, \
value); + }
+ }
+ }
+
+ } // evaluateAssertionsFromAComplexType
+
+
+ /*
+ * Method to evaluate an assertion. Returns the evaluation error details in an \
AssertionError object. + */
+ private AssertionError evaluateOneAssertion(QName element, XSAssertImpl \
assertImpl, String value, boolean xPathContextExists, boolean isList) { +
+ AssertionError assertionError = null;
+
+ try {
+ XPath xp = assertImpl.getCompiledXPath();
+
+ boolean result;
+ if ((value == null) ||
+ (xPathContextExists == true)) {
+ result = fAbstrPsychopathImpl.evaluateXPathExpr(xp, \
fCurrentAssertDomNode); + }
+ else {
+ // XPath context is "undefined"
+ result = fAbstrPsychopathImpl.evaluateXPathExpr(xp, null);
+ }
+
+ if (!result) {
+ // assertion evaluation is false
+ assertionError = new AssertionError("cvc-assertion.3.13.4.1", \
element, assertImpl, value, isList); + }
+ }
+ catch (DynamicError ex) {
+ if (ex.code().equals("XPDY0002")) {
+ // ref: http://www.w3.org/TR/xpath20/#eval_context
+ assertionError = new AssertionError("cvc-assertions-valid-context", \
element, assertImpl, value, isList); + }
+ else {
+ assertionError = new AssertionError("cvc-assertion.3.13.4.1", \
element, assertImpl, value, isList); + }
+ }
+ catch (StaticError ex) {
+ assertionError = new AssertionError("cvc-assertion.3.13.4.1", element, \
assertImpl, value, isList); + }
+ catch(Exception ex) {
+ assertionError = new AssertionError("cvc-assertion.3.13.4.1", element, \
assertImpl, value, isList); + }
+
+ return assertionError;
+
+ } // evaluateOneAssertion
+
+
+ /*
* Determine if an validation episode must fail due to assertions evaluation for \
"simpleType -> union" member types.
*/
private boolean isValidationFailedForSTUnion(XSObjectList memberTypes, QName \
element, String value, boolean isAttribute, Augmentations augs) { @@ -592,7 +554,7 @@ \
public class XMLAssertPsychopathXPath2Im
XSSimpleTypeDefinition memType = (XSSimpleTypeDefinition) \
memberTypes.item(memberTypeIdx);
// check for assertions on types in an non-schema namespace
- if (!SchemaSymbols.URI_SCHEMAFORSCHEMA.equals(memType.getNamespace()) && \
simpleTypeHasAsserts(memType)) { + if \
(!SchemaSymbols.URI_SCHEMAFORSCHEMA.equals(memType.getNamespace()) && \
XSTypeHelper.simpleTypeHasAsserts(memType)) {
XSObjectList memberTypeFacets = memType.getMultiValueFacets();
final int memberTypeFacetsLength = memberTypeFacets.getLength();
for (int memberTypeFacetIdx = 0; memberTypeFacetIdx < \
memberTypeFacetsLength; memberTypeFacetIdx++) { @@ -641,25 +603,26 @@ public class \
XMLAssertPsychopathXPath2Im
/*
- * Check if a simple type has assertion facets.
+ * Find the actual schema type of "list item" instance if the "item type" of \
list has variety union.
*/
- private boolean simpleTypeHasAsserts(XSSimpleTypeDefinition simpleType) {
-
- boolean simpleTypehasAsserts = false;
+ private XSSimpleTypeDefinition getActualListItemTypeForVarietyUnion(XSObjectList \
memberTypes, String listItemStrValue) { +
+ XSSimpleTypeDefinition listItemType = null;
- XSObjectList simpleTypeFacets = simpleType.getMultiValueFacets();
- final int simpleTypeFacetsLength = simpleTypeFacets.getLength();
- for (int facetIdx = 0; facetIdx < simpleTypeFacetsLength; facetIdx++) {
- XSMultiValueFacet facet = (XSMultiValueFacet) \
simpleTypeFacets.item(facetIdx);
- if (facet.getFacetKind() == XSSimpleTypeDefinition.FACET_ASSERT && \
facet.getAsserts().size() > 0) {
- simpleTypehasAsserts = true;
- break;
- }
+ // iterate the member types of union in order, to find that which schema \
type can successfully validate an atomic value first + final int \
memberTypesLength = memberTypes.getLength(); + for (int memTypeIdx = 0; \
memTypeIdx < memberTypesLength; memTypeIdx++) { + XSSimpleType \
memSimpleType = (XSSimpleType) memberTypes.item(memTypeIdx); + if \
(XSTypeHelper.isValueValidForASimpleType(listItemStrValue, memSimpleType)) { + \
// no more memberTypes need to be checked + listItemType = \
memSimpleType; + break;
+ }
}
- return simpleTypehasAsserts;
-
- } // simpleTypeHasAsserts
+ return listItemType;
+
+ } // getActualListItemTypeForVarietyUnion
/*
@@ -673,52 +636,56 @@ public class XMLAssertPsychopathXPath2Im
fCurrentAssertDomNode.appendChild(fAssertDocument.createTextNode(new \
String(text.ch, text.offset, text.length))); }
}
+
-
/*
- * Method to evaluate an assertion. Returns the evaluation error details in an \
AssertionError object. + * Determine "string value" of XPath2 context variable \
$value.
*/
- private AssertionError evaluateOneAssertion(QName element, XSAssertImpl \
assertImpl, String value, boolean xPathContextExists, boolean isList) \
{
-
- AssertionError assertionError = null;
+ private String getStringValueOf$value(ElementPSVI pElemPSVI) throws DOMException \
{
- try {
- XPath xp = assertImpl.getCompiledXPath();
-
- boolean result;
- if ((value == null) ||
- (xPathContextExists == true)) {
- result = fAbstrPsychopathImpl.evaluateXPathExpr(xp, \
fCurrentAssertDomNode);
- }
- else {
- // XPath context is "undefined"
- result = fAbstrPsychopathImpl.evaluateXPathExpr(xp, null);
+ // there could be adjacent text nodes in a DOM tree. merge them to get the \
value. + NodeList childList = fCurrentAssertDomNode.getChildNodes();
+ StringBuffer textValueContents = new StringBuffer();
+ final int childListLength = childList.getLength();
+ int textChildCount = 0;
+ // we are only interested in text & element nodes. store count of them in \
this variable. + int effectiveChildNodeCount = 0;
+ for (int childNodeIndex = 0; childNodeIndex < childListLength; \
childNodeIndex++) { + Node node = childList.item(childNodeIndex);
+ short nodeType = node.getNodeType();
+ if (nodeType == Node.TEXT_NODE) {
+ textChildCount++;
+ effectiveChildNodeCount++;
+ textValueContents.append(node.getNodeValue());
}
-
- if (!result) {
- // assertion evaluation is false
- assertionError = new AssertionError("cvc-assertion.3.13.4.1", \
element, assertImpl, value, isList); + else if (nodeType == \
Node.ELEMENT_NODE) { + effectiveChildNodeCount++;
}
}
- catch (DynamicError ex) {
- if (ex.code().equals("XPDY0002")) {
- // ref: http://www.w3.org/TR/xpath20/#eval_context
- assertionError = new AssertionError("cvc-assertions-valid-context", \
element, assertImpl, value, isList); +
+ String strValueOf$value = "";
+
+ if (textChildCount == effectiveChildNodeCount) {
+ // the DOM tree we are inspecting has simple content. therefore we can \
find the desired string value. + XSElementDeclaration elemDecl = \
pElemPSVI.getElementDeclaration(); + if \
((elemDecl.getTypeDefinition()).derivedFrom(SchemaSymbols.URI_SCHEMAFORSCHEMA, \
SchemaSymbols.ATTVAL_STRING, XSConstants.DERIVATION_RESTRICTION)) { + \
// if element's schema type is derived by restriction from xs:string, white-space \
normalization is not needed for the + // string value for context \
variable $value. + strValueOf$value = textValueContents.toString();
}
else {
- assertionError = new AssertionError("cvc-assertion.3.13.4.1", \
element, assertImpl, value, isList);
- }
- }
- catch (StaticError ex) {
- assertionError = new AssertionError("cvc-assertion.3.13.4.1", element, \
assertImpl, value, isList); + // white-space normalization is needed \
for the string value of $value in case of derivation from non xs:string atomic types \
+ strValueOf$value = XMLChar.trim(textValueContents.toString()); + \
} }
- catch(Exception ex) {
- assertionError = new AssertionError("cvc-assertion.3.13.4.1", element, \
assertImpl, value, isList); + else {
+ // the DOM tree we are inspecting has 'mixed/element only' content.
+ strValueOf$value = null;
}
- return assertionError;
+ return strValueOf$value;
- } // evaluateOneAssertion
+ } // getStringValueOf$value
/*
@@ -913,29 +880,6 @@ public class XMLAssertPsychopathXPath2Im
return xpath2Seq;
} // getXPath2ResultSequence
-
-
- /*
- * Find the actual schema type of "list item" instance if the "item type" of \
list has variety union.
- */
- private XSSimpleTypeDefinition getActualListItemTypeForVarietyUnion(XSObjectList \
memberTypes, String listItemStrValue) {
-
- XSSimpleTypeDefinition listItemType = null;
-
- // iterate the member types of union in order, to find that which schema \
type can successfully validate an atomic value first
- final int memberTypesLength = memberTypes.getLength();
- for (int memTypeIdx = 0; memTypeIdx < memberTypesLength; memTypeIdx++) {
- XSSimpleType memSimpleType = (XSSimpleType) memberTypes.item(memTypeIdx);
- if (XSTypeHelper.isValueValidForASimpleType(listItemStrValue, \
memSimpleType)) {
- // no more memberTypes need to be checked
- listItemType = memSimpleType;
- break;
- }
- }
-
- return listItemType;
-
- } // getActualListItemTypeForVarietyUnion
/*
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apac \
he/xerces/impl/xs/XSDAssertionValidator.java?rev=1084840&r1=1084839&r2=1084840&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java \
(original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java \
Thu Mar 24 04:22:53 2011 @@ -174,7 +174,7 @@ public class XSDAssertionValidator {
XSObjectListImpl complexTypeAsserts = new XSObjectListImpl();
- XSObjectList primaryAssertions = complexTypeDef.getAssertions();
+ XSObjectList primaryAssertions = complexTypeDef.getAssertions(); // \
assertions stored in the traverser layer
if (primaryAssertions.getLength() > 0) {
for (int assertIdx = 0; assertIdx < primaryAssertions.getLength(); \
assertIdx++) { @@ -193,7 +193,7 @@ public class XSDAssertionValidator {
complexTypeAsserts.addXSObject((XSAssert) \
simpleContentAsserts.get(assertIdx)); }
}
- else if \
(XSTypeHelper.isComplexTypeDerivedFromSTListByExt(complexTypeDef)) { + \
else if (XSTypeHelper.isComplexTypeDerivedFromSTList(complexTypeDef, \
XSConstants.DERIVATION_EXTENSION)) {
// add assertions from the list->itemType of base schema simple type
Vector baseItemTypeAsserts = \
XSTypeHelper.getAssertsFromSimpleType(((XSSimpleTypeDefinition)complexTypeDef.getBaseType()).getItemType());
for (int assertIdx = 0; assertIdx < baseItemTypeAsserts.size(); \
assertIdx++) { @@ -202,10 +202,9 @@ public class XSDAssertionValidator {
}
}
-
// find assertions from attributes of a complex type, and add them to the \
parent assertions list
XSObjectListImpl attrAsserts = getAssertsFromAttributes(attributes);
- final int attrAssertCount = attrAsserts.getLength();
+ int attrAssertCount = attrAsserts.getLength();
for (int attrAssertIdx = 0; attrAssertIdx < attrAssertCount; \
attrAssertIdx++) {
complexTypeAsserts.addXSObject(attrAsserts.item(attrAssertIdx));
}
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apac \
he/xerces/impl/xs/util/XSTypeHelper.java?rev=1084840&r1=1084839&r2=1084840&view=diff \
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java \
(original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java \
Thu Mar 24 04:22:53 2011 @@ -34,7 +34,6 @@ import org.apache.xerces.impl.xs.XSMessa
import org.apache.xerces.util.XMLChar;
import org.apache.xerces.xni.NamespaceContext;
import org.apache.xerces.xs.XSComplexTypeDefinition;
-import org.apache.xerces.xs.XSConstants;
import org.apache.xerces.xs.XSMultiValueFacet;
import org.apache.xerces.xs.XSObjectList;
import org.apache.xerces.xs.XSSimpleTypeDefinition;
@@ -50,8 +49,7 @@ import org.apache.xerces.xs.XSTypeDefini
*/
public class XSTypeHelper {
- private static final String EMPTY_STRING = "".intern();
-
+ private static final String EMPTY_STRING = "".intern();
/*
* Checks if the two schema type components are identical.
@@ -195,6 +193,28 @@ public class XSTypeHelper {
/*
+ * Check if a simple type has assertion facets.
+ */
+ public static boolean simpleTypeHasAsserts(XSSimpleTypeDefinition simpleType) {
+
+ boolean simpleTypehasAsserts = false;
+
+ XSObjectList simpleTypeFacets = simpleType.getMultiValueFacets();
+ final int simpleTypeFacetsLength = simpleTypeFacets.getLength();
+ for (int facetIdx = 0; facetIdx < simpleTypeFacetsLength; facetIdx++) {
+ XSMultiValueFacet facet = (XSMultiValueFacet) \
simpleTypeFacets.item(facetIdx); + if (facet.getFacetKind() == \
XSSimpleTypeDefinition.FACET_ASSERT && facet.getAsserts().size() > 0) { + \
simpleTypehasAsserts = true; + break;
+ }
+ }
+
+ return simpleTypehasAsserts;
+
+ } // simpleTypeHasAsserts
+
+
+ /*
* Find if a list contains a specified schema type.
*/
public static boolean isListContainsType(List typeList, XSTypeDefinition \
targetType) { @@ -212,15 +232,14 @@ public class XSTypeHelper {
/*
- * Find if a complexType is derived by extension from a simpleType->list \
component. + * Find if a complexType is derived from a simpleType->list \
component.
*/
- public static boolean \
isComplexTypeDerivedFromSTListByExt(XSComplexTypeDefinition complexTypeDef) { + \
public static boolean isComplexTypeDerivedFromSTList(XSComplexTypeDefinition \
complexTypeDef, short derivationMethod) {
- return complexTypeDef.getDerivationMethod() == \
XSConstants.DERIVATION_EXTENSION &&
- complexTypeDef.getBaseType() instanceof XSSimpleTypeDefinition &&
+ return complexTypeDef.getDerivationMethod() == derivationMethod && \
complexTypeDef.getBaseType() instanceof XSSimpleTypeDefinition &&
((XSSimpleTypeDefinition)complexTypeDef.getBaseType()).getVariety() \
== XSSimpleTypeDefinition.VARIETY_LIST;
- } // isComplexTypeDerivedFromSTListByExt
+ } // isComplexTypeDerivedFromSTList
/*
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic