Structure nodes are internally saved as documents of type
sophora-nt:structureNode2 and will be exported as such. These documents should be used to import structure nodes.
It is also possible to import structure nodes in a special XML format. This is especially useful for easy creation of a new structure. The root element in this import XML file has to be
<sophora>. This element contains the two child elements
<documents> (legacy) for the structure node information and for the structure node documents respectively. A structure node is connected with its structure node document via the external ID of the document. If no structure node document is given in the import XML, the Importer implicitly creates a new one.
sophora-nt:structureNode2is redundant. The
<structure>element can be used to create a basic structure without further configuration in the documents.
<structure>is no longer allowed. The structure node format shown here can only be created with Sophora XML versions up to 3.8.
The following example demonstrates the buildup of structure import XML prior to Sophora 3.0:
<?xml version="1.0" encoding="UTF-8"?> <sophora xmlns="http://www.sophoracms.com/import/2.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <structure> <site path="/demosite" menuText="Home" url="http://localhost:8080/live" isActive="true" state="inProcess" isLiveVersionAvailable="true" redirectUrl="" redirectActive="false" structureNodeDocumentExternalId="f3d1d72c-5667-493d-899c-338c49e65466" hierarchyDocumentExternalId="" defaultDocumentExternalId="1d61d398-ed81-4969-b5f9-0bb4f335a7ee"> <imagevariant imagevariantExternalId="2971a523-7b7a-4bc3-8cbf-fc0ef3862b28" /> <imagevariant imagevariantExternalId="8a2104b0-d3ec-48cd-951a-fc263aa6af4e" /> <imagevariant imagevariantExternalId="8538bdca-8d9e-45c6-8b8e-73b62c5c326b" /> <imagevariant imagevariantExternalId="aeeacd6f-a5b4-4a26-9d0f-91d78c41c7af" /> <imagevariant imagevariantExternalId="fc5a3cb3-320d-480d-b8d6-7cb705c359ec" /> <imagevariant imagevariantExternalId="95cd64c6-6611-3f2b-a958-375aa61ee7a8" /> <imagevariant imagevariantExternalId="39249fa6-b17b-4581-adc5-171e52441208" /> </site> <structureNode path="/demosite/home" menuText="Home" isActive="true" [...]/> <structureNode path="/demosite/trendcities" menuText="City Reports" isActive="true" [...]/> <structureNode path="/demosite/trendcities/copenhagen" menuText="Copenhagen" isActive="true" [...]/> <structureNode path="/demosite/trendcities/copenhagen/cphvision" menuText="CPH Vision" isActive="true" [...]/> <structureNode path="/demosite/trendcities/barcelona" menuText="Barcelona" isActive="true" [...]/> <structureNode path="/demosite/trendcities/paris" menuText="Paris" isActive="true" [...]/> <structureNode path="/demosite/trendcities/london" menuText="London" isActive="true" [...]/> <structureNode path="/demosite/forecasts" menuText="Forecast" isActive="true" [...]/> <structureNode path="/demosite/forecasts/2012" menuText="2012" isActive="true" [...]/> <structureNode path="/demosite/forecasts/2013" menuText="2013" isActive="true" [...]/> <structureNode path="/demosite/timeline" menuText="Timeline" isActive="true" [...] /> <structureNode path="/demosite/demo" menuText="" isActive="false" [...]/> </structure> <documents> <document nodeType="sophora-nt:structureNodeDocument" externalID="f3d1d72c-5667-493d-899c-338c49e65466"> <properties /> <childNodes /> <resourceList /> <fields> <site>demosite</site> <structureNode>/</structureNode> <categories /> <idstem>structurenodedocument</idstem> <forceLock>true</forceLock> <forceCreate>false</forceCreate> <channels> <enabledChannels/> <disabledChannels/> </channels> </fields> <instructions> <lifecycleActivities /> <proposals /> <stickyNotes /> </instructions> </document> [...] </documents> </sophora>
<structureNode> are encapsulated by the
<structure> element. Additionally to the attributes of a
<structureNode> element, the
<site> element has the attribute "url". Furthermore, a site contains images variants as childelements
<imagevariant> which have to be provided with an image variant's external Id. If the site already exists, the image variants are replaced by those from the XML. This only happens when at least one image variant is given in the import XML. Otherwise the image variants of the existing site are kept.
In the following explanations about the structure import it will not be distinguished between site and structure. They are treated equally
The properties of sites and structure nodes are modeled as attributes in the Sophora XML. Solely the image variants are modeled as childelements. The table below gives an overview about the existing attributes.
The order of the structure nodes has to be respected.
Structure node elements have to be specified according to the depth-first search principle. Structure nodes are created in the exact order in which they occure in the XML. Therefore, a child structure node cannot be created before its parent node.
When a structure node that already exists is imported, the properties given in the XML and in the repository are merged. An overview of the possible cases is given below. The new version of the structure node refers to the import XML and the old version is the one from the repository.
- A property is set in the in the new version but not in the old: The property is set (initially) in the repository
- A property already exists in the old version and a) the according attribute does not exist in the new version: The property will not be modified. b) the according attribute is present but contains an empty string: The property will be deleted.
- A property exists in both the new and the old version: The property value in the repository will be overwritten by the new version's value.
Merging structure node documents works in the same way as the merge of common documents (see section Managing the Update Behaviour of Documents\).
With an import operation you cannot delete structure nodes. If a structure node from the repository does have childnodes but the import XML lacks these childnodes, they remain unmodified in the repository.
The status of a new structure node depends on the status of its structure node document. If there is no structure node document, the structure node's status is taken. The decision is made according to the value of the attribute
isLiveVersionAvailable of the
<structureNode> element. Is it set to
true, the structure node will be published.
The procedure implies that the structure after importing does not have the exact same status as the structure that has been exported. This is due to the export mechanism for structure nodes: While exporting a structure node its current status is exported as well. The last live version is not considered.
It is possible to import disabled structure nodes. In that case the attribute state of a
<structureNode> element has the value "disabled". If a structure node is enabled in the new version (the version that updates an existing document in the repsoitory ) but the old version is disabled, the structure node will be updated so that it is enabled afterwards.
Structure nodes in Sophora cannot be deleted immediately. Instead, they are marked as deleted. The same happens to their structure node documents.
If you import a structure node that is marked as deleted in the repository, it will be recovered. If the new version of the structure node has no reference to a structure node document, a new one is created and referenced. However, if an external ID of the structure node document is provided in the new version and it matches the external ID of the old structure node document, the old structure node document is recovered as well. Subsequently, both structure node documents are merged (which works in the same way as normal documents; see above). This is only valid if no alternative rules are specified (see Managing the Update Behaviour of Documents).
During the import operation the Importer tries to refer to the default document, to the structure node document and to the hierarchy document using corresponding UUIDs. If an according document does not exist (yet) in the repository, an external reference is established (using the external ID). As soon as the referenced document is imported the external reference is removed and the UUID is taken instead.