Skip to content

How to add a new mapping file to the metadata structure manually

David Schöne edited this page May 27, 2019 · 1 revision

Extra Xml Document for the metadata Structure


In diesem Xml Document, werden alle existiertende Mapping-Files referenziert. Das erstellte Mapping-File muss in dem folegendem Verzeichnis gespeichert werden. ..\Workspace\Modules\DIM

Beispielsweise, hab ich mal ein OMICs eintrag gemacht.

<?xml version="1.0" encoding="utf-8"?>
<extra>
  <nodeReferences>
    <nodeRef name="title" value="Metadata/Metadata/MetadataType/Description/DescriptionType/Representation/MetadataDescriptionRepr/Title/TitleType" type="xpath" />
    <nodeRef name="description" value="Metadata/Metadata/MetadataType/Description/DescriptionType/Representation/MetadataDescriptionRepr/Details/DetailsType" type="xpath" />
  </nodeReferences>
  <entity name="Dataset" value="BExIS.Dlm.Entities.Data.Dataset" type="entity" />
  <convertReferences>
    <convertRef name="Basic ABCD" value="MappingFile_extern_ABCD_2.06.XSD_to_intern_Basic ABCD.xml" type="mappingFileImport" />
    <convertRef name="Basic ABCD" value="MappingFile_intern_Basic ABCD_to_extern_ABCD_2.06.XSD.xml" type="mappingFileExport" />
    <convertRef name="Omics" value="<NAME_DES_MAPPINGFILES>" type="mappingFileImport" />
  </convertReferences>
  <parameters>
    <parameter name="active" value="True" type="parameter" />
  </parameters>
</extra>

Register MappingFile To Matadata Structure


In diesem Code Teil wird gezeigt, wie man ein Mapping-File für eine Metadata Structure registrieren kann. Der Bepsiel Code stammt aus einem Controller in DCM ImportMetadataStructureController.cs

MetadataStructure metadataStructure = this.GetUnitOfWork().GetReadOnlyRepository<MetadataStructure>().Get(id);
XmlDocument xmlDoc = new XmlDocument();

if (metadataStructure.Extra != null)
{
    xmlDoc = (XmlDocument)metadataStructure.Extra;
}

// add mappingFilePath
xmlDoc = AddReferenceToMetadatStructure(metadataStructure.Name, mappingFilePathImport, "mappingFileImport", "extra/convertReferences/convertRef", xmlDoc);
xmlDoc = AddReferenceToMetadatStructure(metadataStructure.Name, mappingFilePathExport, "mappingFileExport", "extra/convertReferences/convertRef", xmlDoc);

metadataStructure.Extra = xmlDoc;
mdsManager.Update(metadataStructure);

xmlDatasetHelper.AddReferenceToXml(xmlDoc, nodeName, nodePath, nodeType, destinationPath);

Convert omics metadata to bexis metadata

Hier einb Codebeispiel wie man dann die Metadaten konvertieren kann.

  1. Path zum Mapping-File sretllen
  2. Erzeuge eine Instanze vom XMLMapperManager und lade die die Daten aus dem Mapping file
  3. Erzeuge ein XmlDokument basierend auf das Omics MetadataXMl Dokument & dem MappingFile (ohne internal attributes)
  4. Erzeuge ein leere Interne MetadataStruktur mit internen Attributes
  5. Übertrage die Attributes auf das Konvertierte Dokument

(1)// create path to mapping file
var path_mappingFile = Path.Combine(AppConfiguration.GetModuleWorkspacePath("DIM"), XmlMetadataImportHelper.GetMappingFileName(metadataStructureId, TransmissionType.mappingFileImport, <NAME_DES_MAPPINGFILES>));

(2)// XML mapper + mapping file
var xmlMapperManager = new XmlMapperManager(TransactionDirection.ExternToIntern);
xmlMapperManager.Load(path_mappingFile, "");

(3)// generate intern metadata without internal attributes
var metadataResult = xmlMapperManager.Generate(metadataForImport, 1, true);

(4)// generate intern template metadata xml with needed attribtes
var xmlMetadatWriter = new XmlMetadataWriter(BExIS.Xml.Helpers.XmlNodeMode.xPath);
var metadataXml = xmlMetadatWriter.CreateMetadataXml(metadataStructureId,
    XmlUtility.ToXDocument(metadataResult));

var metadataXmlTemplate = XmlMetadataWriter.ToXmlDocument(metadataXml);

(5)// set attributes FROM metadataXmlTemplate TO metadataResult
var completeMetadata = XmlMetadataImportHelper.FillInXmlValues(metadataResult,
    metadataXmlTemplate);
Clone this wiki locally