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

5

135

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?

Phantasy answered 23/11, 2011 at 0:7 Comment(4)
I'm following up internally at FB to get the right answer for you.Brigette
@SimonCross, years later (Nov/2017) we are still waiting for the answer... ;)Nylanylghau
I had posted a question on stackoverflow. Please help me #68967201Nitrous
#68967201Nitrous
B
76

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.

Bedford answered 23/11, 2011 at 11:55 Comment(8)
Can you explain why to use anything at all? How about I just leave off this declaration? is anything going to break if I do that?Staggers
Nothing will break right now, but relying on defaults is rarely a good idea when you can be explicit. If 2 years down the road we change the defaults, your site will break. Also, if you declare your namespaces directly it will help other parsers not just Facebook.Bedford
Paul, I have noticed that the docs haven't been updated since November. Why is using the new way best, if both ways will be supported by all existing browsers for the foreseeable future? Adopting something new if support is not all there (among user agents, parsers, etc.) seems like an unnecessary risk unless there is some actual difference between the two. I haven't been able to find any resource that says so.Lemuellemuela
Which docs are wrong? I fixed all the ones I could find. Browsers don't actually have to care about this as it is a CURIE embeded in an attribute. The time when they care is when you are namespacing tags like we used to recommend for XFBML but not we use <div> with class attributes so browsers don't even need that anymore.Bedford
@PaulTarjan Here! That one has an example using xmlns. Also, should the prefix be used on html or head tag? Would it be fine either way? Which is recommended?Procurer
Oh, those docs are old. The yellow thing at the top says so. We didn't want to touch them because they are referenced a lot. Put the prefix on the head. It works on both but closer to the tags is better.Bedford
Would it need to be in the HTML tag if you are rendering Facebook tags in the BODY markup, as in <fb:like />?Hermaphroditus
Why do we need to sully our html and head elements with prefixes if the meta elements will have the og: prefix in every line (in every property)? What does adding the prefix attribute to html or head tags actually do?Sulfaguanidine
R
6

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.

Renaud answered 31/1, 2019 at 4:24 Comment(0)
A
5

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#">
Achaea answered 8/1, 2013 at 1:46 Comment(0)
B
2
<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.

Bracket answered 6/3, 2013 at 10:26 Comment(0)
C
1

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.

Cochabamba answered 13/12, 2012 at 12:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.