-
Notifications
You must be signed in to change notification settings - Fork 15
How to add a new mapping file to the metadata structure manually
David Schöne edited this page May 27, 2019
·
1 revision
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>
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);
Hier einb Codebeispiel wie man dann die Metadaten konvertieren kann.
- Path zum Mapping-File sretllen
- Erzeuge eine Instanze vom XMLMapperManager und lade die die Daten aus dem Mapping file
- Erzeuge ein XmlDokument basierend auf das Omics MetadataXMl Dokument & dem MappingFile (ohne internal attributes)
- Erzeuge ein leere Interne MetadataStruktur mit internen Attributes
- Ü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);