4.3 Использование полученных типов в экземплярах документов

В сценарии нашего примера, счета на покупку сгенерированы в ответ на счета клиентов. Кроме этого могут формироваться и счетах на оплату. В каждом из документов формируются адреса с указанием разных стран. Международный счет на покупку, ipo.xmlпредставленный ниже, иллюстрирует один такой случай, где товары отправлены в Великобританию, а счет послан по американскому адресу. Ясно, что лучше, когда мы просто можем добавлять новые сложные типы международного адреса, посредством создания новых типов из Address. Схема для международных счетов на покупку в этом случае не должна расшифровывать каждую возможную комбинацию международных адресов для счета и отгрузки. XML Схема позволяет нам определять элементы billTo и shipTo как типы Address(см. ipo.xsd), но использовать международные адреса вместо Address. Другими словами, экземпляр документа, содержание которого соответствует типу UKAddress, будет правилен, если содержание появится внутри документа, размещаясь вместо Address (при этом предполагается, что в UKAddress само содержание правильно). Чтобы применить эту возможность XML Schema и точно определить, какой производный тип требуется, производный тип должен быть идентифицирован в экземпляре документа. Тип идентифицируется посредством атрибута xsi:type, который является частью пространства имен XML Schema. В примере, ipo.xml, используются производные типы UKAddress и USAddress, определенные через значения, назначенные атрибутом xsi:type.

Международный счет на покупку, ipo.xml

<?xml version=”1.0”?>
<ipo:purchaseOrder
   xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
   xmlns:ipo=”http://www.example.com/IPO”
   orderDate=”1999-12-01”>

	<shipTo exportCode=”1” xsi:type=”ipo:UKAddress”>
		<name>Helen Zoe</name>
		<street>47 Eden Street</street>
		<city>Cambridge</city>
		<postcode>CB1 1JR</postcode>
	</shipTo>

	<billTo xsi:type=”ipo:USAddress”>
		<name>Robert Smith</name>
		<street>8 Oak Avenue</street>
		<city>Old Town</city>
		<state>PA</state>
		<zip>95819</zip>
	</billTo>

	<items>
		<item partNum=”833-AA”>
			<productName>Lapis necklace</productName>
			<quantity>1</quantity>
			<USPrice>99.95</USPrice>
			<ipo:comment>Want this for the holidays!</ipo:comment>
			<shipDate>1999-12-05</shipDate>
		</item>
	</items>
</ipo:purchaseOrder>

В Разделе 4.8 мы опишем, как предохранить производные типы от использования при таком способе замены.

 

Сайт создан в системе uCoz