Hmm. Fun one.
Interestingly I'm primarily aware of inodes in reference to Linux OSes, where forks and extended attributes are less common. For Linux, an inode is essentially the file. Logically it is just an identifier / a holder for the access control information and the pointer to the various data, but from the operating system's perspective it is a symbol that has a one-to-one relationship to everything thought of as the file.
A fork (a Windows and Mac filesystem concept as far as I'm aware) is essentially a place to store additional file data. Think of it as a way to store additional data that doesn't show up when you use the default method for viewing the file(s) (e.g. cat / get-contents / ?)
Extended attributes are what you would traditionally think of as metadata. This is free-form but tends to be limited in scope (in contrast a fork is free-form and not limited in scope, and an inode is heavily limited in scope and form). You might use extended attributes to list an author, copyright date, source planet, GPS coordinates, hints about whose butt that is on the coffee table, etc.
inode
stores the basic metadata of a file, pertaining to the file system.fork
, for example in Windows, is used to additional data about data (for example, to store thumbnails of images).xattr
is the additional attributes of a file (that is required additionally for other purposes like SELinux security contexts that can be modified bychcon
command). There are some places where the names xattr and fork are interchangeably used; they just differ in their extensibility of their size. (This is how I have understood it)