You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Класс `SysConfigFile` использует аксаптовские классы для работы с xml. Эти классы всегда выполняют проверку xml синтаксиса при загрузке текста - так называемую проверку [well formed xml](https://en.wikipedia.org/wiki/Well-formed_document).
121
+
Класс `SysConfigFile` использует аксаптовские классы для работы с xml. Эти классы всегда выполняют проверку xml синтаксиса при загрузке текста - так называемую проверку [well formed xml](https://en.wikipedia.org/wiki/Well-formed_document). См.также [W3 well-formed](https://www.w3.org/TR/xml/#sec-well-formed), [статья](http://softwaremaniacs.org/blog/2005/10/02/well-formed-valid-conformant/)
122
122
123
123
### Валидация по xsd-схеме
124
124
125
-
Класс `SysConfigFile` может выполнить валидацию config-файла по [xsd-схеме](https://ru.wikipedia.org/wiki/XML_Schema_(W3C)).<https://www.w3.org/XML/Schema>
125
+
Класс `SysConfigFile` может выполнить валидацию config-файла по [xsd-схеме](https://ru.wikipedia.org/wiki/XML_Schema_(W3C)):<https://www.w3.org/XML/Schema>
126
126
127
127
Чтобы выполнить валидацию, программист должен явно вызвать хотя бы один из методов: `ensureFileValid`, `assertFileValid` или `checkFileValid`.
128
128
Если методы не вызваны, то класс выполняют только [проверку синтаксиса](#Валидация-синтаксиса-config-файла) при чтении config-файла.
@@ -133,7 +133,9 @@ Xsd-схема может хранится централизовано в ре
133
133
134
134
Аксаптовские xml-классы не выполняет валидацию по DTD (выполняется только проверка синтаксиса DTD как подмножества синтаксиса xml).
135
135
136
-
С некоторого времени Microsoft считает работу с DTD опасной (<https://msdn.microsoft.com/en-us/magazine/ee335713.aspx>). Во-первых из-за "xml bomb" (гуглите).
136
+
С некоторого времени Microsoft считает работу с DTD опасной: <https://msdn.microsoft.com/en-us/magazine/ee335713.aspx>.
137
+
138
+
Во-первых, из-за "xml bomb" (гуглите).
137
139
138
140
Во-вторых, потому что способ проверки задает создатель файла внутри этого xml-файла. В далекие 2000е в этом не видели проблему, но уже в 2010е стали считать, что доверять создателю файла слишком наивно и опасно. Поэтому, в аксаптовских xml-классах есть метод [prohibitDtd](https://docs.microsoft.com/ru-ru/dotnet/api/system.xml.xmlreadersettings.prohibitdtd). По умолчанию он возвращает `true`.
139
141
@@ -191,7 +193,7 @@ Xsd-схема может хранится централизовано в ре
191
193
192
194
Обработка исключений в классических Аксаптах имеет особенность: catch блоки внутри транзакции не обрабатываются, Аксапта выпрыгивает за самый внешний transaction-блок и ищет catch уже там (см. раздел `Exception handling inside transaction` в документации). Поэтому обработка исключений становится не надежной, если код может выполняться внутри транзакции.
193
195
194
-
Поэтому если config-файлы содержат синтаксически правильный xml ([well-formed xml](https://www.w3.org/TR/xml/#sec-well-formed) + [статья](http://softwaremaniacs.org/blog/2005/10/02/well-formed-valid-conformant/)), то исключения могут возникнуть только после вызова `ensure`-, `assert`- методов и статического метода `::Value`, а остальные методы вернут более-менее осмысленный результат.
196
+
Поэтому если config-файлы содержат [синтаксически правильный xml](#Проверка-синтаксиса-config-файла), то исключения могут возникнуть только после вызова `ensure`-, `assert`- методов и статического метода `::Value`, а остальные методы вернут более-менее осмысленный результат.
0 commit comments