Другой стиль, применяемый при
условии, что все названия элементов уникальны в пределах пространства имен,
заключается в создании схем, в которых все элементы будут глобальными. Это
подобно эффекту использованию <!ELEMENT> в DTD. Ниже, в примере, мы изменили
оригинал po1.xsd
таким
образом, что все элементы объявлены глобально. Обратите внимание, в этом
примере мы опустили атрибуты elementFormDefault
и attributeFormDefault
, чтобы подчеркнуть, что их значения
являются ненужными, когда объявляются только глобальные элементы и атрибуты.
Измененная версия po1.xsd,
использующая только объявления глобальных элементов
<schema xmlns=”http://www.w3.org/2001/XMLSchema” xmlns:po=”http://www.example.com/PO1” targetNamespace=”http://www.example.com/PO1”> <element name=”purchaseOrder” type=”po:PurchaseOrderType”/> <element name=”shipTo” type=”po:USAddress”/> <element name=”billTo” type=”po:USAddress”/> <element name=”comment” type=”string”/> <element name=”name” type=”string”/> <element name=”street” type=”string”/> <complexType name=”PurchaseOrderType”> <sequence> <element ref=”po:shipTo”/> <element ref=”po:billTo”/> <element ref=”po:comment” minOccurs=”0”/> <!-- etc. --> </sequence> </complexType> <complexType name=”USAddress”> <sequence> <element ref=”po:name”/> <element ref=”po:street”/> <!-- etc. --> </sequence> </complexType> <!-- etc --> </schema>
Данная «глобальная» версия po1.xsd
проверит
правильность примера документа po2.xml,
которая,
как мы
писали ранее, является также правильной схемой и может применяться вместо
«квалифицированной» версии po1.xsd
.
Другими словами, оба подхода, применяемые в схемах, могут быть
использованы для проверки правильности одного и того же документа с одним и тем
же пространством имен по умолчанию. Таким образом, в одном отношении эти два
подхода схемы подобны, хотя в другом важном отношении они различны. Когда все
элементы объявлены глобально, нет возможности использовать преимущества
локальных имен. В схеме Вы можете объявить только один глобальный элемент с
именем "title".
Однако можно локально объявить один элемент с именем "title", который имеет строковый тип, и
является подэлементом "book". В той же самой схеме (целевом пространстве имен) можно
объявить и второй элемент с именем "title", который является перечислением
значений "Mr Mrs Ms".