From 07393cbee889237af21aaee00c12082f18f4278b Mon Sep 17 00:00:00 2001 From: "waterson%netscape.com" Date: Sat, 12 Jun 1999 21:21:47 +0000 Subject: [PATCH] Change GetElementRefResource() to use rdf_MakeAbsoluteURI() to resolve attribute names. This makes it work more like '', which seems right (and fixes some problems that will occur with sitemaps). Inline code in GetElementResource() that was previously shared between the two. --- rdf/content/src/nsRDFContentUtils.cpp | 60 ++++++++++++++------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/rdf/content/src/nsRDFContentUtils.cpp b/rdf/content/src/nsRDFContentUtils.cpp index f5d69cbfd40..35afab1d7c4 100644 --- a/rdf/content/src/nsRDFContentUtils.cpp +++ b/rdf/content/src/nsRDFContentUtils.cpp @@ -176,12 +176,21 @@ nsRDFContentUtils::FindChildByTagAndResource(nsIContent* aElement, } -static nsresult -ConvertAttributeValueToResource(nsIContent* aElement, nsString& aValue, nsIRDFResource** aResult) +nsresult +nsRDFContentUtils::GetElementResource(nsIContent* aElement, nsIRDFResource** aResult) { - // Convert an attribute value (aValue) to an RDF resource, - // mangling a relative URL into an absolute one, if necessary. + // Perform a reverse mapping from an element in the content model + // to an RDF resource. nsresult rv; + nsAutoString id; + + nsCOMPtr kIdAtom( dont_AddRef(NS_NewAtom("id")) ); + rv = aElement->GetAttribute(kNameSpaceID_None, kIdAtom, id); + NS_ASSERTION(NS_SUCCEEDED(rv), "severe error retrieving attribute"); + if (NS_FAILED(rv)) return rv; + + if (rv != NS_CONTENT_ATTR_HAS_VALUE) + return NS_ERROR_FAILURE; // Since the element will store its ID attribute as a document-relative value, // we may need to qualify it first... @@ -194,7 +203,7 @@ ConvertAttributeValueToResource(nsIContent* aElement, nsString& aValue, nsIRDFRe return NS_ERROR_FAILURE; nsAutoString uri; - rv = nsRDFContentUtils::MakeElementURI(doc, aValue, uri); + rv = nsRDFContentUtils::MakeElementURI(doc, id, uri); if (NS_FAILED(rv)) return rv; NS_WITH_SERVICE(nsIRDFService, rdf, kRDFServiceCID, &rv); @@ -208,29 +217,6 @@ ConvertAttributeValueToResource(nsIContent* aElement, nsString& aValue, nsIRDFRe } -nsresult -nsRDFContentUtils::GetElementResource(nsIContent* aElement, nsIRDFResource** aResult) -{ - // Perform a reverse mapping from an element in the content model - // to an RDF resource. - nsresult rv; - nsAutoString uri; - - nsCOMPtr kIdAtom( dont_AddRef(NS_NewAtom("id")) ); - rv = aElement->GetAttribute(kNameSpaceID_None, kIdAtom, uri); - NS_ASSERTION(NS_SUCCEEDED(rv), "severe error retrieving attribute"); - if (NS_FAILED(rv)) return rv; - - if (rv != NS_CONTENT_ATTR_HAS_VALUE) - return NS_ERROR_FAILURE; - - rv = ConvertAttributeValueToResource(aElement, uri, aResult); - if (NS_FAILED(rv)) return rv; - - return NS_OK; -} - - nsresult nsRDFContentUtils::GetElementRefResource(nsIContent* aElement, nsIRDFResource** aResult) { @@ -246,7 +232,23 @@ nsRDFContentUtils::GetElementRefResource(nsIContent* aElement, nsIRDFResource** if (NS_FAILED(rv)) return rv; if (rv == NS_CONTENT_ATTR_HAS_VALUE) { - rv = ConvertAttributeValueToResource(aElement, uri, aResult); + // We'll use rdf_MakeAbsolute() to translate this to a URL. + nsCOMPtr doc; + rv = aElement->GetDocument(*getter_AddRefs(doc)); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr url = dont_AddRef( doc->GetDocumentURL() ); + NS_ASSERTION(url != nsnull, "element has no document"); + if (! url) + return NS_ERROR_UNEXPECTED; + + rv = rdf_MakeAbsoluteURI(url, uri); + if (NS_FAILED(rv)) return rv; + + NS_WITH_SERVICE(nsIRDFService, rdf, kRDFServiceCID, &rv); + if (NS_FAILED(rv)) return rv; + + rv = rdf->GetUnicodeResource(uri.GetUnicode(), aResult); } else { rv = GetElementResource(aElement, aResult);