// PUBLIC METHODS ///////////////////////////////////////////////////
        #region Factory Methods
        public static DomReadWriteRelationship Create(string rel, params Node <DomNodeType>[] domNodes)
        {
            Contract.Requires(String.IsNullOrWhiteSpace(rel) == false);

            var domReadWriteRelationship = new DomReadWriteRelationship(rel, domNodes);

            return(domReadWriteRelationship);
        }
        internal DomReadWriteRelationship AddDomReadWriteRelationship(string rel, Meta meta = null)
        {
            Contract.Requires(String.IsNullOrWhiteSpace(rel) == false);

            this.ValidateRelationshipDoesNotExist(rel);

            var domReadWriteRelationship = this.CreateAndAddNode(() => DomReadWriteRelationship.Create(rel));

            if (meta == null)
            {
                return(domReadWriteRelationship);
            }

            domReadWriteRelationship.CreateAndAddNode(() => DomReadOnlyMeta.Create(meta));
            return(domReadWriteRelationship);
        }
        internal DomReadWriteRelationship AddDomReadWriteRelationship(string rel, IEnumerable <string> linkRelCollection, Meta meta = null)
        {
            Contract.Requires(String.IsNullOrWhiteSpace(rel) == false);
            Contract.Requires(linkRelCollection != null);

            this.ValidateRelationshipDoesNotExist(rel);

            var domReadWriteRelationship = this.CreateAndAddNode(() => DomReadWriteRelationship.Create(rel));

            foreach (var linkRel in linkRelCollection)
            {
                var domReadWriteLinks = domReadWriteRelationship.GetOrAddNode(DomNodeType.Links, () => DomReadWriteLinks.Create());
                domReadWriteLinks.AddDomReadWriteLink(linkRel);
            }

            if (meta == null)
            {
                return(domReadWriteRelationship);
            }

            domReadWriteRelationship.CreateAndAddNode(() => DomReadOnlyMeta.Create(meta));
            return(domReadWriteRelationship);
        }