Несоответствующие пространства имен в xmlns и атрибуты schemaLocation в документе XML - PullRequest
0 голосов
/ 11 апреля 2019

Я нашел пример в w3schools , который показывает, как обращаться к XML-схеме.

Для следующего XSD (note.xsd) ...:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.w3schools.com"
xmlns="https://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

... Предлагается экземпляр XML:

<?xml version="1.0"?>

<note
xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3schools.com/xml note.xsd">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

Обратите внимание, что xmlns и xsi:schemaLocation в документе XML имеют разные URI пространств имен . Я знаю, что URI не анализируются и не запускают сетевую активность, но правильно ли в этом случае определять разные URI (, даже если доменные имена совпадают )?

1 Ответ

1 голос
/ 11 апреля 2019

Похоже, это не правильно. Эти пространства имен должны совпадать, иначе валидатор не будет связывать пространство имен документа XML (в данном случае - пространство имен по умолчанию, https://www.w3schools.com) с соответствующими объявлениями / определениями элементов в схеме из note.xsd.

Давайте проверим данный XML по схеме выше:

XML validation failed

А теперь проверьте XML-документ с совпадающими пространствами имен:

XML validation is successful

На мой взгляд, это просто опечатка, потому что тот же фрагмент XML (но с соответствующими пространствами имен) представлен в следующем разделе .

...