2010-12-30 4 views
-1

Как мне ожидать, что элемент имеет пространство имен с использованием XSD? На этом этапе я получаю сообщение об ошибке: «Неверный контент был найден, начиная с элемента« ns: person ». Предполагается одно из« {»«: person} ».Проблемы с пространством имен XSD Schema

Как вы можете видеть, я определяю атрибут name на xs:element: «человек». Если я определяю «ns: person» как name, тогда я получаю сообщение об ошибке, что имя недействительно aaarghh.

Что мне здесь не хватает?

Это XSD (ns.xsd):

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="peoples"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="person"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

Это XML (peoples.xml):

<?xml version="1.0" encoding="ISO-8859-1"?> 
<peoples xmlns:ns="url" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ns.xsd"> 
<ns:person> 
     <name>John</name> 
</ns:person> 
</peoples> 
+1

Здесь есть несколько ошибок, и я думаю, вам лучше всего использовать некоторые примеры учебников - например, http://zvon.org/xxl/XMLSchemaTutorial/Output/series.html или http: // www. w3schools.com/schema/default.asp. {Ошибки не включают декларации пространства имен в экземпляре, требуется два пространства имен; нет декларации пространства имен в схеме, нет элемента «имя» в схеме) –

+0

Жаль, что я оставил их для удобочитаемости ... Конечно, они присутствуют в моем файле. Запуск через валидатор дает мне ошибку, как описано. – Ropstah

+0

@ Ropstah: Возможно, вы могли бы отредактировать вопрос и добавить те недостающие элементы обратно, так как их упущение на самом деле * препятствует * удобочитаемости. –

ответ

2

Вы должны включать полный XSD, чтобы помочь вам. Но из ошибки, которую я вижу, и того факта, что вы включили «xsi: noNamespaceSchemaLocation» в ваш документ экземпляра XML, проблема, которую я вижу, заключается в том, что вы определили свою схему с , а не для targetNamespace, но вы имеете квалификацию человек элемент с префикс пространства имен. Просто удалите «ns:» во всех местах вашего документа экземпляра, и вы все хорошо.

+0

Я думаю, что ты прав. Однако проблема заключается в том, что я не могу удалить эти ns: экземпляры (или редактировать что-либо еще в XSD). Есть ли способ разрешить «подстановочные» элементы или элементы, соответствующие регулярному выражению? – Ropstah

+0

Я боюсь, что предварительная обработка XML для удаления «ns:», прежде чем давать это парсеру XML, является единственным вариантом. Но уверены ли вы, что вы получите только xml, у которого есть «ns» в качестве префикса? Все, что можно использовать в качестве имени префикса, в этом случае вам также нужно знать, какой префикс используется перед раздачей. –

+0

Я знаю, что используется префикс 'ns'. В XML-файле также есть объявление xmlns: ns = "url". Есть ли способ указать местоположение соответствующего XSD (для url) в файле ns.xsd? – Ropstah

Смежные вопросы