Datenbank-Abfragen (QUERY-Tag)
Um die Anzahl von Datensätzen einer Datenquelle in der Ausgabe einzuschränken oder sie sortiert auszugeben, können Abfragen erstellt werden.
Syntax
Eine Abfrage wird mit einem QUERY-Tag begonnen. Das QUERY-Tag ist gleichzeitig das Wurzelelement der Abfrage.
Innerhalb des öffnenden und schließenden QUERY-Tags können weitere Tags angegeben werden, über die Filter- und Sortierungsregeln definiert werden können. Alle diese Tags werden bei der Abfrage berücksichtigt.
Mit dem Parameter entityType wird der symbolische Tabellenname im Datenbank-Schema angegeben, damit die Abfrage auf die Datensätze der zugehörigen Datenbank-Tabelle angewendet werden kann.
Die hier vorgestellte Syntax kann z. B.
- in Abfragen selbst (in der Vorlagen-Verwaltung unter "Datenbank-Schemata", deaktivierter „Wizard Mode“),
- mit der Funktion contentSelect oder
- für die Eingabekomponente CMS_INPUT_CONTENTLIST (Tag QUERY)
verwendet werden.
Vorlagen für eine Abfrage können für eine Tabelle des Datenbank-Schema mithilfe einer Abfrage (in der Vorlagen-Verwaltung unter "Datenbank-Schemata") im so genannten „Wizard Mode“ erstellt werden. Über das Register „Ergebnis“ bzw. „Ergebnis (Freigabe)“ kann das Abfrageergebnis direkt geprüft werden. Wird dieser Modus nach Fertigstellung der Abfrage verlassen (Checkbox deaktivieren), erhält man den Quellcode der Abfrage. Einige Funktionen, z. B. Sortierungen, können nicht über den „Wizard Mode“ abgebildet werden, die Syntax für diese Funktionen muss manuell hinzugefügt werden. |
Vergleichswerte
Für einige Abfragetypen wird ein Vergleichswert benötigt (z. B. bei Verwendung von EQ / NEQ, GT / LT, GTE / LTE, LIKE, siehe Tabelle). Dies kann unter Verwendung des Tags FILTERPARAM geschehen, oder direkt in den Abfrage-Tags EQ / NEQ, GT / LT, GTE / LTE und LIKE.
Vergleichswerte in der contentSelect-Funktion
In einer contentSelect-Funktion werden Vergleichswerte im so genannten Definitionsteil angegeben, und zwar über
<CMS_VALUE_PARAM name="BEZEICHNER" value="AUSDRUCK" />
für Variableninhalte
oder
<CMS_PARAM name="BEZEICHNER" value="KONSTANTE"/>
für Konstanten.
In diesem Fall muss im so genannten Abfrageteil das Tag FILTERPARAM verwendet werden, z. B.
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="Anrede" datatype="java.lang.String" value="Frau"/>
<EQ attribute="Anrede_DE" parameter="Anrede"/>
</QUERY>
Alternativ können Vergleichswerte auch direkt im Abfrageteil definiert werden. In diesem Fall ist keine Definition über <CMS_VALUE_PARAM ...> bzw. <CMS_PARAM .../> erforderlich. Der Vergleichswert wird dann über eines der Tags EQ, NEQ, GT, GTE, LT, LTE bzw. LIKE angegeben, z. B.
<QUERY entityType="TABELLENNAME">
<EQ attribute="Anrede_DE" datatype="java.lang.String" value="Frau"/>
</QUERY>
Vergleichswerte in Abfragen
In Abfragen (in der Vorlagen-Verwaltung unter "Datenbank-Schemata") gibt es ebenfalls zwei Möglichkeiten, Vergleichswerte zu definieren: direkt auf dem Register „Bedingungen “ oder mit Vorbelegung auf dem Register „Parameter“.
Auf dem Register „Bedingungen “ können Vergleichswerte direkt im Feld einer Bedingungsspalte eingegeben bzw. ausgewählt werden (siehe Abbildung). Der Vergleichswert wird dann direkt im Abfrageergebnis berücksichtigt.
Die zugehörige Syntax lautet
<QUERY entityType="TABELLENNAME">
<EQ attribute="Anrede_DE" datatype="java.lang.String" value="Frau"/>
</QUERY>
Dabei sind die Parameter attribute, datatype und value anzugeben:
Für attribute wird der Name der Spalte im Schema angegeben, die für den Vergleich herangezogen werden soll.
Mit dem Parameter datatype wird der Datentyp für den Vergleich angegeben (vgl. hierzu auch das Tag FILTERPARAM).
Der Parameter value dient zur Angabe des Vergleichswerts.
Wird in einer Bedingungsspalte hingegen aus der Dropdown-Liste der Eintrag [neuer Parameter] ausgewählt, kann ein Vergleichswert erstellt werden, der auf dem Register „Parameter“ erscheint (siehe Abbildung). Der Bezeichner wird auf dem Register „Bedingungen “ definiert, der gewünschte Wert wird auf dem Register „Parameter“ zugewiesen.
Auf diesen Parameter besteht z. B. Zugriff auf dem Register „Daten“ von Seitenreferenzen, in denen Datensätze aus der betreffenden Tabelle eingebunden sind („Content-Projektion“). Der Wert kann dort direkt geändert werden, um das Abfrageergebnis zu modifizieren.
Die zugehörige Syntax lautet
<QUERY entityType=TABELLENNAME">
<FILTERPARAM parameter="Anrede" datatype="java.lang.String" value="Frau"/>
<EQ attribute="Anrede_DE" parameter="Anrede"/>
</QUERY>
Hier wird das Tag FILTERPARAM notwendig.
Im Tag EQ wird für attribute ebenfalls der Name der Spalte im Schema angegeben, die für den Vergleich herangezogen werden soll. Der Parameter parameter dient zur Angabe des Bezeichners des über FILTERPARAM definierten Vergleichswerts.
DTD-Darstellung
Die DTD-Darstellung der Syntax für das QUERY-Tag:
<!DOCTYPE QUERY [
<!-- "and" compare ("&&") -->
<!ELEMENT AND (EQ|GT|GTE|IS_NULL|LIKE|LT|LTE|NEQ|NOTNULL|OR)+>
<!-- equals ("==") -->
<!ELEMENT EQ (#PCDATA)>
<!ATTLIST EQ
attribute CDATA #REQUIRED
parameter CDATA #IMPLIED
datatype CDATA #IMPLIED
value CDATA #IMPLIED>
<!ELEMENT FETCHMODE (#PCDATA)>
<!ATTLIST FETCHMODE
attribute CDATA #REQUIRED
lazy (0|1) #REQUIRED>
<!ELEMENT FILTERPARAM (#PCDATA)>
<!ATTLIST FILTERPARAM
parameter CDATA #REQUIRED
datatype CDATA #REQUIRED
value CDATA #REQUIRED>
<!-- greater than (">") -->
<!ELEMENT GT (#PCDATA)>
<!ATTLIST GT
attribute CDATA #REQUIRED
parameter CDATA #IMPLIED
datatype CDATA #IMPLIED
value CDATA #IMPLIED>
<!-- greater than or equals (">=") -->
<!ELEMENT GTE (#PCDATA)>
<!ATTLIST GTE
attribute CDATA #REQUIRED
parameter CDATA #IMPLIED
datatype CDATA #IMPLIED
value CDATA #IMPLIED>
<!-- is null ("== null") -->
<!ELEMENT IS_NULL (#PCDATA)>
<!ATTLIST IS_NULL
attribute CDATA #REQUIRED>
<!-- "like" compare ("%") -->
<!ELEMENT LIKE (#PCDATA)>
<!ATTLIST LIKE
attribute CDATA #REQUIRED
parameter CDATA #IMPLIED
datatype CDATA #IMPLIED
value CDATA #IMPLIED>
<!-- lesser than ("<") -->
<!ELEMENT LT (#PCDATA)>
<!ATTLIST LT
attribute CDATA #REQUIRED
parameter CDATA #IMPLIED
datatype CDATA #IMPLIED
value CDATA #IMPLIED>
<!-- lesser than or equals ("<=") -->
<!ELEMENT LTE (#PCDATA)>
<!ATTLIST LTE
attribute CDATA #REQUIRED
parameter CDATA #IMPLIED
datatype CDATA #IMPLIED
value CDATA #IMPLIED>
<!-- not equals ("!=") -->
<!ELEMENT NEQ (#PCDATA)>
<!ATTLIST NEQ
attribute CDATA #REQUIRED
parameter CDATA #IMPLIED
datatype CDATA #IMPLIED
value CDATA #IMPLIED>
<!-- not null ("!= null") -->
<!ELEMENT NOTNULL (#PCDATA)>
<!ATTLIST NOTNULL
attribute CDATA #REQUIRED>
<!-- "or" compare ("||") -->
<!ELEMENT OR (AND|EQ|GT|IS_NULL|LIKE|LT|LTE|NEQ|NOTNULL)+>
<!-- sorting order criteria -->
<!ELEMENT ORDERCRITERIA (#PCDATA)>
<!ATTLIST ORDERCRITERIA
attribute CDATA #REQUIRED
descending (0|1) #IMPLIED>
<!-- root tag -->
<!ELEMENT QUERY (AND|EQ|FETCHMODE|FILTERPARAM|GT|GTE|IS_NULL|LIKE|LT|LTE|NEQ|NOTNULL|OR|ORDERCRITERIA)*>
<!ATTLIST QUERY
entityType CDATA #REQUIRED>
]>
QUERY-Tags
Folgende Tags können innerhalb eines öffnenden und eines schließenden QUERY-Tags verwendet werden:
Tag-Name | Bedeutung |
---|---|
Verwendung eines Vergleichswerts in der Abfrage – mit Definition eines Rückfallwertes. | |
Festlegung, ob alle Daten eines Datensatzes sofort oder bei Zugriff geladen werden sollen. | |
Sortierung der Datensätze des Abfrageergebnisses. | |
Verknüpfung mehrerer Regeln mittels UND oder ODER. | |
Der angegebene Vergleichswert stimmt mit dem Wert in der Datenbankspalte überein (Prüfung auf Gleichheit). | |
Der angegebene Vergleichswert stimmt mit dem Wert in der Datenbankspalte nicht überein (Prüfung auf Ungleichheit). | |
Der Wert in der Datenbankspalte ist größer als der angegebene Vergleichswert (Größer-Prüfung). | |
Der Wert in der Datenbankspalte ist größer oder gleich dem angegebenen Vergleichswert (Größergleich-Prüfung). | |
Der Wert in der Datenbankspalte ist kleiner als der angegebene Vergleichswert (Kleiner-Prüfung). | |
Der Wert in der Datenbankspalte ist kleiner oder gleich dem angegebenen Vergleichswert (Kleinergleich-Prüfung). | |
Kein Wert für die Datenbankspalte gesetzt (Null-Prüfung). | |
Wert für die Datenbankspalte gesetzt (Nicht-Null-Prüfung). | |
Der angegebene Vergleichswert ähnelt dem Wert in der Datenbankspalte (Ähnlichkeit-Prüfung). | |
Tag FILTERPARAM
Über das Tag FILTERPARAM können Vergleichswerte in der Abfrage verwendet werden.
Da diese Werte häufig Werte aus einer Variablen sind (z. B. aus einer Eingabekomponente, aus der Struktur-Verwaltung o.ä.), ist das Tag die Verbindungsstelle zwischen der Datenbank und FirstSpirit.
<FILTERPARAM parameter="BEZEICHNER" datatype="DATENTYP" value="VERGLEICHSWERT"/>
Parameter parameter in contentSelect-Funktionen
Für den Parameter parameter ist bei der Verwendung in einer contentSelect-Funktion als Wert der Bezeichner des Parameters, wie er im Definitionsteil definiert ist (über das Attribut name), anzugeben.
(Definitionsteil)
<CMS_FUNCTION name="contentSelect" resultname="BEZEICHNER">
<CMS_PARAM name="schema" value="DATENBANKSCHEMANAME" />
<CMS_VALUE_PARAM name="von" value="st_startDate" />
(Abfrageteil)
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" ... />
...
</QUERY>
</CMS_FUNCTION>
Parameter parameter in Abfragen
Bei der Verwendung in Abfragen (in der Vorlagen-Verwaltung unter "Datenbank-Schemata") entspricht dem über parameter definierten Bezeichner der Bezeichner des Parameters auf dem Register Parameter (siehe Abbildung).
Parameter datatype
Mit dem Parameter datatype wird der Datentyp des Wertes angegeben. Der Typ sollte mit dem Datentyp der Spalte im Schema übereinstimmen, damit es nicht zu einem Fehler bei der Ausführung der Abfrage kommt.
Gebräuchliche Datentypen sind:
- java.util.Date für Datumsspalten
- java.lang.String für String-Spalten
- java.lang.Boolean für Boolean-Spalten
- java.lang.Double für Double-Spalten
- java.lang.Integer für Integer-Spalten
- java.lang.Long für Long-Spalten
Zusätzlich gibt es besondere Datentypen für Datumsspalten:
- de.espirit.common.Now für den Startzeitpunkt der Veröffentlichung
- de.espirit.common.Today für Heute.
Beispiel bei Verwendung in einer contentSelect-Funktion:
<CMS_FUNCTION name="contentSelect" resultname="BEZEICHNER">
<CMS_PARAM name="schema" value="DATENBANKSCHEMANAME" />
<CMS_VALUE_PARAM name="von" value="st_startDate" />
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" datatype="java.util.Date" ... />
...
</QUERY>
</CMS_FUNCTION>
Parameter value in Abfragen
In Abfragen (in der Vorlagen-Verwaltung unter "Datenbank-Schemata") ist der Parameter value ein Pflichtparameter. Während mit parameter der Bezeichner des Parameters angegeben wird, wird mit value der (Vergleichs)Wert angegeben.
Parameter value in contentSelect-Funktionen
In contentSelect-Funktionen handelt es sich bei value um einen Vorbelegungswert. Dieser Parameter sollte immer definiert werden. Er wird benötigt, wenn kein Parameter mit dem in parameter angegebenen Bezeichner im Definitionsteil definiert wurde.
Beispiel:
<CMS_FUNCTION name="contentSelect" resultname="BEZEICHNER">
<CMS_PARAM name="schema" value="DATENBANKSCHEMANAME" />
<CMS_VALUE_PARAM name="von" value="st_startDate" />
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" datatype="java.util.Date" value="1143758280000" />
...
</QUERY>
</CMS_FUNCTION>
Tag FETCHMODE
Da ein Datensatz im Abfrageergebnis potenziell große bzw. viele Daten enthält – insbesondere bei Fremdschlüsseln – kann es sinnvoll sein, die Daten der Fremdschlüssel (das so genannte „Datensatzattribut“) erst bei Zugriff bzw. bei der Weiterverarbeitung zu laden.
Um das Ladeverhalten solcher Attribute zu ändern, gibt es das Tag FETCHMODE.
Das Tag verfügt über zwei Parameter:
- attribute
- lazy
Für attribute wird der Name der Spalte im Schema angegeben, für die das Ladeverhalten geändert werden soll.
Mit dem Parameter lazy wird festgelegt, wie die Daten der Spalte geladen werden sollen. lazy=1 bedeutet, dass die Daten bei Bedarf geladen werden (= Standardeinstellung). lazy=0 bedeutet, dass die Daten sofort geladen werden.
Tag ORDERCRITERIA
Das Tag ORDERCRITERIA dient dazu, das Ergebnis einer Abfrage zu sortieren. Dazu kann in jedem Tag ein Sortierkriterium angegeben werden.
Mit dem Pflichtparameter attribute wird die Tabellenspalte angegeben, die als Sortiergrundlage dienen soll.
Innerhalb des Parameters kann der Platzhalter %lang% verwendet werden, der bei einer Vorschau/Generierung gegen die Abkürzung der aktuellen Sprache ausgetauscht wird (z. B. DE, EN usw).
Beispiel:
<ORDERCRITERIA attribute="date"... />
<ORDERCRITERIA attribute="text_%lang%"... />
...
Weiterhin gibt es die Möglichkeit, mit dem Parameter descending die Sortierrichtung zu ändern. Wird der Parameter nicht angegeben, wird die Ergebnismenge der Abfrage aufsteigend (descending="0") sortiert. Wird descending="1" definiert, so wird die Ergebnismenge absteigend sortiert.
<ORDERCRITERIA attribute="date" descending="0" />
<ORDERCRITERIA attribute="text_%lang%" />
...
Tag AND / OR
Mit dem AND-/OR-Tag ist es möglich, mehrere Abfrage-Tags / Regeln, wie z. B. EQ , LIKE , IS_NULL , miteinander zu verknüpfen.
Tags, die in einem AND-Tag angegeben werden, werden logisch-und- und in einem OR-Tag logisch-oder-verknüpft.
Die Schachtelung von AND- und OR-Tags ist nur abwechselnd möglich.
Beispiel für eine nicht zulässige Schachtelung:
...
<AND>
<AND>
<EQ attribute="abbreviation" value="etc" />
</AND>
</AND>
...
Beispiel für eine zulässige Schachtelung:
...
<AND>
<OR>
<AND>
<EQ attribute="abbreviation" value="etc" />
</AND>
</OR>
</AND>
...
Beim folgenden Beispiel werden als Ergebnismenge der Abfrage alle Daten ausgegeben, bei denen Abfrage1 und (Abfrage2 oder Abfrage3) zutreffen:
<AND>
<ABFRAGE1... />
<OR>
<ABFRAGE2... />
<ABFRAGE3... />
</OR>
</AND>
Tag EQ (Equal)
Das Tag EQ wird verwendet, um Abfragen zu definieren, die alle Datensätze zurückliefern, deren Inhalt in der überprüften Spalte mit dem Vergleichswert übereinstimmt (Gleichheitsprüfung).
Die Definition eines EQ-Tags kann direkt oder mithilfe einer Variablen erfolgen (siehe Abschnitt Vergleichswerte).
Direkte Definition:
<QUERY entityType="TABELLENNAME">
<EQ attribute="SPALTENNAME" datatype="DATENTYP" value="VERGLEICHSWERT" />
...
</QUERY>
Unter Verwendung einer Variablen:
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" datatype="java.util.Date" value="1143758280000" />
<EQ attribute="SPALTENNAME" parameter="von" />
...
</QUERY>
Tag NEQ (Not Equal)
Das Tag NEQ wird verwendet, um Abfragen zu definieren, die alle Datensätze zurückliefern, deren Inhalt in der überprüften Spalte nicht mit dem Vergleichswert übereinstimmt (Ungleichheitsprüfung).
Die Definition eines NEQ-Tags kann direkt oder mithilfe einer Variablen erfolgen (siehe Abschnitt Vergleichswerte).
Direkte Definition:
<QUERY entityType="TABELLENNAME">
<NEQ attribute="SPALTENNAME" datatype="DATENTYP" value="VERGLEICHSWERT" />
...
</QUERY>
Unter Verwendung einer Variablen:
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" datatype="java.util.Date" value="1143758280000" />
<NEQ attribute="SPALTENNAME" parameter="von" />
...
</QUERY>
Tag GT (greater than)
Das Tag GT wird verwendet, um Abfragen zu definieren, die alle Datensätze zurückliefern, deren Werte in der überprüften Spalte größer sind, als der angegebene Vergleichswert (Größerprüfung).
Die Definition eines GT-Tags kann direkt oder mithilfe einer Variablen erfolgen (siehe Abschnitt Vergleichswerte).
Direkte Definition:
<QUERY entityType="TABELLENNAME">
<GT attribute="SPALTENNAME" datatype="DATENTYP" value="VERGLEICHSWERT" />
...
</QUERY>
Unter Verwendung einer Variablen:
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" datatype="java.util.Date" value="1143758280000" />
<GT attribute="SPALTENNAME" parameter="von" />
...
</QUERY>
Tag GTE (greater than or equal)
Das Tag GTE wird verwendet, um Abfragen zu definieren, die alle Datensätze zurückliefern, deren Werte in der überprüften Spalte größer oder gleich dem angegebenen Vergleichswert sind (Größer-/Gleichprüfung).
Die Definition eines GTE-Tags kann direkt oder mithilfe einer Variablen erfolgen (siehe Abschnitt Vergleichswerte).
Direkte Definition:
<QUERY entityType="TABELLENNAME">
<GTE attribute="SPALTENNAME" datatype="DATENTYP" value="VERGLEICHSWERT" />
...
</QUERY>
Unter Verwendung einer Variablen:
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" datatype="java.util.Date" value="1143758280000" />
<GTE attribute="SPALTENNAME" parameter="von" />
...
</QUERY>
Tag LT (less than)
Das Tag LT wird verwendet, um Abfragen zu definieren, die alle Datensätze zurückliefern, deren Werte in der überprüften Spalte kleiner sind als der angegebene Vergleichswert (Kleinerprüfung).
Die Definition eines LT-Tags kann direkt oder mithilfe einer Variablen erfolgen (siehe Abschnitt Vergleichswerte).
Direkte Definition:
<QUERY entityType="TABELLENNAME">
<LT attribute="SPALTENNAME" datatype="DATENTYP" value="VERGLEICHSWERT" />
...
</QUERY>
Unter Verwendung einer Variablen:
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" datatype="java.util.Date" value="1143758280000" />
<LT attribute="SPALTENNAME" parameter="von" />
...
</QUERY>
Tag LTE (less than or equal)
Das Tag LTE wird verwendet, um Abfragen zu definieren, die alle Datensätze zurückliefern, deren Werte in der überprüften Spalte kleiner oder gleich dem angegebenen Vergleichswert sind (Kleiner-/Gleichprüfung).
Die Definition eines LTE-Tags kann direkt oder mithilfe einer Variablen erfolgen (siehe Abschnitt Vergleichswerte).
Direkte Definition:
<QUERY entityType="TABELLENNAME">
<LTE attribute="SPALTENNAME" datatype="DATENTYP" value="VERGLEICHSWERT" />
...
</QUERY>
Unter Verwendung einer Variablen:
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" datatype="java.util.Date" value="1143758280000" />
<LTE attribute="SPALTENNAME" parameter="von" />
...
</QUERY>
Tag IS_NULL
Das Tag IS_NULL wird dazu verwendet, Abfragen zu definieren, die alle Datensätze zurückliefern, die keinen Wert in der überprüften Spalte haben (Null-Prüfung).
<QUERY entityType="TABELLENNAME">
<IS_NULL attribute="SPALTENNAME" />
...
</QUERY>
Bei der Definition ist der Parameter attribute anzugeben.
Für attribute wird der Name der Spalte im Schema angegeben, die für den Vergleich herangezogen werden soll.
Tag NOTNULL
Das Tag NOTNULL wird dazu verwendet, Abfragen zu definieren, die alle Datensätze zurückliefern, die einen Wert in der überprüften Spalte haben (Nicht-Null-Prüfung).
<QUERY entityType="TABELLENNAME">
<NOTNULL attribute="SPALTENNAME" />
...
</QUERY>
Bei der Definition ist der Parameter attribute anzugeben.
Für attribute wird der Name der Spalte im Schema angegeben, die für den Vergleich herangezogen werden soll.
Tag LIKE
Das Tag LIKE wird verwendet, um Abfragen zu definieren, die alle Datensätze zurückliefern, deren Werte in der überprüften Spalte ähnlich zum angegebenen Vergleichswert sind (Ähnlichkeitsprüfung).
Bei der Angabe des Vergleichswerts kann der Platzhalter % verwendet werden, der für beliebige Zeichen steht.
Die Angabe von %aus liefert somit alle Begriffe zurück, die auf aus enden, z. B. Maus, Haus usw.
Die Definition eines LIKE-Tags kann direkt oder mithilfe einer Variablen erfolgen (siehe Abschnitt Vergleichswerte).
Direkte Definition:
<QUERY entityType="TABELLENNAME">
<LIKE attribute="SPALTENNAME" datatype="DATENTYP" value="VERGLEICHSWERT" />
...
</QUERY>
Unter Verwendung einer Variablen:
<QUERY entityType="TABELLENNAME">
<FILTERPARAM parameter="von" datatype="java.util.Date" value="1143758280000" />
<LIKE attribute="SPALTENNAME" parameter="von" />
...
</QUERY>