Как вы связываете XML с XSD? - PullRequest
       13

Как вы связываете XML с XSD?

20 голосов
/ 12 апреля 2009

Интересно, как мы используем -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, которая делает трюк? Или это просто другое пространство имен?

[EDIT] И это

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

.. строка только для того, чтобы предоставить нам уникальное пространство имен XML, или она также предоставляет информацию о том, где может находиться схема?

Ответы [ 4 ]

18 голосов
/ 12 апреля 2009

Попробуйте 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>

noNamespaceSchemaРасположение отличается. Обратите внимание, что в действительности оба они являются лишь «подсказками» для потребителя XML-документа. Я никогда не сталкивался с процессором xml, который не следовал за ними; в конце концов, это рекомендация W3C. см http://www.w3.org/TR/xmlschema-1/

Но на самом деле, может пойти не так, как здесь , но опять же, это считается ошибкой по причине.

Короче говоря: я просто доверяю этому, пока без вреда: -)

Я не думаю, что какой-либо полуприличный xml-процессор может игнорировать этот «намек» в наши дни.

URL-адреса всегда для уникальности, но в некоторых случаях некоторая информация будет предоставлена ​​в URL.

4 голосов
/ 12 апреля 2009

xsi: noNamespaceSchemaLocation и xsi: schemaLocation предоставляют подсказки для процессоров XML, которые решили выполнить эти подсказки. Но они только намеки. Они не обязательно приводят ваш документ к проверке по схеме.

3 голосов
/ 12 апреля 2009

Это не глупый вопрос, но Джон Сондерс имеет право .

Как мы используем -decleration для привязки XML к DTD, как мы это делаем с XSD?

Вот суть проблемы - вы не можете. Одна из проблем, связанных с подходом DTD, заключалась в том, что в документе указан механизм проверки, а не потребитель документа. После DTD вы можете взять документ XML и проверить его с помощью XSD или RELAX NG или каким-либо другим механизмом - они не связаны (по крайней мере в теории). Любая ссылка XSD является только подсказкой и является необязательной. Невозможно проверить произвольный документ .

3 голосов
/ 12 апреля 2009

Обычно я просто включаю пространство имен и ожидаю, что если кто-то обрабатывает, он захочет проверить его, тогда он получит схему и настроит свою среду обработки, чтобы она могла найти XSD. У меня был ограниченный успех с xsi:schemaLocation и такими атрибутами. Большинство проблем обычно связаны с поиском самого файла XSD. Некоторые процессоры хотят, чтобы этот путь был включен, что очень интересно, если XSD находится в файловой системе вместо веб-сервера.

Кажется, что каждый процессор реализует поиск немного по-своему. Некоторые используют отдельные объекты каталога схем, другие требуют, чтобы вы загружали и прикрепляли схемы отдельно. Если вы не предоставляете код для обработки документов, вам лучше не включать xsi:schemaLocation или xsi:noNamespaceSchemaLocation IMHO. Единственное, что может сделать их включение - это помешать тому, кто обрабатывает ваш документ, либо поместить схему в то же место, либо найти способ заставить выбранный процессор игнорировать или обойти спецификацию расположения.

Как примечание, самая большая проблема, с которой я столкнулся, была на самом деле с DTD, которые были определены с помощью объявления SYSTEM, которое ссылалось на "c:\somepath\doc.dtd". Проблема заключалась в том, что я обрабатывал документы на коробке FreeBSD. В итоге я написал свой собственный распознаватель для сопоставления путей в стиле Windows с локальной файловой системой, поскольку не мог изменить сами документы и был обязан их проверять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...