nsCAutoString propertyStr = nameSpaceURI;
nsCAutoString propertyStr(nameSpaceURI);
RDFContentSinkImpl::OpenProperty(const nsIParserNode& aNode){    nsresult rv;    // an "object" non-terminal is either a "description", a "typed    // node", or a "container", so this change the content sink's    // state appropriately.    const char* nameSpaceURI;    nsCOMPtr<nsIAtom> tag;    ParseTagString(aNode.GetText(), &nameSpaceURI, getter_AddRefs(tag));    nsCAutoString propertyStr = nameSpaceURI;    const PRUnichar *attrName;    tag->GetUnicode(&attrName);    propertyStr += NS_ConvertUCS2toUTF8(attrName);    nsCOMPtr<nsIRDFResource> property;    rv = gRDFService->GetResource(propertyStr, getter_AddRefs(property));    if (NS_FAILED(rv)) return rv;    nsCOMPtr<nsIRDFResource> target;    rv = GetResourceAttribute(aNode, getter_AddRefs(target));    if (NS_SUCCEEDED(rv)) {        // They specified an inline resource for the value of this        // property. Create an RDF resource for the inline resource        // URI, add the properties to it, and attach the inline        // resource to its parent.        rv = AddProperties(aNode, target);        NS_ASSERTION(NS_SUCCEEDED(rv), "problem adding properties");        if (NS_FAILED(rv)) return rv;        rv = mDataSource->Assert(GetContextElement(0), property, target, PR_TRUE);        if (NS_FAILED(rv)) return rv;        // XXX Technically, we should _not_ fall through here and push        // the element onto the stack: this is supposed to be a closed        // node. But right now I'm lazy and the code will just Do The        // Right Thing so long as the RDF is well-formed.    }    // Push the element onto the context stack and change state.    PushContext(property, mState);    mState = eRDFContentSinkState_InPropertyElement;    return NS_OK;}