xml: как сослаться на файл .xsd в файле .xml?

Я хочу видеть файл xml в браузере, как я определяю в файле .xsd. Пожалуйста, проверьте следующие два файла и укажите, что мне нужно сделать. Эти два файла находятся в одной папке.

сотрудник.xml

 <?xml version="1.0"?>

<employee xmlns="http://www.w3schools.com" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="employee.xsd">

  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

сотрудник.xsd

<xs:element name="employee">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string" fixed="red" />
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

person RedsDevils    schedule 19.10.2010    source источник


Ответы (1)


Вы допустили две ошибки: одну в файле схемы и другую в синтаксисе значения атрибута xsi:schemaLocation файла XML.

Основная ошибка заключается в том, что ваш файл employee.xsd является лишь фрагментом XML-схемы. Вы должны заполнить содержимое файла employee.xsd. Например,

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://www.w3schools.com/RedsDevils"
    elementFormDefault="qualified"
    xmlns="http://www.w3schools.com/RedsDevils employee.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="employee">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="firstname" type="xs:string" fixed="red" />
                <xs:element name="lastname" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

и сотрудник.xml:

<?xml version="1.0" encoding="utf-8"?>
<employee xmlns="http://www.w3schools.com/RedsDevils"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.w3schools.com/RedsDevils employee.xsd">

    <firstname>John</firstname>
    <lastname>Smith</lastname>
</employee>

Поскольку вы определяете пространство имен по умолчанию в файле XML, атрибут местоположения схемы xsi:schemaLocation должен состоять из пространства имен и пути к схеме, разделенных пробелом. Я изменил имя пространства имен, чтобы оно было более уникальным: "http://www.w3schools.com/RedsDevils" вместо "http://www.w3schools.com".

В конце могу добавить, что XML-файл employee.xml не соответствует схеме employee.xsd, так как элемент <firstname>John</firstname> имеет значение, отличное от red, но, вероятно, именно это вы и хотели проверить.

person Oleg    schedule 19.10.2010
comment
@Oleg Можно ли указать, что каждый «сотрудник» в этом xml должен следовать одной и той же схеме? вместо того, чтобы требовать xsi:schemaLocation в каждом теге ‹employee›? - person David Doria; 20.03.2014
comment
@DavidDoria: Указав XML-схему <employee>, мы устанавливаем схему для всех ее дочерних элементов (например, <firstname> или <lastname>). Обычно один набор xmlns и schemaLocation только для корневого элемента XML-файла. Пример в моем ответе очень короткий. Обычно, например, <employees> является корневым элементом со многими <employee> дочерними элементами. Таким образом, можно было бы определить одну схему для каждого <employee> и дополнительно указать, где <employee> можно разместить внутри корневого элемента <employees>. - person Oleg; 20.03.2014