У меня есть структурированный XML-формат файла, который необходимо сопоставить с более плоским XML-форматом. Обычно я бы создал для этого специальный XSLT-файл и использовал бы карту BizTalk. Тем не менее, мне нравится идея использовать графические карты везде, где это возможно - слишком легко погрузиться прямо в XSLT, но не так просто для тех, кто следует за вами, чтобы быстро понять, что делает карта!
Я подозреваю, что сопоставление может быть достигнуто с помощью функции зацикливания таблиц и функтоида извлечения таблиц, но я пробовал пару часов и не смог: (
Примечание: я не контролирую исходный XSD - это исходит от третьей стороны. Вот оно:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="VehicleTrips">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="Vehicle">
<xs:complexType>
<xs:sequence>
<xs:element name="VehicleID"/>
<xs:element name="VehicleRegistration"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Trips">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="VehicleId"/>
<xs:element name="Distance"/>
<xs:element name="Duration"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
... и вот цель XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Trips">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="VehicleRegistration"/>
<xs:element name="Distance"/>
<xs:element name="Duration"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Подводя итоги, мне нужно изучить Trips, взять VehicleRegistration из Vehicle, набрать VehicleId и скопировать данные в целевую схему.
Кто-нибудь знает, можно ли / как этого достичь, используя только функтоиды (или, возможно, небольшой скрипт в скриптообразном функтоиде)?
Большое спасибо,
Роб.