Я придумал подход, который, кажется, работает. Я сначала загружаю схему явно, затем добавляю themn к schemacollection. Затем я загружаю XML-файл и присваиваю schemacollection его свойству схем. Решение теперь похоже на это:
uses MSXML2_TLB
That is:
// Type Lib: C:\Windows\system32\msxml4.dll
// LIBID: {F5078F18-C551-11D3-89B9-0000F81FE221}
function TfrmMain.ValidXML(
const xmlFile: String;
out err: IXMLDOMParseError): Boolean;
var
xml, xsd: IXMLDOMDocument2;
cache: IXMLDOMSchemaCollection;
begin
xsd := CoDOMDocument40.Create;
xsd.Async := False;
xsd.load('http://the.uri.com/schemalocation/schema.xsd');
cache := CoXMLSchemaCache40.Create;
cache.add('http://the.uri.com/schemalocation', xsd);
xml := CoDOMDocument40.Create;
xml.async := False;
xml.schemas := cache;
Result := xml.load(xmlFile);
if not Result then
err := xml.parseError
else
err := nil;
end;
важно использовать XMLSchemaCache40 или позже. Более ранние версии не следуют стандарту XML-схемы W3C, но только проверяют против Схемы XDR, спецификации Microsoft.
недостаток этого решения - то, что я должен загрузить схему явно. Мне кажется, что должно быть возможно получить их автоматически.
Вы используете System.ComponentModel.DataAnnotations.DisplayAttribute
:
[Display(Name = "My Field")]
public string MyField { get; set; }
Установка свойства ResourceType
для вашего атрибута позволит вам использовать файл ресурсов .
(До .NET 4 используйте System.ComponentModel.DisplayNameAttribute
с оговоркой, что отображаемое имя должно быть константой времени компиляции.)
Я еще не загрузил версию 2, поэтому я не могу протестировать, но считаю, что она работает как DynamicData, и в этом случае вы бы сделали что-то вроде этого на своей модели:
[Display(Name = "The Super Fantastic Field")]
public string MyField {get;set;}
Я еще не проверял CP1, но я прочитал его версию Скотта и, кажется, припоминаю, что код был сгенерирован T4. Я полагаю, вы всегда можете изменить это, но я подозреваю, что они будут предоставлять перегрузки в CP2.
Изменить: источник всегда доступен, и поэтому вы можете просто изменить метод, изменить генератор T4, и все будет хорошо идти. Также вставьте тикет или запрос (каким-то образом) для этого мода, чтобы он работал в следующей версии.