Changeset 5589


Ignore:
Timestamp:
08/21/14 14:31:57 (10 years ago)
Author:
Twan Goosen
Message:

Updated profile schema, added creation of resource elements and adapted unit test
Refs #582

Location:
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/service/impl/VirtualCollectionCMDICreatorImpl.java

    r5488 r5589  
    2929import javax.xml.datatype.DatatypeFactory;
    3030import javax.xml.datatype.XMLGregorianCalendar;
     31import org.apache.commons.lang.StringUtils;
    3132import org.apache.commons.lang3.time.FastDateFormat;
    3233import org.slf4j.Logger;
     
    4849    private final static Logger logger = LoggerFactory.getLogger(VirtualCollectionCMDICreatorImpl.class);
    4950    private final DatatypeFactory dataTypeFactory;
    50    
     51
    5152    // Collection display name value read from context.xml with a fallback value inserted by Spring
    5253    @Value("${eu.clarin.cmdi.virtualcollectionregistry.collectiondisplayname:CLARIN Virtual Collection Registry}")
     
    8687        cmdRoot.setHeader(createHeader(vc));
    8788        logger.trace("Creating resources");
    88         cmdRoot.setResources(createResources(vc));
     89        final CMD.Resources resources = createResources(vc);
     90        cmdRoot.setResources(resources);
    8991        logger.trace("Creating components");
    90         cmdRoot.setComponents(createComponents(vc));
     92        cmdRoot.setComponents(createComponents(vc, resources));
    9193        return cmdRoot;
    9294    }
     
    138140    }
    139141
    140     private CMD.Components createComponents(VirtualCollection vc) {
     142    private CMD.Components createComponents(VirtualCollection vc, CMD.Resources resources) {
    141143        final CMD.Components.VirtualCollection virtualCollection = new CMD.Components.VirtualCollection();
    142144
     
    155157        virtualCollection.setPurpose(getPurpose(vc));
    156158        virtualCollection.getCreator().add(getCreator(vc));
    157         virtualCollection.setGeneratedBy(new CMD.Components.VirtualCollection.GeneratedBy());
    158159        virtualCollection.setReproducability(getReproducability(vc));
    159160
     
    162163            reproducabilityNotice.setValue(vc.getReproducibilityNotice());
    163164            virtualCollection.setReproducabilityNotice(reproducabilityNotice);
     165        }
     166
     167        for (Resource resource : vc.getResources()) {
     168            addResource(virtualCollection, resource, resources);
     169        }
     170
     171        if (vc.getType() == VirtualCollection.Type.INTENSIONAL) {
     172            final CMD.Components.VirtualCollection.GeneratedBy generatedBy = new CMD.Components.VirtualCollection.GeneratedBy();
     173            //TODO: add 'generated by' values
     174            virtualCollection.setGeneratedBy(generatedBy);
    164175        }
    165176
     
    263274        }
    264275    }
     276
     277    private void addResource(final CMD.Components.VirtualCollection virtualCollection, Resource resource, CMD.Resources resources) {
     278        if (!StringUtils.isEmpty(resource.getLabel()) || !StringUtils.isEmpty(resource.getDescription())) {
     279            final CMD.Components.VirtualCollection.Resource resourceComponent = new CMD.Components.VirtualCollection.Resource();
     280            if (!StringUtils.isEmpty(resource.getLabel())) {
     281                // add label
     282                final CMD.Components.VirtualCollection.Resource.Label label = new CMD.Components.VirtualCollection.Resource.Label();
     283                label.setValue(resource.getLabel());
     284                resourceComponent.setLabel(label);
     285            }
     286            if (!StringUtils.isEmpty(resource.getDescription())) {
     287                // add description
     288                final CMD.Components.VirtualCollection.Resource.Description description = new CMD.Components.VirtualCollection.Resource.Description();
     289                description.setValue(resource.getDescription());
     290                resourceComponent.setDescription(description);
     291            }
     292            // look up the resource proxy (by URI) and set a reference
     293            for (ResourceProxy rp : resources.getResourceProxyList().getResourceProxy()) {
     294                if (rp.getResourceRef().equals(resource.getRef())) {
     295                    resourceComponent.getRef().add(rp);
     296                    break;
     297                }
     298            }
     299            virtualCollection.getResource().add(resourceComponent);
     300        }
     301    }
    265302}
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/xsd/VirtualCollection.xsd

    r5424 r5589  
    22                            instance (e.g. for grouping metadata descriptions into
    33                            collections)</xs:documentation></xs:annotation></xs:enumeration><xs:enumeration value="Resource"><xs:annotation><xs:documentation>The ResourceProxy refers to a file that is not a metadata
    4                             instance (e.g. a text document)</xs:documentation></xs:annotation></xs:enumeration><xs:enumeration value="SearchService"><xs:annotation><xs:documentation>The ResourceProxy refers to a (SRU/CQL) web service that can be used to query the resource described in this file</xs:documentation></xs:annotation></xs:enumeration><xs:enumeration value="SearchPage"><xs:annotation><xs:documentation>The ResourceProxy refers to a web page that can be used to query the resource described in this file</xs:documentation></xs:annotation></xs:enumeration><xs:enumeration value="LandingPage"><xs:annotation><xs:documentation>The ResourceProxy refers to a web page that contains the "original context" of the resource described in this file (e.g. repository web page displaying the metadata).</xs:documentation></xs:annotation></xs:enumeration></xs:restriction></xs:simpleType><xs:complexType name="complextype-Status-1---"><xs:simpleContent><xs:extension base="cmd:simpletype-Status-1---"/></xs:simpleContent></xs:complexType><xs:complexType name="complextype-Reproducability-1---"><xs:simpleContent><xs:extension base="cmd:simpletype-Reproducability-1---"/></xs:simpleContent></xs:complexType><xs:complexType name="complextype-Purpose-1---"><xs:simpleContent><xs:extension base="cmd:simpletype-Purpose-1---"/></xs:simpleContent></xs:complexType><xs:element name="CMD"><xs:complexType><xs:sequence><xs:element name="Header"><xs:complexType><xs:sequence><xs:element name="MdCreator" type="xs:string" minOccurs="0" maxOccurs="unbounded"/><xs:element name="MdCreationDate" type="xs:date" minOccurs="0"/><xs:element name="MdSelfLink" type="xs:anyURI" minOccurs="0"/><xs:element name="MdProfile" type="xs:anyURI" minOccurs="0"/><xs:element name="MdCollectionDisplayName" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType></xs:element><xs:element name="Resources"><xs:complexType><xs:sequence><xs:element name="ResourceProxyList"><xs:complexType><xs:sequence><xs:element maxOccurs="unbounded" minOccurs="0" name="ResourceProxy"><xs:complexType><xs:sequence><xs:element maxOccurs="1" minOccurs="1" name="ResourceType"><xs:complexType><xs:simpleContent><xs:extension base="cmd:Resourcetype_simple"><xs:attribute name="mimetype" type="xs:string"/></xs:extension></xs:simpleContent></xs:complexType></xs:element><xs:element maxOccurs="1" minOccurs="1" name="ResourceRef" type="xs:anyURI"/></xs:sequence><xs:attribute name="id" type="xs:ID" use="required"/></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element><xs:element name="JournalFileProxyList"><xs:complexType><xs:sequence><xs:element maxOccurs="unbounded" minOccurs="0" name="JournalFileProxy"><xs:complexType><xs:sequence><xs:element maxOccurs="1" minOccurs="1" name="JournalFileRef" type="xs:anyURI"/></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element><xs:element name="ResourceRelationList"><xs:complexType><xs:sequence><xs:element maxOccurs="unbounded" minOccurs="0" name="ResourceRelation"><xs:complexType><xs:sequence><xs:element maxOccurs="1" minOccurs="1" name="RelationType"/><xs:element maxOccurs="1" minOccurs="1" name="Res1"><xs:complexType><xs:attribute name="ref" type="xs:IDREF"/></xs:complexType></xs:element><xs:element maxOccurs="1" minOccurs="1" name="Res2"><xs:complexType><xs:attribute name="ref" type="xs:IDREF"/></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element><xs:element minOccurs="0" name="IsPartOfList"><xs:complexType><xs:sequence><xs:element maxOccurs="unbounded" minOccurs="0" name="IsPartOf" type="xs:anyURI"/></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element><xs:element name="Components"><xs:complexType><xs:sequence><xs:element name="VirtualCollection" minOccurs="1" maxOccurs="1"><xs:complexType><xs:sequence><xs:element name="Name" dcr:datcat="http://www.isocat.org/datcat/DC-6119" minOccurs="1" maxOccurs="1" ann:displaypriority="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Description" dcr:datcat="http://www.isocat.org/datcat/DC-2520" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="CreationDate" dcr:datcat="http://www.isocat.org/datcat/DC-2510" type="xs:date" minOccurs="1" maxOccurs="1"/><xs:element name="Status" dcr:datcat="http://www.isocat.org/datcat/DC-3818" minOccurs="1" maxOccurs="1" type="cmd:complextype-Status-1---"/><xs:element name="Reproducability" minOccurs="0" maxOccurs="1" type="cmd:complextype-Reproducability-1---"/><xs:element name="Purpose" dcr:datcat="http://www.isocat.org/datcat/DC-6151" minOccurs="0" maxOccurs="1" type="cmd:complextype-Purpose-1---"/><xs:element name="ReproducabilityNotice" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Origin" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Creator" minOccurs="1" maxOccurs="unbounded" dcr:datcat="http://www.isocat.org/datcat/DC-6714"><xs:complexType><xs:sequence><xs:element name="Name" dcr:datcat="http://www.isocat.org/datcat/DC-2512" minOccurs="1" maxOccurs="1" ann:displaypriority="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Email" dcr:datcat="http://www.isocat.org/datcat/DC-2521" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Organisation" dcr:datcat="http://www.isocat.org/datcat/DC-2459" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element></xs:sequence><xs:attribute name="ref" type="xs:IDREFS"/></xs:complexType></xs:element><xs:element name="CopyOfResourceMetadata" minOccurs="0" maxOccurs="unbounded"><xs:complexType><xs:sequence/><xs:attribute name="ref" type="xs:IDREFS"/></xs:complexType></xs:element><xs:element name="GeneratedBy" minOccurs="0" maxOccurs="1"><xs:complexType><xs:sequence/><xs:attribute name="ref" type="xs:IDREFS"/></xs:complexType></xs:element></xs:sequence><xs:attribute name="ref" type="xs:IDREFS"/></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element></xs:sequence><xs:attribute name="CMDVersion" fixed="1.1" use="required"/></xs:complexType></xs:element></xs:schema>
     4                            instance (e.g. a text document)</xs:documentation></xs:annotation></xs:enumeration><xs:enumeration value="SearchService"><xs:annotation><xs:documentation>The ResourceProxy refers to a (SRU/CQL) web service that can be used to query the resource described in this file</xs:documentation></xs:annotation></xs:enumeration><xs:enumeration value="SearchPage"><xs:annotation><xs:documentation>The ResourceProxy refers to a web page that can be used to query the resource described in this file</xs:documentation></xs:annotation></xs:enumeration><xs:enumeration value="LandingPage"><xs:annotation><xs:documentation>The ResourceProxy refers to a web page that contains the "original context" of the resource described in this file (e.g. repository web page displaying the metadata).</xs:documentation></xs:annotation></xs:enumeration></xs:restriction></xs:simpleType><xs:complexType name="complextype-Status-1---"><xs:simpleContent><xs:extension base="cmd:simpletype-Status-1---"/></xs:simpleContent></xs:complexType><xs:complexType name="complextype-Reproducability-1---"><xs:simpleContent><xs:extension base="cmd:simpletype-Reproducability-1---"/></xs:simpleContent></xs:complexType><xs:complexType name="complextype-Purpose-1---"><xs:simpleContent><xs:extension base="cmd:simpletype-Purpose-1---"/></xs:simpleContent></xs:complexType><xs:element name="CMD"><xs:complexType><xs:sequence><xs:element name="Header"><xs:complexType><xs:sequence><xs:element name="MdCreator" type="xs:string" minOccurs="0" maxOccurs="unbounded"/><xs:element name="MdCreationDate" type="xs:date" minOccurs="0"/><xs:element name="MdSelfLink" type="xs:anyURI" minOccurs="0"/><xs:element name="MdProfile" type="xs:anyURI" minOccurs="0"/><xs:element name="MdCollectionDisplayName" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType></xs:element><xs:element name="Resources"><xs:complexType><xs:sequence><xs:element name="ResourceProxyList"><xs:complexType><xs:sequence><xs:element maxOccurs="unbounded" minOccurs="0" name="ResourceProxy"><xs:complexType><xs:sequence><xs:element maxOccurs="1" minOccurs="1" name="ResourceType"><xs:complexType><xs:simpleContent><xs:extension base="cmd:Resourcetype_simple"><xs:attribute name="mimetype" type="xs:string"/></xs:extension></xs:simpleContent></xs:complexType></xs:element><xs:element maxOccurs="1" minOccurs="1" name="ResourceRef" type="xs:anyURI"/></xs:sequence><xs:attribute name="id" type="xs:ID" use="required"/></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element><xs:element name="JournalFileProxyList"><xs:complexType><xs:sequence><xs:element maxOccurs="unbounded" minOccurs="0" name="JournalFileProxy"><xs:complexType><xs:sequence><xs:element maxOccurs="1" minOccurs="1" name="JournalFileRef" type="xs:anyURI"/></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element><xs:element name="ResourceRelationList"><xs:complexType><xs:sequence><xs:element maxOccurs="unbounded" minOccurs="0" name="ResourceRelation"><xs:complexType><xs:sequence><xs:element maxOccurs="1" minOccurs="1" name="RelationType"/><xs:element maxOccurs="1" minOccurs="1" name="Res1"><xs:complexType><xs:attribute name="ref" type="xs:IDREF"/></xs:complexType></xs:element><xs:element maxOccurs="1" minOccurs="1" name="Res2"><xs:complexType><xs:attribute name="ref" type="xs:IDREF"/></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element><xs:element minOccurs="0" name="IsPartOfList"><xs:complexType><xs:sequence><xs:element maxOccurs="unbounded" minOccurs="0" name="IsPartOf" type="xs:anyURI"/></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element><xs:element name="Components"><xs:complexType><xs:sequence><xs:element name="VirtualCollection" minOccurs="1" maxOccurs="1"><xs:complexType><xs:sequence><xs:element name="Name" dcr:datcat="http://www.isocat.org/datcat/DC-6119" minOccurs="1" maxOccurs="1" ann:displaypriority="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Description" dcr:datcat="http://www.isocat.org/datcat/DC-2520" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="CreationDate" dcr:datcat="http://www.isocat.org/datcat/DC-2510" type="xs:date" minOccurs="1" maxOccurs="1"/><xs:element name="Status" dcr:datcat="http://www.isocat.org/datcat/DC-3818" minOccurs="1" maxOccurs="1" type="cmd:complextype-Status-1---"/><xs:element name="Reproducability" minOccurs="0" maxOccurs="1" type="cmd:complextype-Reproducability-1---"/><xs:element name="Purpose" dcr:datcat="http://www.isocat.org/datcat/DC-6151" minOccurs="0" maxOccurs="1" type="cmd:complextype-Purpose-1---"/><xs:element name="ReproducabilityNotice" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Origin" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Creator" minOccurs="1" maxOccurs="unbounded" dcr:datcat="http://www.isocat.org/datcat/DC-6714"><xs:complexType><xs:sequence><xs:element name="Name" dcr:datcat="http://www.isocat.org/datcat/DC-2512" minOccurs="1" maxOccurs="1" ann:displaypriority="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Email" dcr:datcat="http://www.isocat.org/datcat/DC-2521" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Organisation" dcr:datcat="http://www.isocat.org/datcat/DC-2459" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element></xs:sequence><xs:attribute name="ref" type="xs:IDREFS"/></xs:complexType></xs:element><xs:element name="Resource" minOccurs="0" maxOccurs="unbounded"><xs:complexType><xs:sequence><xs:element name="Label" dcr:datcat="http://www.isocat.org/datcat/DC-2544" minOccurs="0" maxOccurs="1" ann:displaypriority="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="Description" dcr:datcat="http://www.isocat.org/datcat/DC-2520" minOccurs="0" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element></xs:sequence><xs:attribute name="ref" type="xs:IDREFS"/></xs:complexType></xs:element><xs:element name="GeneratedBy" minOccurs="0" maxOccurs="1"><xs:complexType><xs:sequence><xs:element name="Description" dcr:datcat="http://www.isocat.org/datcat/DC-2520" minOccurs="1" maxOccurs="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="URI" dcr:datcat="http://www.isocat.org/datcat/DC-5643" minOccurs="1" maxOccurs="1" ann:displaypriority="3"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="QueryProfile" minOccurs="1" maxOccurs="1" ann:documentation="Identifier of the mechanism, i.e. the protocol to be used, by which the members of the virtual collection should be retrieved. A application exploiting the query can use this to use a proper driver to talk to the service. Example: In case of CLARIN-FCS access the endpoint by FCS-compatible means." ann:displaypriority="2"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element><xs:element name="QueryValue" minOccurs="1" maxOccurs="1" ann:documentation="The query that should be passed on to the service by which it can look up the items that are part of this collection. This value should be in the query language supported by the service. Example: In case of CLARIN-FCS, this value is the CQL query to be send to the endpoint." ann:displaypriority="1"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"/></xs:simpleContent></xs:complexType></xs:element></xs:sequence><xs:attribute name="ref" type="xs:IDREFS"/></xs:complexType></xs:element></xs:sequence><xs:attribute name="ref" type="xs:IDREFS"/></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element></xs:sequence><xs:attribute name="CMDVersion" fixed="1.1" use="required"/></xs:complexType></xs:element></xs:schema>
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/test/java/eu/clarin/cmdi/virtualcollectionregistry/service/impl/VirtualCollectionCMDIWriterImplTest.java

    r5426 r5589  
    3939     * Patterns for paths to be ignored in XML comparison
    4040     */
    41     private final List<Pattern> IGNORE_PATHS = new CopyOnWriteArrayList<Pattern>(new Pattern[]{
     41    private final List<Pattern> IGNORE_PATHS = new CopyOnWriteArrayList<>(new Pattern[]{
    4242        //ignore creation date
    4343        Pattern.compile("\\/CMD\\[1\\]\\/Header\\[1\\]\\/MdCreationDate\\[1\\]\\/text\\(\\).*"),
    4444        //ignore resource proxy id's
    45         Pattern.compile("\\/CMD\\[1\\]\\/Resources\\[1\\]\\/ResourceProxyList\\[1\\]\\/ResourceProxy\\[.*\\]\\/@id")});
     45        Pattern.compile("\\/CMD\\[1\\]\\/Resources\\[1\\]\\/ResourceProxyList\\[1\\]\\/ResourceProxy\\[.*\\]\\/@id"),
     46        //ignore resource proxy references from Resource component instances
     47        Pattern.compile("\\/CMD\\[1\\]\\/Components\\[1\\]\\/VirtualCollection\\[1\\]\\/Resource\\[.*\\]\\/@ref")   
     48    });
    4649
    4750    /**
     
    9598        vc.getCreators().add(creator);
    9699
    97         vc.getResources().add(new Resource(Resource.Type.METADATA, "http://my/metadata.cmdi"));
    98         vc.getResources().add(new Resource(Resource.Type.RESOURCE, "http://my/resource.mpg"));
     100        final Resource resource1 = new Resource(Resource.Type.METADATA, "http://my/metadata.cmdi");
     101        resource1.setLabel("Label of first");
     102        vc.getResources().add(resource1);
     103
     104        final Resource resource2 = new Resource(Resource.Type.RESOURCE, "http://my/resource.mpg");
     105        resource2.setDescription("Description of second");
     106        vc.getResources().add(resource2);
     107
     108        // add one without label or description
     109        vc.getResources().add(new Resource(Resource.Type.RESOURCE, "http://other/resource.mpg"));
    99110        return vc;
    100111    }
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/test/resources/vc-instance1.xml

    r5425 r5589  
    2020                <cmd:ResourceRef>http://my/resource.mpg</cmd:ResourceRef>
    2121            </cmd:ResourceProxy>
     22            <cmd:ResourceProxy id="r3">
     23                <cmd:ResourceType>Resource</cmd:ResourceType>
     24                <cmd:ResourceRef>http://other/resource.mpg</cmd:ResourceRef>
     25            </cmd:ResourceProxy>
    2226        </cmd:ResourceProxyList>
    2327        <cmd:JournalFileProxyList>
     
    3943                <cmd:Organisation>Test Inc.</cmd:Organisation>
    4044            </cmd:Creator>
    41             <cmd:GeneratedBy/>
     45            <cmd:Resource ref="r1">
     46                <cmd:Label>Label of first</cmd:Label>
     47            </cmd:Resource>
     48            <cmd:Resource ref="r2">
     49                <cmd:Description>Description of second</cmd:Description>
     50            </cmd:Resource>
    4251        </cmd:VirtualCollection>
    4352    </cmd:Components>
Note: See TracChangeset for help on using the changeset viewer.