com.sun.org.apache.xerces.internal.impl.xs.identity.KeyRef

Here are the examples of the java api class com.sun.org.apache.xerces.internal.impl.xs.identity.KeyRef taken from open source projects.

1. XSDKeyrefTraverser#traverse()

Project: openjdk
Source File: XSDKeyrefTraverser.java
View license
void traverse(Element krElem, XSElementDecl element, XSDocumentInfo schemaDoc, SchemaGrammar grammar) {
    // General Attribute Checking
    Object[] attrValues = fAttrChecker.checkAttributes(krElem, false, schemaDoc);
    // create identity constraint
    String krName = (String) attrValues[XSAttributeChecker.ATTIDX_NAME];
    if (krName == null) {
        reportSchemaError("s4s-att-must-appear", new Object[] { SchemaSymbols.ELT_KEYREF, SchemaSymbols.ATT_NAME }, krElem);
        //return this array back to pool
        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
        return;
    }
    QName kName = (QName) attrValues[XSAttributeChecker.ATTIDX_REFER];
    if (kName == null) {
        reportSchemaError("s4s-att-must-appear", new Object[] { SchemaSymbols.ELT_KEYREF, SchemaSymbols.ATT_REFER }, krElem);
        //return this array back to pool
        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
        return;
    }
    UniqueOrKey key = null;
    IdentityConstraint ret = (IdentityConstraint) fSchemaHandler.getGlobalDecl(schemaDoc, XSDHandler.IDENTITYCONSTRAINT_TYPE, kName, krElem);
    // we report an error only when ret != null, and the return type keyref
    if (ret != null) {
        if (ret.getCategory() == IdentityConstraint.IC_KEY || ret.getCategory() == IdentityConstraint.IC_UNIQUE) {
            key = (UniqueOrKey) ret;
        } else {
            reportSchemaError("src-resolve", new Object[] { kName.rawname, "identity constraint key/unique" }, krElem);
        }
    }
    if (key == null) {
        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
        return;
    }
    KeyRef keyRef = new KeyRef(schemaDoc.fTargetNamespace, krName, element.fName, key);
    // add it to the schema, to avoid errors when processing the instance.
    if (traverseIdentityConstraint(keyRef, krElem, schemaDoc, attrValues)) {
        //2 If the {identity-constraint category} is keyref, the cardinality of the {fields} must equal that of the {fields} of the {referenced key}.
        if (key.getFieldCount() != keyRef.getFieldCount()) {
            reportSchemaError("c-props-correct.2", new Object[] { krName, key.getIdentityConstraintName() }, krElem);
        } else {
            // and stuff this in the grammar
            if (grammar.getIDConstraintDecl(keyRef.getIdentityConstraintName()) == null) {
                grammar.addIDConstraintDecl(element, keyRef);
            }
            // also add it to extended map
            final String loc = fSchemaHandler.schemaDocument2SystemId(schemaDoc);
            final IdentityConstraint idc = grammar.getIDConstraintDecl(keyRef.getIdentityConstraintName(), loc);
            if (idc == null) {
                grammar.addIDConstraintDecl(element, keyRef, loc);
            }
            // handle duplicates
            if (fSchemaHandler.fTolerateDuplicates) {
                if (idc != null) {
                    if (idc instanceof KeyRef) {
                        keyRef = (KeyRef) idc;
                    }
                }
                fSchemaHandler.addIDConstraintDecl(keyRef);
            }
        }
    }
    // and put back attributes
    fAttrChecker.returnAttrArray(attrValues, schemaDoc);
}