こんにちは。Sitecore MVP の長沢です。
みなさん、Sitecore クエリって使っているでしょうか。 私は、開発時や調査などで、現状、どんなアイテムがあるかを調べる際に使うのですが、あまり使用頻度が高くないため、使うたびにクエリの構文を調べることに。。。
そこで、今日は Sitecore クエリの構文についてまとめてみました。
まず、クエリの基本的な構成ですが、下記のような形になっています。
/sitecore/content/Home//*[@@name='hoge']
この例は、/sitecore/content/Home の配下からアイテム名が hoge のアイテムを取得するクエリになっています。
ここでは、説明のため、パスを指定している部分(上記の例では「/sitecore/content/Home/item//*」の部分)をパス部、
より詳細な検索条件を指定している部分を条件部と呼ぶことにします。(一般的な名称ではなく、あくまでこのページ内で勝手に名付けた呼び名です。)
パス部の書き方
パス部では、下記の記号が特別な意味を持ちます。
記号 | 説明 | 例 |
---|---|---|
/ | 直下のアイテム | /sitecore/content/Home … sitecore直下のcontentの直下のHome |
// | 配下のアイテム | /sitecore/content/Home//test … /sitecore/content/Home配下のtest |
* | 全ての名前のアイテム | /sitecore/content/Home//* ... /sitecore/content/Home配下の全て |
条件部の書き方
条件部では、下記の変数、演算子、関数を使えます。
変数 | 説明 | 例 |
---|---|---|
@<フィールド名> | 指定したフィールドの値 | @Text…テキストフィールドの値 |
@@name | アイテム名 | |
@@key | アイテム名(小文字されたもの) | |
@@templateid | テンプレートID | |
@@templatename | テンプレート名 | |
@@templatekey | テンプレート名(小文字されたもの) | |
@@id | アイテムID |
演算子 | 説明 | 例 |
---|---|---|
+ | 四則演算の加算 | 6 + 4 |
- | 四則演算の減算 | 6 - 4 |
* | 四則演算の乗算 | 6 * 4 |
Div | 四則演算の除算 | 6 div 4 |
Mod | 除算のあまり | 6 mod 4 |
= | 等しい | @@tempaltename = 'BasePage' |
!= | 等しくない | @@tempaltename != 'BasePage' |
< | より小さい | 6 < 4 |
<= | 以下 | 6 <= 4 |
> | より大きい | 6 > 4 |
>= | 以上 | 6 >= 4 |
or | または | @@tempaltename = 'BasePage' or @@tempaltename = 'ArticlePage' |
and | かつ | @@tempaltename = 'BasePage' and @text = '20160401' |
関数 | 説明 | 例 |
---|---|---|
contains(s1:string, s2:string):bool | S1がs2を含む場合に真 | contains(@@templatename,'Page') |
startswith(s1:string,s2:string) :bool | S1がs2から始まる場合に真 | startswith(@@templatename,'Base') |
endswith(s1:string,s2:string) :bool | S1がs2で終わる場合に真 | endswith(@@templatename,'Page') |
last():int | 親アイテムが持つ最後の子供のインデックス | /sitecore/content/Home[last()=2] ... /sitecore/contentが子アイテムを2つ持つ持っている場合に結果が返る |
not(condition:bool):bool | 否定 | not(@@templatename='GeneralPage') |
position():int | 現在のアイテムが、親アイテムの何番目の子供か | /sitecore/content/Home/*[position()=1] ... Homeの1番目の子供が結果として返る |
上記のパス部と条件部を組み合わせることで、さまざまなクエリが発行可能です。
いくつか例を記載します。
- /sitecore/content/Home//*[@title='Sitecore クエリを使ってみよう']
- /sitecore/content/Home 配下のアイテムの中で、title フィールドの値が「Sitecore クエリを使ってみよう」のアイテム
- /sitecore/content/Home/*[position()<=6 and @@templatename!='Folder']
- /sitecore/content/Home 直下の 6 番目までのアイテムで、かつ、テンプレート名が Folder ではないアイテム
- /sitecore/content/Home//article[@@id='{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}']
- /sitecore/content/Home 配下の article という名前のアイテムで、アイテムIDが {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} であるもの
Sitecore クエリは、config で指定されるアイテム取得数の上限の影響を受けるなど、プログラムの中で、クエリを使ってアイテムを取得するような処理を書く場合は、注意が必要です。
ただ、上記のように比較的簡単な構文で柔軟な指定ができるため、入力されたクエリからアイテムを取得するような簡単なツールを作っておくと、開発時や運用時にとても重宝するのでオススメです。