Mapowanie danych ustrukturyzowanych z wykorzystaniem rozbudowanych funkcji węzłów
Wcześniej informowaliśmy o wsparciu dla funkcji węzłów, które ułatwiają mapowanie danych strukturalnych, eliminując konieczność wielokrotnego kopiowania i wklejania tej samej funkcji w mapowaniu. Powtarzanie tej samej funkcji jest zbędne i utrudnia czytelność oraz modyfikację mapowania danych.
MapForce oferuje również dodatkowe filtry, które można wykorzystać do definiowania funkcji dla poszczególnych węzłów. Te parametry pozwalają programistom przypisywać funkcje i wartości domyślne do konkretnych węzłów, w oparciu o kryteria zdefiniowane przez użytkownika. Na przykład, można zastosować funkcję do węzła w oparciu o metadane węzła, takie jak nazwa węzła, długość węzła, precyzja typu danych węzła, niestandardowe adnotacje węzła i inne.
Przyjrzyjmy się mapowaniu z rozszerzonymi funkcjami węzłów.

The mapowanie danych Poniżej znajduje się przykład funkcji węzła PriceCalculation.mfd, która jest instalowana wraz z MapForc. Ten przykład oblicza ostateczną cenę sprzedaży dla listy produktów, uwzględniając ich koszt początkowy i współczynnik marży. Dane źródłowe to plik tekstowy w formacie CSV, a wynik to plik XML.

W tym opracowaniu, a funkcja węzła jest definiowane i stosowane do elementu "Articles" w pliku wynikowym oraz do jego elementów potomnych. Podwójne kliknięcie ikony funkcji wyróżnionej pogrubieniem, znajdującej się po lewej stronie elementu "Articles", otwiera definicję tej funkcji.

Menu rozwijane "Zastosuj" znajdujące się w lewym górnym rogu wskazuje, że funkcja ma być zastosowana do wszystkich elementów potomnych elementu "Article". Sekcja opisu funkcji informuje, że funkcja ta wykorzystuje element metadanych węzła o nazwie "node_fractionDigits" jako parametr dla funkcji zaokrąglania. Jeśli wartość "node_fractionDigits" nie jest zdefiniowana dla żadnego z elementów potomnych, zostanie zastąpiona wartością zero.
Możemy uzyskać bardziej szczegółowe informacje o funkcji węzła, klikając przycisk "Edytuj" znajdujący się w górnej części środkowej części obrazu. Otworzy to funkcję w osobnym oknie mapowania danych, prezentując ją w sposób podobny do funkcji zdefiniowanej przez użytkownika:

Element mapowania "node_fractionDigits" znajdujący się w lewym dolnym rogu, dostarcza wartość wejściową do funkcji, opartą na strukturze danych docelowych. Przyjrzyjmy się bliżej metadanym węzła, aby zlokalizować element "node_fractionDigits".
Definicja metadanych węzła
Metadane dostępne dla każdego pliku danych strukturalnych pochodzą z definicji samej struktury danych. W naszym przykładzie, element docelowy mapowania to dokument XML. Dlatego metadane dostępne dla każdego elementu są zdefiniowane w schemacie XML.
Poniższy obrazek przedstawia schemat XML dla obliczania cen (PriceCalculation) w graficznym interfejsie XMLSpy

Element XML o nazwie "SalePrice" (cena sprzedaży), wyróżniony na diagramie, jest zdefiniowany jako instancja typu "Amount" (kwota), który sam w sobie jest liczbą dziesiętną z maksymalnie 2 cyframi po przecinku, jak widać w oknie "Facets" (cechy) w prawym dolnym rogu. Dlatego metadane "node_fractionDigits" (liczba cyfr po przecinku) dla węzła "SalePrice" to 2.
Parametry funkcji węzła dostępne dla dowolnego pliku danych strukturalnych zawsze zależą od typu danych – czy jest to plik XML, baza danych relacyjna, plik PDF, plik CSV, itp. – oraz od poziomu szczegółowości zawartego w definicji schematu.
Mapowanie danych strukturalnych za pomocą parametrów funkcji węzłów
Po utworzeniu nowej funkcji węzła, na początku zostanie wyświetlona surowa wartość oraz wynikowa wartość, które nie są ze sobą powiązane. Kliknij przycisk "Dodaj parametry węzła" (w kolorze niebieskim), aby dodać parametr funkcji węzła. Otworzy się okno dialogowe "Parametry węzła", w którym można wybrać odpowiedni parametr:

Należy zwrócić uwagę na opcję, która jest dostępna w sytuacjach, gdy dany węzeł nie obsługuje wybranego typu metadanych. W mapowaniu obliczeń cenowych, to zachowanie jest obsługiwane bezpośrednio w definicji funkcji węzła. Funkcja węzła jest stosowana tylko do typów danych numerycznych, a w przypadku każdego węzła, dla którego nie została określona wartość parametru "fractionDigits", funkcja "substitute-missing" zastępuje brakującą wartość zerem.
Obserwacja działania funkcji węzła
Możemy ustawić punkt przerwania w dowolnym węźle komponentu wyjściowego, korzystając z menu kontekstowego, które pojawia się po kliknięciu prawym przyciskiem myszy. Następnie możemy użyć wbudowanego debugera MapForce, aby obserwować działanie funkcji.
Na poniższym fragmencie kodu, punkt przerwania został ustawiony dla zmiennej SalePrice. Uruchomiliśmy mapowanie z menu debugowania, a wykonanie zatrzymało się na punkcie przerwania. W głównym oknie mapowania wyświetlane są wartości pośrednie.

Możemy zauważyć, że ostatnia wartość dla "SalePrice" obliczona przez funkcję mapowania wynosiła 49,183323875. Funkcja węzła zaokrągliła tę wartość końcową do 49,18.
Wykonanie konkretnej funkcji węzła nie jest wyświetlane w wynikach debugowania w głównym oknie mapowania, ale kliknięcie w oknie "Wiadomości" otwiera funkcję węzła wraz ze wszystkimi wartościami pośrednimi:


Przykłady dołączone do MapForce zawierają również szereg innych mapowań danych dla funkcji węzłów. System pomocy zintegrowany z MapForce zawiera nawet instrukcję krok po kroku, która pokazuje, jak stworzyć mapowanie funkcji węzła od podstaw.
Można nawet zmodyfikować przykładowe odwzorowanie opisane tutaj, aby samodzielnie zobaczyć, jak zmienia się wynik. Na przykład, można edytować schemat XML, aby zezwolić na użycie trzech cyfr po przecinku, lub zmienić odwzorowanie, aby umożliwić wykonanie funkcji węzła na węźle numerycznym, który jest pierwszym podrzędnym elementu "Article", i sprawdzić nowy wynik.
Aby zobaczyć, jak działają funkcje węzłów, zapraszamy do obejrzenia tego demonstracyjnego filmu MapForce.