Как вы связываете XML с XSD?
Интересно, как мы используем -declaration для привязки XML к DTD, как мы это делаем с XSD?
Образец MSDN:
<?xml version="1.0"?>
<Product ProductID="123"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Product.xsd">
<ProductName>Rugby jersey</ProductName>
</Product>
это XSI:NoNamespaceSchemaLocation, которая делает трюк? Или это просто другое пространство имен?
[Редактировать] И это
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
..line только для предоставления нам уникального пространства имен XML, или он также предоставляет информацию о том, где схема может быть расположена?
4 ответа
Попробуйте schemaLocation.
<?xml version="1.0"?>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
noNamespaceSchemaLocation отличается. Обратите внимание, что в действительности оба они являются лишь "подсказками" для потребителя XML-документа. Я никогда не сталкивался с процессором xml, который не следовал за ними; в конце концов, это рекомендация W3C. см. http://www.w3.org/TR/xmlschema-1/
Но действительно, это может пойти не так, как здесь, но опять же, это считается ошибкой по причине.
Короче говоря: я просто доверяю, без вреда пока:-)
Я не думаю, что какой-либо полуприличный xml-процессор может игнорировать этот "намек" в наши дни.
URL всегда для уникальности, но в некоторых случаях некоторая информация будет предоставлена под URL.
xsi:noNamespaceSchemaLocation и xsi:schemaLocation предоставляют подсказки для процессоров XML, которые решили выполнить эти подсказки. Но они только намеки. Они не обязательно приводят ваш документ к проверке по схеме.
Это не глупый вопрос, но Джон Сондерс понимает это правильно.
как мы используем -decleration для привязки XML к DTD, как мы это делаем с XSD?
Вот суть проблемы - вы не можете. Одна из проблем с подходом DTD заключалась в том, что в документе указан механизм проверки, а не потребитель документа. После DTD вы можете взять документ XML и проверить его с помощью XSD или RELAX NG или каким-либо другим механизмом - они не связаны (по крайней мере в теории). Любая ссылка XSD является только подсказкой и является необязательной. Невозможно проверить произвольный документ.
Обычно я просто включаю пространство имен и ожидаю, что если кто-то обрабатывает, он заботится о его проверке, тогда они получат схему и настроят свою среду обработки так, чтобы она могла найти XSD. Я имел ограниченный успех с xsi:schemaLocation
и такие атрибуты. Большинство проблем обычно связаны с поиском самого файла XSD. Некоторые процессоры хотят, чтобы путь был включен, что очень интересно, если XSD находится в файловой системе, а не на веб-сервере.
Кажется, что каждый процессор реализует поиск немного по-своему. Некоторые используют отдельные объекты каталога схем, другие требуют, чтобы вы загружали и прикрепляли схемы отдельно. Если вы не предоставляете код для обработки документов, лучше не включать xsi:schemaLocation
или же xsi:noNamespaceSchemaLocation
ПО МОЕМУ МНЕНИЮ. Единственное, что может сделать их включение - это помешать тому, кто обрабатывает ваш документ, либо поместить схему в то же место, либо найти способ заставить выбранный процессор игнорировать или обойти спецификацию расположения.
Как примечание, самая большая проблема, с которой я столкнулся, была на самом деле с DTD, которые были определены с использованием SYSTEM
декларация о том, что "c:\somepath\doc.dtd"
, Проблема заключалась в том, что я обрабатывал документы на коробке FreeBSD. Я закончил тем, что написал свой собственный распознаватель для сопоставления путей в стиле Windows с локальной файловой системой, поскольку я не мог изменять сами документы и был обязан их проверять.