Другим сценарием является то, что вы нанесли нулевой объект в тип значения . Например, код ниже:
object o = null;
DateTime d = (DateTime)o;
Он выкинет NullReferenceException
в роли. В приведенном выше примере это кажется совершенно очевидным, но это может произойти в более «поздних связующих» сложных сценариях, где нулевой объект был возвращен из некоторого кода, которого вы не являетесь, и приведение, например, генерируется некоторой автоматической системой.
Одним из примеров этого является этот простой фрагмент привязки ASP.NET с элементом управления календарем:
" />
Здесь SelectedDate
на самом деле является свойством - типа DateTime
- типа Calendar
Web Control, и привязка может отлично вернуть что-то null. Неявный генератор ASP.NET создаст кусок кода, который будет эквивалентен приведенному выше методу. И это поднимет NullReferenceException
, что довольно сложно определить, потому что он лежит в сгенерированном ASP.NET коде, который компилирует отлично ...
Парсер Java XML, который использует Spring, прочитает значения schemaLocation
и попытается загрузить их из Интернета, чтобы проверить файл XML. Spring, в свою очередь, перехватывает эти запросы нагрузки и обслуживает версии из своих собственных файлов JAR.
Если вы опустите schemaLocation
, тогда синтаксический анализатор XML не будет знать, где получить схему в порядке для проверки конфигурации.
Согласно спецификации для определения Схемы
может быть или не быть схема, доступная через имя пространства имен ... Пользовательское сообщество и / или потребитель / соглашения поставщика могут устанавливать обстоятельства, при которых [попытка извлечь xsd из URL-адреса пространства имен] является разумной стратегией по умолчанию
blockquote>(спасибо за то, что вы недвусмыслен, spec!) [/ g5]
и
в случае, если автор документа (человек или нет) создал документ с определенной схемой, и гарантирует, что какой-либо или весь документ соответствует этой схеме, schemaLocation и noNamespaceSchemaLocation [ атрибуты].
blockquote>Таким образом, в основном с указанием только пространства имен ваш XML «может» быть попытан для проверки на xsd в этом месте (даже если ему не хватает атрибута
schemaLocation
), в зависимости от вашего «сообщества». Если вы укажете конкретныйschemaLocation
, то в основном это означает, что документ xml «должен» соответствовать указанному xsd, поэтому «пожалуйста, подтвердите его» (как я его прочитал). Я предполагаю, что если вы не выполняете атрибутschemaLocation
илиnoNamespaceSchemaLocation
, он просто «не проверяется» большую часть времени (на основе других ответов появляется java делает это таким образом).Еще одна морщина заключается в том, что обычно с проверкой xsd в java-библиотеках [ex: spring config xml files], если ваши XML-файлы указывают конкретный URL-адрес
schemaLocation
xsd в XML-файле, напримерxsi:schemaLocation="http://somewhere http://somewhere/something.xsd"
, как правило, в одном из в вашей секции зависимости будет содержаться копия этого xsd-файла в разделе ресурсов, а весна имеет функцию «сопоставления», говорящую, что она обрабатывает этот файл xsd, как если бы он сопоставлялся с URLhttp://somewhere/something.xsd
( поэтому вы никогда не попадаете в сеть и не загружаете файл, он просто существует локально). См. Также https://stackoverflow.com/a/41225329/32453 для получения дополнительной информации.
Если вы войдете в любое из этих мест, вы найдете то, что определено в этой схеме. Например, он сообщает вам, каков тип данных значения ключевых слов ini-метода.
xmlns
является уникальным идентификатором внутри документа - он не должен быть URI для схемы:
пространства имен XML предоставляют простой метод для определения имен элементов и атрибутов, используемых в документах расширяемого языка разметки, путем связывания их с пространствами имен, идентифицированными ссылками URI.
blockquote>
xsi:schemaLocation
должен давать подсказку относительно фактического расположения схемы:может использоваться в документе, чтобы давать подсказки относительно физического расположения документов схемы, которые могут использоваться для оценки.
blockquote>