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