Настройка ссылок с помощью Запрос-конструктора

Материал из ODANT Wiki
Перейти к: навигация, поиск

Часто возникает потребность "тянуть" данные из прилинкованых объектов. При линковании xml код объекта что линкуется помещается в код объекта в который линкуется. Если линкуемый объект достаточно большой, а еще если и в нем есть прилинкованные объекты, то мы рискуем получить объект, замусоренный ненужной информацией. Чтобы избежать таких случаев нужно чтоб вместе с объектом линковалась только рабочая информация. Делается это с помощью Запрос-конструктора ссылок, найти его можно в атрибутах поля-ссылки.
По-умолчанию в нем описан запрос для подтягивания всех полей объекта, например:

element OBJECT 
{
	*/(@Порода, @Кличка, @Масть, @ДатаРожд, @Клеймо, @Заводчик, @ИНВлад, @ФИОВлад, @АдресПрож, @Примечания, @ТелефВлад, @НомСпрОПроис, 
           @НомерРодос, @НомЗапВПлемКниг, @НомерЧипа, @Фото, @Фото1, @Cовладелец, @АдресПерв, @ТелефПерв, @Фото2, @Стать, @Отец, @Мать, @РегисНомер, 
           @Приставка, @НомерОтец, @НомерМать, @ДиплСокр, @ОценЭксСокр, @НомерСерт, @ДатаПолСер, @НомерПасп, @ДатаПолПас, @НомерКниги, @ДатаПолКниг, 
           @ВысотВхол, @КосДлинПоТул, @ОбхвГруди, @ОбхвПясти, @ТипШерсти, @ДопПром, @ПройдТест, @ИнСовл, @ФИОВладОтца, @ФИОВладМат, @КОС,
           @Свид,@Прис),<br> 
	element Порода
	{
		Порода/(@НазвПороды)
	}[@*], 
	element Масть
	{
		Масть/(@Масть)
	}[@*], 
	element ФИОВлад
	{
		ФИОВлад/(@НомерБиле, @Фамилия, @Имя, @Отчество, @ДатаРожд, @ДатаВстуВКлуб, @Фото, @Телефон, @Email, @ЧленВДругОбщ, @ЧленВФед, 
                         @БаланГрн, @Гос, @Регион, @Район, @НПункт, @Улица, @Дом, @Корпус, @Кв, @Индекс, @Адресс)
	}[@*], 
	element Cовладелец
	{
		Cовладелец/(@НомерБиле, @Фамилия, @Имя, @Отчество, @ДатаРожд, @ДатаВстуВКлуб, @Фото, @Телефон, @Email, @ЧленВДругОбщ, @ЧленВФед, 
                            @БаланГрн, @Гос, @Регион, @Район, @НПункт, @Улица, @Дом, @Корпус, @Кв, @Индекс, @Адресс)
	}[@*], 
	element Отец
	{
		Отец/(@Порода, @Кличка, @Масть, @ДатаРожд, @Клеймо, @Заводчик, @ИНВлад, @ФИОВлад, @АдресПрож, @Примечания, @ТелефВлад, @НомСпрОПроис,
                      @НомерРодос, @НомЗапВПлемКниг, @НомерЧипа, @Фото, @Фото1, @Cовладелец, @АдресПерв, @ТелефПерв, @Фото2, @Стать, @Отец, @Мать,
                      @РегисНомер, @Приставка, @НомерОтец, @НомерМать, @ДиплСокр, @ОценЭксСокр, @НомерСерт, @ДатаПолСер, @НомерПасп, @ДатаПолПас, 
                      @НомерКниги, @ДатаПолКниг, @ВысотВхол, @КосДлинПоТул, @ОбхвГруди, @ОбхвПясти, @ТипШерсти, @ДопПром, @ПройдТест, @ИнСовл, 
                      @ФИОВладОтца, @ФИОВладМат, @КОС, @Свид, @Прис)
	}[@*], 
	element Мать
	{
		Мать/(@Порода, @Кличка, @Масть, @ДатаРожд, @Клеймо, @Заводчик, @ИНВлад, @ФИОВлад, @АдресПрож, @Примечания, @ТелефВлад, @НомСпрОПроис,
                      @НомерРодос, @НомЗапВПлемКниг, @НомерЧипа, @Фото, @Фото1, @Cовладелец, @АдресПерв, @ТелефПерв, @Фото2, @Стать, @Отец, @Мать, 
                      @РегисНомер, @Приставка, @НомерОтец, @НомерМать, @ДиплСокр, @ОценЭксСокр, @НомерСерт, @ДатаПолСер, @НомерПасп, @ДатаПолПас, 
                      @НомерКниги, @ДатаПолКниг, @ВысотВхол, @КосДлинПоТул, @ОбхвГруди, @ОбхвПясти, @ТипШерсти, @ДопПром, @ПройдТест, @ИнСовл, 
                      @ФИОВладОтца, @ФИОВладМат, @КОС, @Свид, @Прис)
	}[@*], 
	element ФИОВладОтца
	{
		ФИОВладОтца/(@НомерБиле, @Фамилия, @Имя, @Отчество, @ДатаРожд, @ДатаВстуВКлуб, @Фото, @Телефон, @Email, @ЧленВДругОбщ, @ЧленВФед, 
                             @БаланГрн, @Гос, @Регион, @Район, @НПункт, @Улица, @Дом, @Корпус, @Кв, @Индекс, @Адресс)
	}[@*], 
	element ФИОВладМат
	{
		ФИОВладМат/(@НомерБиле, @Фамилия, @Имя, @Отчество, @ДатаРожд, @ДатаВстуВКлуб, @Фото, @Телефон, @Email, @ЧленВДругОбщ, @ЧленВФед, 
                            @БаланГрн, @Гос, @Регион, @Район, @НПункт, @Улица, @Дом, @Корпус, @Кв, @Индекс, @Адресс)
	}[@*]
}
element Масть
	{
		Масть/(@Масть)
	}[@*] - это ссылка в том классе, на который установлена данная ссылка.

Из всей тонны этого текста нам могут понадобиться только некоторые поля. Попробуем привести код ссылки к оптимальному для нас варианту:

element OBJECT 
{
	*/(@Порода, @Кличка, @Масть, @ДатаРожд, @ФИОВлад),

	element ФИОВлад
	{
		ФИОВлад/(@Фамилия, @Имя, @Отчество)
	}[@*]
	
}

Тоесть теперь мы сможем с помощью XQuery запросов тянуть только значения тех полей, которых мы указали в запрос-конструкторе. Это избавит нас от хранения в объекте ненужной информации.