Open Graph namespace declaration: HTML with XMLNS or head prefix?

FacebookFacebook OpengraphXml Namespaces

Facebook Problem Overview


I have seen conflicting information on how to best implement Open Graph namespaces. Specifically, the Open Graph website uses a few different methods, and the Facebook Open Graph examples use other methods.

Open Graph website example (using HTML prefix attribute):

<html prefix="og: http://ogp.me/ns#">

Open Graph website source code (using HTML XMLNS attribute):

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#">

Facebook Open Graph documentation (using HEAD prefix attribute):

<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#">

Facebook Open Graph documentation #2 (using HTML XMLNS attribute):

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" 
      xmlns:fb="https://www.facebook.com/2008/fbml">

What is the recommended method or does it not even matter?

Facebook Solutions


Solution 1 - Facebook

They are all equivalent and will all work.

Use prefix as it is the new recommended way and is fewer characters.

I'll get all our documentation updated to prefix.

Solution 2 - Facebook

I tried following @Paul Tarjan's answer of using prefix in the head. However I got some Internet Explorer 8 issue. So in the end I still use the xmlns way for fb namespace:

<!DOCTYPE HTML>
<html xmlns:fb="http://ogp.me/ns/fb#">
  <head prefix="og: http://ogp.me/ns# object: http://ogp.me/ns/object#">

Solution 3 - Facebook

It doesn't even matter. RDFa Core Initial Context recognizes og as a widely used vocabulary prefix:

> RDFa users can use these prefixes without having the obligation of defining the prefixes in the HTML code. The same list of prefixes have also been defined for JSON-LD as a JSON-LD Context at the URI http://www.w3.org/2013/json-ld-context/rdfa11; JSON-LD users can use the @context key with that URI as a shorthand to use the same prefixes.

Emphasis added for clarity.

Therefore, you do not need to add a namespace to your HTML documents. More information here.

Solution 4 - Facebook

<html xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns# fb:
http://www.facebook.com/2008/fbml"> <head>

There is the best way to validate.

Solution 5 - Facebook

prefix/xmlns attribute is useful to define short-hand. rdf is from xml lineage so xmlns notation should be expected to work independent of doctype detail. rdfa extends html with attributes including prefix as given by http://www.w3.org/TR/rdfa-in-html/#extensions-to-the-html5-syntax However, this requires adhering to http://dev.w3.org/html5/rdfa/rdfa-module.html Also, the tool support for rel="profile" as mentioned therein is as yet awaited. Till then, the choice is between using older doctypes, or manually placing rdf: for validation purpose or wait for validator & such tools to catch-up. The right place to make declaration is any element opening tag which is ancestor of wherever the short-hand notation will be used. Specifically for the case of og prefix, its predefined by the initial context of RDFa Core http://www.w3.org/2011/rdfa-context/rdfa-1.1.html so skipping it altogether for newer doctypes is alright. And specifically for html5 the RDFa initial context http://www.w3.org/2011/rdfa-context/html-rdfa-1.1 is loaded only after the RDFa initial context mentioned earlier.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMatt BeckmanView Question on Stackoverflow
Solution 1 - FacebookPaul TarjanView Answer on Stackoverflow
Solution 2 - FacebooklulalalaView Answer on Stackoverflow
Solution 3 - FacebookvhsView Answer on Stackoverflow
Solution 4 - FacebookЕгор ЩаповView Answer on Stackoverflow
Solution 5 - FacebookChawathe Vipul SView Answer on Stackoverflow