public static string ReplaceSchemas(this string xml, QtiResourceType resourceType, QtiVersion newVersion, QtiVersion oldVersion, bool localSchema) { var tagName = resourceType == QtiResourceType.AssessmentItem ? "assessmentItem" : resourceType == QtiResourceType.AssessmentTest ? "assessmentTest" : "manifest"; var baseScheme = GetBaseSchema(resourceType, newVersion); var baseSchemeLocation = GetBaseSchemaLocation(resourceType, newVersion); var qtiParentTag = Regex.Match(xml, $"<{tagName}(.*?)>").Value; var qtiParentOrg = qtiParentTag; var schemaPrefix = Regex.Match(qtiParentTag, " (.*?)schemaLocation") .Value.Replace(":schemaLocation", "").Trim(); schemaPrefix = schemaPrefix.Substring(schemaPrefix.LastIndexOf(" ", StringComparison.Ordinal), schemaPrefix.Length - schemaPrefix.LastIndexOf(" ", StringComparison.Ordinal)).Trim(); var schemaLocations = Regex.Match(qtiParentTag, @$ "{schemaPrefix}:schemaLocation=" "(.*?)" "").Value; var extensionSchemas = RemoveSchemaFromLocation(schemaLocations, GetBaseSchema(resourceType, oldVersion)); if (resourceType == QtiResourceType.Manifest) { extensionSchemas = RemoveSchemaFromLocation(extensionSchemas, GetBaseSchema(QtiResourceType.AssessmentItem, oldVersion)); extensionSchemas = extensionSchemas + $" {GetBaseSchema(QtiResourceType.AssessmentItem, newVersion)} {GetBaseSchemaLocation(QtiResourceType.AssessmentItem, newVersion)}"; } qtiParentTag = Regex.Replace(qtiParentTag, @$ "{schemaPrefix}:schemaLocation=" "(.*?)" "", ""); qtiParentTag = Regex.Replace(qtiParentTag, @$ "xmlns:{schemaPrefix}=" "(.*?)" "", ""); qtiParentTag = Regex.Replace(qtiParentTag, @$ "xmlns:xsi=" "(.*?)" "", ""); qtiParentTag = Regex.Replace(qtiParentTag, @"xmlns=""(.*?)""", ""); if (localSchema) { var prefix = resourceType == QtiResourceType.Manifest ? "/" : "../"; baseSchemeLocation = $"{prefix}controlxsds/{Path.GetFileName(baseSchemeLocation)}"; } var schemaLocation = $"xsi:schemaLocation=\"{baseScheme} {baseSchemeLocation} "; qtiParentTag = qtiParentTag.Replace($"{tagName} ", $@"{tagName} xmlns=""{baseScheme}"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" " + schemaLocation + " " + extensionSchemas + @""" " ); xml = xml.Replace(qtiParentOrg, qtiParentTag); if (schemaPrefix != "xsi") { xml = xml.Replace($":{schemaPrefix}", ":xsi"); xml = xml.Replace($"{schemaPrefix}:", "xsi:"); } return(xml); }
public static string GetBaseSchemaLocation(QtiResourceType resourceType, QtiVersion version) => XsdHelper.BaseSchemaLocations[$"{resourceType.ToString()}-{version.ToString()}"];
private static string GetBaseSchema(QtiResourceType resourceType, QtiVersion version) => XsdHelper.BaseSchemas[$"{resourceType}-{version}"];