public XElement ToXElement()
        {
            var locale   = LOCALE;
            var elements = new List <XElement>()
            {
                new XElement(
                    XMLNS_NAMESPACE + "id",
                    new XAttribute("advice", "ignore"),
                    new XAttribute("type", "internal"),
                    Id
                    ),
                new XElement(
                    XMLNS_NAMESPACE + "title",
                    new XAttribute("locale", LOCALE),
                    Title
                    ),
            };

            if (Prefix != "")
            {
                elements.Add(
                    new XElement(
                        XMLNS_NAMESPACE + "Prefix",
                        new XAttribute("locale", LOCALE),
                        Prefix
                        )
                    );
            }
            if (Abstract != "")
            {
                elements.Add(
                    new XElement(
                        XMLNS_NAMESPACE + "abstract",
                        new XAttribute("locale", LOCALE),
                        Abstract
                        )
                    );
            }
            if (LicenseURL != "")
            {
                elements.Add(
                    new XElement(
                        XMLNS_NAMESPACE + "licenseUrl",
                        LicenseURL
                        )
                    );
            }
            var xmlnsnamespace = XMLNS_NAMESPACE;

            if (Keywords.Length != 0)
            {
                elements.Add(
                    new XElement(
                        XMLNS_NAMESPACE + "keywords",
                        new XAttribute("locale", LOCALE),
                        Keywords.Select(el => new XElement(
                                            xmlnsnamespace + "keyword",
                                            el
                                            )).ToArray()
                        )
                    );
            }
            var xNameSpace = XMLNS_NAMESPACE;

            if (Authors.Count() != 0)
            {
                elements.Add(
                    new XElement(
                        XMLNS_NAMESPACE + "authors",
                        SCHEMA_LOCATION_ATTRIBUTE,
                        XMLNS_XSI_ATTRIBUTE,
                        Authors.Select(el => el.ToXElement(locale, xNameSpace)).ToArray()
                        )
                    );
            }
            elements.Add(
                Galley.ToXElement(locale, XMLNS_NAMESPACE, SCHEMA_LOCATION_ATTRIBUTE, XMLNS_XSI_ATTRIBUTE, Stage == "published")
                );

            elements.Add(
                Identifiaction.ToXElement(XMLNS_NAMESPACE)
                );
            elements.Add(
                new XElement(XMLNS_NAMESPACE + "pages", Pages)
                );
            return(new XElement(
                       XMLNS_NAMESPACE + "article",
                       SCHEMA_LOCATION_ATTRIBUTE,
                       new XAttribute("access_status", AccessStatus),
                       new XAttribute("seq", Seq),
                       new XAttribute("section_ref", SectionRef),
                       new XAttribute("date_published", DatePublished),
                       new XAttribute("stage", Stage),
                       new XAttribute("date_submitted", DateSubmitted),
                       new XAttribute("locale", locale),
                       XMLNS_XSI_ATTRIBUTE,
                       elements.ToArray()
                       ));
        }