CompositeDataSourceImpl::OnUnassert(nsIRDFResource* aSource,
CompositeDataSourceImpl::OnUnassert(nsIRDFDataSource* aDataSource, nsIRDFResource* aSource,
CompositeDataSourceImpl::OnUnassert(nsIRDFResource* aSource,                                    nsIRDFResource* aProperty,                                    nsIRDFNode* aTarget){    // Make sure that the un-assertion doesn't just unmask the    // same assertion in a different datasource.    //    // XXX We could make this more efficient if we knew _which_    // datasource actually served up the OnAssert(): we could use    // HasAssertionN() to only search datasources _before_ the    // datasource that coughed up the assertion.    nsresult rv;	if (mAllowNegativeAssertions == PR_TRUE)	{   		PRBool hasAssertion;		rv = HasAssertion(aSource, aProperty, aTarget, PR_TRUE, &hasAssertion);		if (NS_FAILED(rv)) return rv;		if (hasAssertion)			return NS_OK;	}    for (PRInt32 i = mObservers.Count() - 1; i >= 0; --i) {        nsIRDFObserver* obs = NS_STATIC_CAST(nsIRDFObserver*, mObservers[i]);        obs->OnUnassert(aSource, aProperty, aTarget);        // XXX ignore return value?    }    return NS_OK;}