2009-10-11 4 views
2

Когда-то у меня был действительный doctype и действительный XML. Я положил первое на второе, cntrl-s'd и вот: все было так, как должно быть. В настоящее время у меня есть действительная схема (настраиваемая для моего по-прежнему действительного XML). Я пробовал использовать один и тот же проверенный и надежный подход - но, увы, никакого успеха.Действительный XML, Действительная схема. Где я ошибся?

Я получаю разные ошибки с каждым используемым валидатором, и все же новые ошибки в браузерах я отправляю (но это имеет смысл). Поэтому я не уверен, что я должен дать, чтобы быть наиболее полезным. Validome говорит:

Невозможно найти объявление элемента 'xs: schema'.

и

Разметка в документе после корневого элемента должна быть хорошо сформирован.

(но!)

Если бы полезно иметь XML и схемы, пожалуйста не стесняйтесь спросить, я просто подумал, что, поскольку они являются действительными и W3 Я бы попытался оставить их вначале. Все, что я делаю, это поставить схему поверх XML и отправить ее через валидатор/браузер.

Спасибо!

+0

Вы пытались сократить свой XML до одного элемента и протестировать его против вашей схемы? – 2009-10-11 17:02:44

+0

Да. Ну, до двух элементов на самом деле и нескольких детей, как требует схема. –

ответ

3

@Nona Схема - это хорошо сформированный документ, а также ваш экземпляр. Если, однако, вы объединяете их, результат уже не является корректным.

Если что у вас есть:

<xs:schema ...>...</xs:schema> 
<myxml ...>...</myxml> 

не это не очень хорошо образован (ни один корневой элемент)

Причина, почему подход DTD отличается тем, что внутреннее подмножество специально разрешено быть добавлено к корневому элементу. Таким образом:

<DOCTYPE myxml [ 
... my DTD ... 
]> 
<myxml ...>...</myxml> 

хорошо сформирован.

К сожалению, не совсем тривиально связать схему с экземпляром. Возможно, вам придется посмотреть на xsi:schema-location.

ОБНОВЛЕНИЕ К сожалению, ответ будет зависеть от используемой вами структуры программного обеспечения. AFAIK не существует способа упаковки документа и схемы таким образом, чтобы любое программное обеспечение принимало и пыталось проверить. Вот почему схемы намного больше, чем DTD.

Вот простой сайт, на котором вы можете отправить два документа и проверить.

Все, что за пределами этого может потребоваться, знание программного обеспечения. Будут различные подходы в зависимости от того, используете ли вы ORACLE, Microsoft и т. Д.Это может быть сделано путем вызова методов для загрузки документа, загрузки схемы, а затем проверки или настройки свойств (как это можно сделать в Xerces).

Ответ может зависеть от того, почему вы это делаете. Если вы отправляете документы владельцу схемы, тогда у них будет система проверки достоверности. Если вам нужно valiadte против чужой схемы, тогда вам нужно будет получить программное обеспечение схемы и запустить это. Вы на MS или Unix/Java?

MORE UPDATE Предлагайте What's the best way to validate an XML file against an XSD file? Как они говорят, что нет ультра-простого подхода.

+0

Зачем мне связываться со схемой-местоположением, когда я пытаюсь встроить его? Я googled это хотя и однажды неспособный вывести следующий шаг. Может быть, вы могли бы помочь мне с другим указателем? –

+0

Inlining - отличная идея. В принципе схема является многоразовой и может проверять многие документы. Повторение этого документа в каждом документе противоречит этому принципу и может вызвать проблемы, если схема когда-либо понадобится изменить. –

0

Просто удар в темноте, но есть ли префикс пространства имен XML Schema, объявленный в корневом элементе? Это xmlns: xs = "http://www.w3.org/2001/XMLSchema". Если префикс пространства имен не привязан к имени пространства имен, то документ недействителен.

+0

Да, у меня есть это пространство имен. спасибо, хотя –

0

С риском указания очевидного вы можете рассмотреть причины, по которым объявление элемента xs: schema не может быть найдено валидатором.

Вторая ошибка указывает на отсутствие где-то углового скобки или на наличие некоторых элементов, которые не вложены должным образом.

+0

Но, как я уже сказал, он хорошо сформирован. Я считаю, что ошибка вводит в заблуждение и вытекает из другой проблемы. Что касается «очевидного», то я не вижу абсолютно никакой причины, что его невозможно найти, если он заключен в действительную схему. –