Игнорирование предоставленных пространств имен при проверке XML с помощью XSD

Справочная информация:

Мы создаем приложение, которое позволяет нашим клиентам предоставлять данные в заранее заданном (т.е. мы не контролируем ) Формат XML. XSD предоставляется нам третьей стороной, и мы ожидаем получить XML-файл, который проходит проверку схемы перед его обработкой.

Проблема:

XSD, который нам предоставляется, включает в себя пространство имен по умолчанию и целевое пространство имен, что означает, что если клиент предоставит XML-файл, который не включает пространство имен, проверка будет пройдена. Мы, очевидно, не хотим, чтобы они предоставляли вещи, в которых говорится, что они проходят, но не должны, но большая проблема связана с массой дополнительных проверок, которые нам нужно будет выполнить для каждого элемента, если я не могу найти решение сделать проверка XML.

Вопросы:

Можно ли заставить .NET выполнять проверку и игнорировать пространство имен в предоставленных XML и XSD. т.е. каким-то образом «предположить», что пространство имен было прикреплено.

  1. Можно ли легко и надежно удалить пространства имен в памяти?
  2. Каков наилучший метод в таких ситуациях?

Решения, которые у меня есть на данный момент:

  1. Удалять пространство имен из XSD каждый раз он обновляется (не должно быть очень часто. Это не обходит стороной того факта, что если они предоставят пространство имен, оно все равно пройдет проверку.
  2. Удалите пространство имен из XSD И найдите способ каждый раз удалять пространство имен из входящего XML. Кажется, много кода для выполнения чего-то простого.
  3. Выполняет некоторую предварительную квалификацию XML-файла перед его проверкой, чтобы убедиться, что он имеет правильное пространство имен. Кажется неправильным подводить их из-за недопустимого пространства имен, если содержимое файла правильное.
  4. Создайте дубликат XSD, у которого нет пространства имен, однако, если они просто предоставят неправильное пространство имен или другое пространство имен, он все равно пройдет.

Пример XML:

<?xml version="1.0"?>
<xsd:schema version='3.09' elementFormDefault='qualified' attributeFormDefault='unqualified' id='blah' targetNamespace='urn:schemas-blah.com:blahExample' xmlns='urn:blah:blahExample' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
...
</xsd:schema>

с другим пространством имен

 <?xml version="1.0" encoding="UTF-8" ?> 
<root xmlns="urn:myCompany.com:blahExample1" attr1="2001-03-03" attr2="google" >
...
</root>

без пространства имен вообще.

 <?xml version="1.0" encoding="UTF-8" ?> 
<root attr1="2001-03-03" attr2="google" >
...
</root>
12
задан Martin 4 January 2012 в 13:44
поделиться