"file:///absolut/path/to.xml/-//OWNER//NAME//EN"
- это объединение СИСТЕМЫ и ПУБЛИЧНЫХ идентификаторов. Как правило, вы хотите посмотреть на одно или другое, а не на оба, и, конечно, не на одну строку. Когда вы говорите «DTD запрашивается как URI формата», неясно, кто выполняет запрос. Похоже, что вызывающий код объединяет SYSTEM и PUBLIC.
Если у вас есть DTD в виде файла диска, и все, что вам нужно сделать, это сопоставить один URI с другим, вы можете переопределить ResolveUri()
вместо полного GetEntity()
. GetEntity()
более полезно, если у вас есть ресурсы, недоступные в виде простых URI, например, Вы вычисляете содержимое ресурса во время выполнения, извлекаете его из базы данных, используете нестандартную схему URL и протокол, такой как svn: etc.