Generating Code to Create XMP XML

The Chilkat Xmp class provides the abililty to insert/update/remove/extract XMP metadata from JPEG and TIFF image files.  In addition, the XMP API provides helper methods to make it easier to construct XML according to XMP specifications.  These methods are usually sufficient, but may lack flexibility to create more complex XMP metadata.  An alternative approach is to use Chilkat’s online code generate tools to generate the source code required to create a specific XMP sample.  Assuming you have sample XMP metadata you wish to create, you may copy/paste the XML into the online tool at https://tools.chilkat.io/xmlCreate.cshtml

For example, if we have the following XMP:

<?xml version="1.0" encoding="utf-8"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description rdf:about="uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b" xmlns:prefix0="http://ns.SomeApp.net/1.0/">
            <prefix0:imageSettingsHash>443ed5e044e337ede86f4bbb48cf78f1</prefix0:imageSettingsHash>
        </rdf:Description>
        <rdf:Description rdf:about="uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b" xmlns:dc="http://purl.org/dc/elements/1.1/">
            <dc:title>
                <rdf:Alt xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
                    <rdf:li xml:lang="x-default">regions added by SomeApp</rdf:li>
                </rdf:Alt>
            </dc:title>
        </rdf:Description>
        <rdf:Description rdf:about="uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b" xmlns:dc="http://purl.org/dc/elements/1.1/">
            <dc:description>
                <rdf:Alt xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
                    <rdf:li xml:lang="x-default">regions added by SomeApp</rdf:li>
                </rdf:Alt>
            </dc:description>
        </rdf:Description>
        <rdf:Description rdf:about="" xmlns:Iptc4xmpExt="http://iptc.org/std/Iptc4xmpExt/2008-02-29/">
            <Iptc4xmpExt:PersonInImage>
                <rdf:Bag>
                    <rdf:li>Laza</rdf:li>
                    <rdf:li>David</rdf:li>
                    <rdf:li>Jason</rdf:li>
                    <rdf:li>Pontus</rdf:li>
                </rdf:Bag>
            </Iptc4xmpExt:PersonInImage>
        </rdf:Description>
        <rdf:Description rdf:about="uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:mwg-rs="http://www.metadataworkinggroup.com/schemas/regions/" xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#" xmlns:stArea="http://ns.adobe.com/xmp/sType/Area#">
            <mwg-rs:Regions rdf:parseType="Resource">
                <mwg-rs:AppliedToDimensions stDim:w="1000" stDim:h="667" stDim:unit="pixel"/>
                <mwg-rs:RegionList>
                    <rdf:Bag>
                        <rdf:li>
                            <rdf:Description mwg-rs:Name="Laza" mwg-rs:Type="Face">
                                <mwg-rs:Area stArea:x="0.276" stArea:y="0.305847076461769" stArea:w="0.075" stArea:h="0.112443778110945" stArea:unit="normalized"/>
                            </rdf:Description>
                        </rdf:li>
                        <rdf:li>
                            <rdf:Description mwg-rs:Name="David" mwg-rs:Type="Face">
                                <mwg-rs:Area stArea:x="0.446" stArea:y="0.260869565217391" stArea:w="0.057" stArea:h="0.119940029985007" stArea:unit="normalized"/>
                            </rdf:Description>
                        </rdf:li>
                        <rdf:li>
                            <rdf:Description mwg-rs:Name="Jason" mwg-rs:Type="Face">
                                <mwg-rs:Area stArea:x="0.564" stArea:y="0.286356821589205" stArea:w="0.047" stArea:h="0.0974512743628186" stArea:unit="normalized"/>
                            </rdf:Description>
                        </rdf:li>
                        <rdf:li>
                            <rdf:Description mwg-rs:Name="Pontus" mwg-rs:Type="Face">
                                <mwg-rs:Area stArea:x="0.651" stArea:y="0.271364317841079" stArea:w="0.08" stArea:h="0.131934032983508" stArea:unit="normalized"/>
                            </rdf:Description>
                        </rdf:li>
                    </rdf:Bag>
                </mwg-rs:RegionList>
            </mwg-rs:Regions>
            <xmp:CreatorTool>Some Tool</xmp:CreatorTool>
            <xmp:ModifyDate>2019-11-13T13:20:23Z</xmp:ModifyDate>
            <xmp:MetadataDate>2019-11-13T13:20:23Z</xmp:MetadataDate>
        </rdf:Description>
        <rdf:Description rdf:about="uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b" xmlns:MP="http://ns.microsoft.com/photo/1.2/" xmlns:MPRI="http://ns.microsoft.com/photo/1.2/t/RegionInfo#" xmlns:MPReg="http://ns.microsoft.com/photo/1.2/t/Region#">
            <MP:RegionInfo rdf:parseType="Resource">
                <MPRI:Regions>
                    <rdf:Bag>
                        <rdf:li rdf:parseType="Resource">
                            <MPReg:Rectangle>0.2385, 0.249625187406297, 0.075, 0.112443778110945</MPReg:Rectangle>
                            <MPReg:PersonDisplayName>Laza</MPReg:PersonDisplayName>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                            <MPReg:Rectangle>0.4175, 0.200899550224888, 0.057, 0.119940029985007</MPReg:Rectangle>
                            <MPReg:PersonDisplayName>David</MPReg:PersonDisplayName>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                            <MPReg:Rectangle>0.5405, 0.237631184407796, 0.047, 0.0974512743628186</MPReg:Rectangle>
                            <MPReg:PersonDisplayName>Jason</MPReg:PersonDisplayName>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                            <MPReg:Rectangle>0.611, 0.205397301349325, 0.08, 0.131934032983508</MPReg:Rectangle>
                            <MPReg:PersonDisplayName>Pontus</MPReg:PersonDisplayName>
                        </rdf:li>
                    </rdf:Bag>
                </MPRI:Regions>
            </MP:RegionInfo>
        </rdf:Description>
        <rdf:Description rdf:about="" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"/>
    </rdf:RDF>
</x:xmpmeta>

The online tool generates the following C# code. (The tool provides options to generate many other programming languages.)

Chilkat.Xml xml = new Chilkat.Xml();
xml.Tag = "x:xmpmeta";
xml.AddAttribute("xmlns:x","adobe:ns:meta/");
xml.UpdateAttrAt("rdf:RDF",true,"xmlns:rdf","http://www.w3.org/1999/02/22-rdf-syntax-ns#");
xml.UpdateAttrAt("rdf:RDF|rdf:Description",true,"rdf:about","uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b");
xml.UpdateAttrAt("rdf:RDF|rdf:Description",true,"xmlns:prefix0","http://ns.SomeApp.net/1.0/");
xml.UpdateChildContent("rdf:RDF|rdf:Description|prefix0:imageSettingsHash","443ed5e044e337ede86f4bbb48cf78f1");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[1]",true,"rdf:about","uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[1]",true,"xmlns:dc","http://purl.org/dc/elements/1.1/");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[1]|dc:title|rdf:Alt",true,"xmlns:rdf","http://www.w3.org/1999/02/22-rdf-syntax-ns#");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[1]|dc:title|rdf:Alt|rdf:li",true,"xml:lang","x-default");
xml.UpdateChildContent("rdf:RDF|rdf:Description[1]|dc:title|rdf:Alt|rdf:li","regions added by SomeApp");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[2]",true,"rdf:about","uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[2]",true,"xmlns:dc","http://purl.org/dc/elements/1.1/");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[2]|dc:description|rdf:Alt",true,"xmlns:rdf","http://www.w3.org/1999/02/22-rdf-syntax-ns#");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[2]|dc:description|rdf:Alt|rdf:li",true,"xml:lang","x-default");
xml.UpdateChildContent("rdf:RDF|rdf:Description[2]|dc:description|rdf:Alt|rdf:li","regions added by SomeApp");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[3]",true,"rdf:about","");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[3]",true,"xmlns:Iptc4xmpExt","http://iptc.org/std/Iptc4xmpExt/2008-02-29/");
xml.UpdateChildContent("rdf:RDF|rdf:Description[3]|Iptc4xmpExt:PersonInImage|rdf:Bag|rdf:li","Laza");
xml.UpdateChildContent("rdf:RDF|rdf:Description[3]|Iptc4xmpExt:PersonInImage|rdf:Bag|rdf:li[1]","David");
xml.UpdateChildContent("rdf:RDF|rdf:Description[3]|Iptc4xmpExt:PersonInImage|rdf:Bag|rdf:li[2]","Jason");
xml.UpdateChildContent("rdf:RDF|rdf:Description[3]|Iptc4xmpExt:PersonInImage|rdf:Bag|rdf:li[3]","Pontus");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]",true,"rdf:about","uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]",true,"xmlns:xmp","http://ns.adobe.com/xap/1.0/");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]",true,"xmlns:mwg-rs","http://www.metadataworkinggroup.com/schemas/regions/");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]",true,"xmlns:stDim","http://ns.adobe.com/xap/1.0/sType/Dimensions#");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]",true,"xmlns:stArea","http://ns.adobe.com/xmp/sType/Area#");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions",true,"rdf:parseType","Resource");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:AppliedToDimensions",true,"stDim:w","1000");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:AppliedToDimensions",true,"stDim:h","667");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:AppliedToDimensions",true,"stDim:unit","pixel");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li|rdf:Description",true,"mwg-rs:Name","Laza");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li|rdf:Description",true,"mwg-rs:Type","Face");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li|rdf:Description|mwg-rs:Area",true,"stArea:x","0.276");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li|rdf:Description|mwg-rs:Area",true,"stArea:y","0.305847076461769");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li|rdf:Description|mwg-rs:Area",true,"stArea:w","0.075");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li|rdf:Description|mwg-rs:Area",true,"stArea:h","0.112443778110945");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li|rdf:Description|mwg-rs:Area",true,"stArea:unit","normalized");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[1]|rdf:Description",true,"mwg-rs:Name","David");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[1]|rdf:Description",true,"mwg-rs:Type","Face");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[1]|rdf:Description|mwg-rs:Area",true,"stArea:x","0.446");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[1]|rdf:Description|mwg-rs:Area",true,"stArea:y","0.260869565217391");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[1]|rdf:Description|mwg-rs:Area",true,"stArea:w","0.057");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[1]|rdf:Description|mwg-rs:Area",true,"stArea:h","0.119940029985007");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[1]|rdf:Description|mwg-rs:Area",true,"stArea:unit","normalized");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[2]|rdf:Description",true,"mwg-rs:Name","Jason");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[2]|rdf:Description",true,"mwg-rs:Type","Face");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[2]|rdf:Description|mwg-rs:Area",true,"stArea:x","0.564");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[2]|rdf:Description|mwg-rs:Area",true,"stArea:y","0.286356821589205");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[2]|rdf:Description|mwg-rs:Area",true,"stArea:w","0.047");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[2]|rdf:Description|mwg-rs:Area",true,"stArea:h","0.0974512743628186");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[2]|rdf:Description|mwg-rs:Area",true,"stArea:unit","normalized");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[3]|rdf:Description",true,"mwg-rs:Name","Pontus");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[3]|rdf:Description",true,"mwg-rs:Type","Face");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[3]|rdf:Description|mwg-rs:Area",true,"stArea:x","0.651");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[3]|rdf:Description|mwg-rs:Area",true,"stArea:y","0.271364317841079");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[3]|rdf:Description|mwg-rs:Area",true,"stArea:w","0.08");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[3]|rdf:Description|mwg-rs:Area",true,"stArea:h","0.131934032983508");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[4]|mwg-rs:Regions|mwg-rs:RegionList|rdf:Bag|rdf:li[3]|rdf:Description|mwg-rs:Area",true,"stArea:unit","normalized");
xml.UpdateChildContent("rdf:RDF|rdf:Description[4]|xmp:CreatorTool","Some Tool");
xml.UpdateChildContent("rdf:RDF|rdf:Description[4]|xmp:ModifyDate","2019-11-13T13:20:23Z");
xml.UpdateChildContent("rdf:RDF|rdf:Description[4]|xmp:MetadataDate","2019-11-13T13:20:23Z");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[5]",true,"rdf:about","uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[5]",true,"xmlns:MP","http://ns.microsoft.com/photo/1.2/");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[5]",true,"xmlns:MPRI","http://ns.microsoft.com/photo/1.2/t/RegionInfo#");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[5]",true,"xmlns:MPReg","http://ns.microsoft.com/photo/1.2/t/Region#");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[5]|MP:RegionInfo",true,"rdf:parseType","Resource");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li",true,"rdf:parseType","Resource");
xml.UpdateChildContent("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li|MPReg:Rectangle","0.2385, 0.249625187406297, 0.075, 0.112443778110945");
xml.UpdateChildContent("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li|MPReg:PersonDisplayName","Laza");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li[1]",true,"rdf:parseType","Resource");
xml.UpdateChildContent("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li[1]|MPReg:Rectangle","0.4175, 0.200899550224888, 0.057, 0.119940029985007");
xml.UpdateChildContent("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li[1]|MPReg:PersonDisplayName","David");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li[2]",true,"rdf:parseType","Resource");
xml.UpdateChildContent("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li[2]|MPReg:Rectangle","0.5405, 0.237631184407796, 0.047, 0.0974512743628186");
xml.UpdateChildContent("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li[2]|MPReg:PersonDisplayName","Jason");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li[3]",true,"rdf:parseType","Resource");
xml.UpdateChildContent("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li[3]|MPReg:Rectangle","0.611, 0.205397301349325, 0.08, 0.131934032983508");
xml.UpdateChildContent("rdf:RDF|rdf:Description[5]|MP:RegionInfo|MPRI:Regions|rdf:Bag|rdf:li[3]|MPReg:PersonDisplayName","Pontus");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[6]",true,"rdf:about","");
xml.UpdateAttrAt("rdf:RDF|rdf:Description[6]",true,"xmlns:photoshop","http://ns.adobe.com/photoshop/1.0/");