Почему Oxygen генерирует дочерние элементы с пустыми атрибутами xmlns?

Я пытаюсь понять техническую сторону работы с пространством имен по умолчанию, начиная со схемы (разрабатывая ее) и рассматривая реалистичный и правильный соответствующий файл XML.

Я использую Oxygen для разработки схемы.

В идеале я хотел бы, чтобы пользователю XML-файлов не приходилось иметь дело с пространством имен по умолчанию (потому что они болезненны при попытке использовать XPath для документов, в которых объявлено пространство имен по умолчанию). Однако из того, что я до сих пор читал, кажется, что это невозможно?

Мой пример схемы выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.com/" 
    xmlns="http://www.example.com/">
    <xs:element name="QueryResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Result"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Result">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Patient"/>
            </xs:sequence>
            <xs:attribute name="type" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="VisitNumber" type="xs:string"/>
    <xs:element name="Demographics">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="1" maxOccurs="1" name="firstNames" type="xs:string"/>
                <xs:element minOccurs="1" maxOccurs="1" name="surname" type="xs:string"/>
                <xs:element minOccurs="1" maxOccurs="1" name="dateOfBirth" type="xs:dateTime"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Patient">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Demographics"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

и кислород генерирует пример XML, который выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<QueryResponse xmlns="http://www.example.com/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.example.com/ file:/home/me/simplifiedResponse.xsd">
    <Result>
        <Patient>
            <Demographics>
                <firstNames xmlns="">firstNames0</firstNames>
                <surname xmlns="">surname0</surname>
                <dateOfBirth xmlns="">2006-05-04T18:13:51.0Z</dateOfBirth>
            </Demographics>
        </Patient>
    </Result>
</QueryResponse>

Мой вопрос:

  1. Почему Oxygen генерирует дочерние элементы с пустыми атрибутами xmlns?
  2. Как я могу НАИЛУЧШЕ избежать этого?
  3. Можно ли создать схему, которая может правильно описать и проверить XML-документ, который, скорее, не имеет объявленного пространства имен (по умолчанию или нет).
  4. Если ответ на (c) «да», как бы вы изменили мой пример схемы?
  5. Что такое действительно хороший документ, чтобы объяснить все это немного глубже, но в то же время быть удобочитаемым (например, я не нахожу документы на http://www.w3.org/XML/ вообще легко понять или прочитать).

person svaens    schedule 04.06.2013    source источник


Ответы (1)


  1. Поскольку рассматриваемые элементы не находятся ни в одном пространстве имен. Они не могут использовать альтернативный префикс, потому что неквалифицированные расширенные имена могут быть представлены только именами без префикса. Но они являются потомками элементов, использующих непустое пространство имен по умолчанию. Таким образом, единственный способ, которым они могут появиться в документе, — очистить объявление пространства имен по умолчанию.

  2. Прекратите объявлять элементы как не принадлежащие ни к одному пространству имен. Самый простой подход — добавить elementFormDefault="qualified" к элементу схемы.

  3. да.

  4. Опустите атрибут targetNamespace в xs:schema.

  5. Гугл твой друг.

person C. M. Sperberg-McQueen    schedule 04.06.2013
comment
Привет, спасибо за ответ. Я играл и наткнулся на предложение использовать elementFormDefault=qualified, который избавился от пустых атрибутов xmlns. Но мне оставалось, конечно, либо поместить все результирующие xml-элементы в пространство имен по умолчанию, либо в реальное пространство имен. Итак, чтобы получить самый простой документ, я хотел продвинуться вперед и попробовать ваше предложение по пункту 4. Это привело к ошибкам из-за кислорода. Описание: src-resolve.4.2: Компонент разрешения ошибок «Результат». Было обнаружено, что «Результат» находится в пространстве имен... бла-бла. - person svaens; 04.06.2013
comment
ааа .. Мне пришлось поместить все это в пространство имен не по умолчанию. Ладно, методом проб и ошибок, но мне пока непонятно, зачем это было нужно. Придется найти эту неуловимую иголку в учебнике по стогу сена, который проясняет это ... Google не всегда мой друг. Предпочла бы хорошую обстоятельную книгу. - person svaens; 04.06.2013