Mergado 2: Element-Path (technická specifikace)

MERGADO 2: Element-Path

Představujeme vám Element-Path, jazyk kompletně vytvořený ze strany Mergada. Je navrhnutý tak, aby uživatelé mohli v pravidlech a výběrech naplno využít všechny nové možnosti Mergada 2. Přečtěte si, jak tato novinka funguje.

:woman_teacher: Co je Element-Path

  • jazyk pro specifikaci hodnot produktových elementů v Mergadu – cesta k elementu nebo atributu
  • používá se v pravidlech a výběrech produktů
  • cesta k elementu (nebo taky element-path s malými počátečními písmeny) označuje výraz napsaný pomocí Element-Path jazyku
  • výsledkem jedné cesty k elementu (element-path) může být více hodnot a můžeme ji využít v pravidlech pro jednoduchou úpravu vícenásobných elementů.

:question: Rozdíly mezi Mergadem a Mergadem 2

Jak pracuje MERGADO (aktuální verze):

  • produkty jsou zapsány v tabulce
  • jeden řádek = jeden produkt
  • jeden sloupec = jeden element
  • cesta k elementu (element-path) = výběr jednoho sloupce v tabulce
  • MQL je pak výběr konkrétních řádků v tabulce

Jak funguje MERGADO 2:

  • produkty jsou seznamy stromů
  • jeden produkt = jeden strom ze seznamu
  • jedna hodnota elementu = jeden uzel ve stromu
  • jeden element = množina uzlů ve stromu se stejným názvem elementu
  • cesta k elementu (element-path) = výběr libovolného počtu uzlů se stejným názvem elementu
  • MQL = výběr konkrétních stromů ze seznamu

Rozdíly MERGADO vs. MERGADO 2.

:point_right: Příklad na konkrétním produktu:

Produkt:

1. <ITEM id="1">
2.   <NAME>Ukázkový produkt</NAME>
3.   <IMAGE>https://www.imgurl.cz/1/</IMAGE>
4.   <IMAGE>https://www.imgurl.cz/2/</IMAGE>
5.   <IMAGE>https://www.imgurl.cz/3/</IMAGE>
6.   <PRICE>987 Kč</PRICE>
7.   <DESCRIPTION lang="cz">
8.      Vhodný pro názornou ukázku správného použití Element-Path
9.   </DESCRIPTION>
10.  <DESCRIPTION lang="sk">
11.     Vhodný pre názornú ukážku správneho použitia Element-Path
12.  </DESCRIPTION>
13.  <PARAM>
14.      <NAME>Barva</NAME>
15.      <VAL>černá</VAL>
16.  </PARAM>
17.  <PARAM>
18.      <NAME>Materiál</NAME>
19.      <VAL>100% bavlna</VAL>
20.  </PARAM>
21 </ITEM>

:woman_technologist: Různé cesty k hodnotám elementů (element-path):

  • NAME vrátí hodnotu z řádku 2.
  • ID vrátí hodnotu z řádku 1.
  • IMAGE vrátí hodnoty z řádků 3., 4., 5.
  • IMAGE { @@POSITION = 2 } vrátí hodnotu z řádku 4.
  • IMAGE { @@POSITION = 4 } nevrátí nic
  • DESCRIPTION { @lang = "cz" } vrátí hodnotu z řádku 8.
  • DESCRIPTION | @lang vrátí hodnoty z řádků 7., 10.
  • PARAM { NAME = "Barva" } | VAL vrátí hodnotu z řádku 15.
  • PARAM { @@POSITION = 2 OR NAME = "Barva" } | VAL vrátí hodnoty z řádků 15., 19.
  • PARAM { VAL = "100% bavlna" } | VAL vrátí hodnotu z řádku 19.
  • PARAM | NAME vrátí hodnoty z řádků 14., 18.
  • PARAM | NAME { @@POSITION = 1 } vrátí hodnoty z řádků 14., 18.
  • PARAM | NAME { @@POSITION = 2 } nevrátí nic

:clipboard: Specifika Element-Path

  • víceslovné názvy elementů musíte obalit hranatými závorkami:

[Objem motoru] = "2 l"→ ! obalte vždy pouze název jednoho elementu

  • velké množství elementů ve výběru je nežádoucí

ID = 1 nebo ID = 2 nebo ID = 3 → ID ~ “^(1|2|3)$”

  • číselné konstanty se převádí na číslo → problém s 0 na začátku

ID = “0021”

  • neexistence elementu se testuje pomocí rovnosti na prázdný string
  • u vícenásobných elementů stačí, aby jediná hodnota splňovala podmínku

:hammer_and_wrench: Schématický popis pomocí bezkontextové gramatiky

V případě, že vás zajímá i technický popis, můžete se podívat níže.

Popis

Schématický popis pomocí bezkontextové gramatiky

Terminály:

  • FIELD: název elementu uveden v hranatých závorkách, v případě že název elementu neobsahuje mezery, je možné hranaté závorky vynechat.
    • Příklady: [Název produktu], NAME, …
  • ATTRIBUTE: název atributu začínající na znak @.
    • Příklady: @id, @lang, …
  • SPECIAL: speciální vyhrazený atribut začínají na @@.
    • Aktuálně povolené hodnoty: - @@MERGADO_ID - ID produktu v Mergadu.
    • @@POSITION - pozice hodnoty konkrétního elementu v produktu v kontextu stejného rodiče.
  • STRING: hodnota ve feedu rovná textu obaleného v uvozovkách.
    • Příklady: "$120", "<h3>Sleva 20%</h3>", …
  • DECIMAL: hodnota ve feedu rovná číslu.
    • Příklady: 42, 123.456, …

Operátory a jiné funkční znaky:

  • (, ): Závorky pro ohraničení seznamu hodnot a nebo určení precedence u vyhodnocení výpočtů a logických operátor.
  • =, !=: Operátory pro vyhodnocení (ne)rovnosti dvou hodnot (maximálně jeden z operátorů může být konstanta).
  • ~, !~: Operátory pro rozhodnutí, zda-li hodnota (ne)vyhovuje zadanému regulárnímu výrazu (maximálně jeden z operátorů musí být konstanta).
  • in, not in: Operátory pro test (ne)přítomnosti hodnoty v seznamu hodnot.
  • <, >, <=, >=: Matematické operátory pro porovnání velikostí dvou čísel.
  • +, -, *, /: Matematické operátory pro výpočet.
  • and, or, not: Logické operátory.
  • {, }: Závorky ohraničující podmínku pro potomky konkrétního elementu.
  • |: Operátor pro zanoření, nebo-li pro specifikaci konkrétního přímého potomka k zadanému elementu (atribut elementu je jeho přímí potomek).
  • ;: Oddělovač hodnot v seznamu hodnot.

Neterminály s přepisovacími pravidly:

  • elementPath:
    • FIELD { query } | element
    • FIELD { query }
    • FIELD | element
    • ATTRIBUTE
    • FIELD
  • element:
    • elementPath
    • SPECIAL
  • query:
    • query and subquery
    • query or subquery
    • subquery
  • subquery:
    • operation
    • not operation
    • ( query )
    • not ( query )
  • operation:
    • math < math
    • math > math
    • math <= math
    • math >= math
    • math = math
    • math != math
    • operand ~ operand
    • operand !~ operand
    • operand in ( list )
    • operand not in ( list )
  • list:
    • operand ; list
    • operand
  • math:
    • math + submath
    • math - submath
    • submath
  • submath:
    • submath * operand
    • submath / operand
    • operand
  • operand:
    • element
    • DECIMAL
    • - DECIMAL
    • STRING
    • ( math )
    • - ( math )

Máte otázky ohledně nastavení nebo přesunu Mergada 2? Kontaktujte naši podporu a sledujte kategorii na fóru, kde najdete aktuální informace.

2 Likes

:mergado: Přinášíme několik příkladů práce s Element-Path a rozdílů oproti předchozí verzi

1) Hledáme produkty s velikostí 30 obuvi pro výběr z feedu:

<PARAM>
	<PARAM_NAME>Velikost obuvi</PARAM_NAME>
	<VAL>30</VAL>
</PARAM>

MERGADO 1: PARAM|Velikost obuvi = "30"
MERGADO 2: PARAM {PARAM_NAME = "Velikost obuvi"} | VAL = "30"

Pokud známe přesnou pozici elementu ve feedu, může výraz vypadat i následovně:
MERGADO 2: PARAM { @@POSITION = 2 } | VAL = "30"
V případě, že feed obsahuje více elementů <VAL> s hodnotou 30 na druhé pozici v rámci feedu, vrátí všechny takové produkty.

MERGADO 2: PARAM { @@POSITION = 3 } | VAL = "30"
V na třetí pozici neexistuje žádný <VAL> s hodnotou 30. Cesta (element-path) tedy není správně.

2) Hledáme oblečení, u kterého je velikost větší než 1.

<PARAM>
    <PARAM_NAME>Velikost</PARAM_NAME>
    <VAL>2</VAL>
</PARAM>

MERGADO 1: PARAM|Velikost > 1
MERGADO 2: PARAM {PARAM_NAME = "Velikost"} | VAL > 1

3) Chci změnit zápornou hodnotu v ceně za dopravu:

<DELIVERY>
    <DELIVERY_ID>PPL</DELIVERY_ID>
    <DELIVERY_PRICE>-120,00</DELIVERY_PRICE>
    <DELIVERY_PRICE_COD>190</DELIVERY_PRICE_COD>
</DELIVERY>
<DELIVERY>
    <DELIVERY_ID>ZASILKOVNA</DELIVERY_ID>
    <DELIVERY_PRICE>-59,00</DELIVERY_PRICE>
    <DELIVERY_PRICE_COD>128</DELIVERY_PRICE_COD>
</DELIVERY>

Výběr vytvořím následovně:
DELIVERY | DELIVERY_PRICE CONTAINS "-"

V pravidle Hromadně přepsat hodnoty zvolím element:
DELIVERY | DELIVERY_PRICE
a zvolím jaké hodnoty hodnoty přepsat novou.

Pro jednoduché elementy se nic nezměnilo!

4) Hledám dárkové bedny v CUSTOM_LABEL_0:

<CATEGORYTEXT>Potraviny a nápoje | Potraviny | Dárkové potravinové koše</CATEGORYTEXT>
<CATEGORYTEXT>Dárkové Bedny</CATEGORYTEXT>
<CUSTOM_LABEL_0>Dárkové Bedny</CUSTOM_LABEL_0>
<PRODUCT>Bedna s páčidlem Fitness, Bedna pro muže, Dárky pro muže, Dárky pro ženy</PRODUCT>

MERGADO 1: CUSTOM_LABEL_0 = "Dárkové Bedny"
MERGADO 2: CUSTOM_LABEL_0 = "Dárkové Bedny"

5) Hledám produkty, kde název obsahuje postel a jejich cena je vyšší než 4000,-

MERGADO 1: PRODUCTNAME CONTAINS "postel" AND PRICE_VAT < 4000
MERGADO 2: PRODUCTNAME CONTAINS "postel" AND PRICE_VAT < 4000

6) Hledám specifikou variantu, která v atributu @id elementu <VARIANT> obsahuje hodnotu “idvariant3”

<VARIANTS>
<VARIANT id="idvariant3">
<CODE>EEQ21</CODE>
<UNIT>unit</UNIT>
<FREE_SHIPPING>1</FREE_SHIPPING>
<FREE_BILLING>1</FREE_BILLING>

MERGADO 1: nelze jednoduše
MERGADO 2: VARIANTS | VARIANT | @id ~ "idvariant3"

7) Hledám kategorii s id 123

Elektronika Spotrebice

MERGADO 1: DEFAULT_CATEGORY(id=123) - chybný zápis vůči XML
MERGADO 2: CATEGORIES | DEFAULT_CATEGORY | @id = "123"

8) Nahrání vícenásobných elementů v MERGADO 1 a 2:

<IMGURL>https://url1.com</IMGURL>
<IMGURL>https://url2.com</IMGURL>

MERGADO 1: chybně jako element IMGURL a IMGURL|1
MERGADO 2: můžete cílit na jakýkoliv element na kterékoliv pozici IMGURL { @@POSITION = 2 }

Další informace, jak pracovat s vícenasobnými elementy:

1 Like