Локальная схема - PullRequest
       3

Локальная схема

4 голосов
/ 01 марта 2012

У меня есть XSD-файл, который я использую для проверки некоторых XML-данных, и на моем собственном ПК это работает отлично. Однако на компьютере без сети происходит сбой с этой ошибкой

Серверу не удалось обработать запрос. ---> Тип 'http://schemas.microsoft.com/sqlserver/2004/sqltypes:nvarchar' не объявлен или не является простым типом.

Все же это прекрасно работает в других местах.

Начало моего XSD-файла выглядит следующим образом

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:schema="DataLoad" xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">
<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />

После некоторых исследований я попытался изменить атрибут schemaLocation на

schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes ./bin/sqlTypes.xsd"

По-видимому, это должно загрузить с ./bin/sqlTypes.xsd тогда (я сохранил локальную копию MS в ./bin/sqlTypes.xsd

Но теперь я получаю эту ошибку ...

Серверу не удалось обработать запрос. ---> Невозможно загрузить схему из местоположения 'http://schemas.microsoft.com/sqlserver/2004/sqltypes ./bin/sqltypes.xsd' - корневым элементом XML-схемы W3C должно быть, а его пространство имен должно быть http://www.w3.org/2001/XMLSchema'..

Я новичок в XML-схемах и все еще пытаюсь разобраться с этим.

Ответы [ 2 ]

1 голос
/ 22 января 2013

ОК, похоже, schemaLocation имеет другой синтаксис в этом контексте (сумасшедший, верно?).Как правило, он принимает «$ namespace $ address» (то есть два аргумента, разделенных пробелом - фактически, список таких пар), как вы говорите.

Но в элементе <import> естьспециальный атрибут для пространства имен (называемый namespace), а schemaLocation теперь содержит только адрес.Имеет ли это смысл?Нет. Вот что я думаю, что это означает для вашего примера:

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
  schemaLocation="./bin/sqlTypes.xsd" />

Вот спецификация, определяющая <import>, а schemaLocation явно является просто ури: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#composition-schemaImport

* 1016для сравнения, вот определение <xsi:schemaLocation> (обратите внимание на «xsi» - оно находится в другом пространстве имен, поэтому они могут иметь разные определения, просто излишне запутанно использовать одно и то же имя): http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#xsi.schemaLocation

XML-схема "учебник для начинающих" также различает эти варианты использования: http://www.w3.org/TR/xmlschema-0/#schemaLocation

0 голосов
/ 10 апреля 2012

Атрибут местоположения схемы содержит пары значений «пространство имен», за которыми следует «местоположение схемы».

На вашем локальном компьютере ваше приложение может волшебным образом разрешить схему из просто пространства имен "http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" и загрузить схему (или она не проверяется). Мне нужно знать, как она загружает файлы XML вопределить, как выполняется сопоставление этого пространства имен с схемой.

Примечание , хотя пространство имен "http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" выглядит как URL-адрес, это просто токен и напрямую не сообщает анализатору, где находитсяСхема.

Добавление «./bin/sqlTypes.xsd» сообщает синтаксическому анализатору, что он может загрузить файл по относительному пути из загружаемого XML-файла.Чтобы это работало, XSD-файл (и все его импортируемые / включаемые) должен находиться в этом месте, я полагаю, нет?

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