BizTalk Looping Functoid - PullRequest
       9

BizTalk Looping Functoid

1 голос
/ 27 ноября 2008

У меня есть структурированный 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 и скопировать данные в целевую схему.

Кто-нибудь знает, можно ли / как этого достичь, используя только функтоиды (или, возможно, небольшой скрипт в скриптообразном функтоиде)?

Большое спасибо, Роб.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2008

возможно ли получить вспомогательный образец ожидаемого XML? как насчет идеи того, как вы ожидаете, что ваш файл ответов будет выглядеть. Ожидаете ли вы иметь несколько последовательностей элементов под корнем? Я думаю, было бы проще, если бы у вашей целевой схемы был другой корневой узел.

т.

<Trips>
   <Trip>
      <Registration />
      <Distance />
      <Duration />
   </Trip>
</Trips>

Если вы не используете XSLT, я не думаю, что в противном случае вы сможете поддерживать порядок последовательности элементов.

0 голосов
/ 02 декабря 2008

Похоже, что это можно было бы сделать с помощью циклического и логически равного функтоида. если вы можете предоставить свои фактические схемы или просто образец данных, то это будет легче выяснить.

Схема источника, показанная выше, выглядит так, как будто вы можете сделать это только с помощью петлеобразного функтоида, если у вас может быть несколько.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...