Ssqllogo
SuperSQL

概要实例设计

Schema
在本页中使用以下的方案。
actor与 film的关系表示为act,act使actor和film进行相互联结,act的属性film,act的film和act属性,分别指的是film与actor的id。

关于actor, film的pict属性

pict属性被定义为文字型,属性值为图片的文件名。 根据这样的图片文件名的属性在SuperSQL的生成结果中加入图片显示。 相应的,如果在使用SuperSQL进行图片显示时,就必须加入pict这样的属性

【例】如果想要在输出结果中显示演员的照片,应在actor关系中加入图片的文件名
actor (1, 'Tom Hanks', '1956/7/9', 'American leading actor ・・・', 'tomhanks.jpg')
actor (2, 'Tom Cruise', '1962/7/3', 'An actor whose name ・・・', 'tomcruise.jpg')
・・・

关于利用pict属性的图片的表示方法的问题将在“SuperSQL函数(imagefigle函数)中进行详细说明。

Q1试试使用基本的布局运算符吧!

GENERATE HTML [
f.title ,

{ { "Director", f.dir }! { "Running", f.length } }!

f.story

]!
FROM film f
Q1

Q1的解说

在这里将介绍Super SQL检索中最基本的运算符。下面的查询将显示各个电影的信息。

被称作连接符的两个运算符“,”、“!”可以将属性以水平或者垂直的形式连接起来。“,”为水平连接符,“!”为垂直连接符。
GENERATE HTML [
f.title ,

{ { "Director", f.dir } ! { "Running", f.length } } !

f.story

]!



“[]!”被称为迭代符,可以将属性值尽兴水平或者垂直的反复表示。“[]!”为垂直迭代符,“[],”为水平迭代符。
GENERATE HTML [
f.title ,

{ { "Director" , f.dir } ! { "Running" , f.length } } !

f.story

]!


使用大括弧“{}”括住的部分表示为一个单元进行处理。
GENERATE HTML [
f.title ,

{ { "Director", f.dir } ! { "Running" , f.length } } !

f.story

]!


在Super SQL中,将要表示的字符串用半角双引号标记后,可以直接表示字符串。
GENERATE HTML [
f.title ,

{ { "Director", f.dir } ! { "Running" , f.length } } !

f.story

]!


在这个查询中,“Director”和f.dir连接起来。先将“Running”和f.
length水平连接起来,然后将垂直连接起来的表格作为一个单元和f.title水平连接起来,接下来和f.
story垂直连接起来。将全部内容括起来的垂直迭代符,可以使得信息的属性逐个表示出来。

Q3「 试试显示图片吧!(imagefile函数)」


GENERATE HTML [
f.title !
{
imagefile(f.pict, path="./img/film/") ,
{
{ "Director" , f.dir }!

{ "Running" , f.length }!

{ "Starring", [ actor.name ]! }
}
}!
f.story

]!
FROM film f, actor actor, act a
WHERE a.film = f.id
AND a.actor = actor.id
Q3

Q3的解说

在Super SQL中使用image函数可以解决显示图片的问题,现在Super SQL查询例子对imagefile函数的使用方法予以介绍。

Imagefile函数的第一个参数是“包含图像文件名得属性”。第二个参数是“图像的路径”。关于图像的路径:绝对路径和相对路径均可以使用。在使用相对路径的情况下要以/public_html/ssql/为起始点。

在film的表格中,pict属性包括各个电影的文件名;各个电影的图像文件被置放于/public_html/ssql/img/film/位置。在此使用相对路径的方法表示。
GENERATE HTML [
・・・
imagefile(f.pict, path="./img/film/") ,

・・・
FROM film f, actor actor, act a
・・・

Q4-1

Q4「试试生成超级链接吧②!(link函数とFOREACH语句)」

【Q4-1】
GENERATE HTML [
"In-Theater Movies" !

[ link(f.title, file="Q4-2.sql", att=f.id) ]!

]!
FROM film f

Q4-2 【Q4-2】
FOREACH f.id
GENERATE HTML [
f.title !
{
imagefile(f.pict, path="./img/film/") ,
{
{ "Director" , f.dir }!
{ "Running" , f.length }!
{

"Starring" ,
[ link(actor.name, file="Q4-3.sql", att=actor.id) ]!

}
}
}!
f.story
]!
FROM film f, actor actor, act a
WHERE a.film = f.id
AND a.actor = actor.id

Q4-3 【Q4-3】

FOREACH actor.id
GENERATE HTML [
{
{
actor.name!

{ "birthday", actor.birthday }

},
imagefile(actor.pict, path="./img/actor/")
}!
actor.biography!
{
"Filmography", [ link(f.title, file="Q4-2.sql", att=f.id) ]!

}
]!
FROM film f, actor actor, act a
WHERE a.film = f.id
AND a.actor = actor.id

Q4-1,2,3的解说

在SuperSQL中使用link函数和FOREACH语句可以生成与深度连接符一样的超链接。同时,也可以对深度连接符不可能生成的相互连接予以生成

link函数的第一个参数是连接对象的属性。第2个参数是要跳转到页面的文件名。第3个参数是进行跳转页面所指定的属性,FOREACH语句在生成 跳转到页面的查询中给予记述。根据FOREACH中指定的属性值生成相对应的页面。因为要使用link函数和FOREACH中指定属性值生成对应的URL ,因此,link函数的第三个参数与FOREACH中指定的属性必须一致。并且在跳转到的页面一定能被识别出来的属性(主键等)。

下面对上述的查询予以说明

在【Q4-1】中生成电影的一览表。

GENERATE HTML [
"In-Theater Movies" !
[ link(f.title, file="Q4-2.sql", att=f.id) ]!

]!

使用link函数,生成页面中,电影名带有能够跳转到电影详细信息页面的链接。 使用file中指定的查询文件名和att中指定的属性值对跳转的URL进行生成, URL为“第2个参数指定的生成查询文件名”+"_"+“第三个参数指定的属性值”。 例如上面例子中的“泰坦尼克号”中的id为10000时,泰坦尼克号链接的URL为 “http://・・・/Q4-2_10000.html”

在【Q4-2】中生成各个电影的详细信息页面

FOREACH f.id
GENERATE HTML [
・・・
{
"Starring" ,
[ link(actor.name, file="Q4-3.sql", att=actor.id) ]!

}
・・・
]!

使用FOREACH语句对指定的每个属性生成HTML时,各个HTML的文件名命名为“查询文件名”+"_"+指定属性的值。 在这个查询中根据每个id生成了各个电影的相信信息页面。就是说有id属性的数目个html文件被生成。 例如id为“1000”的“泰坦尼克号”对应的详细信息页面为"Q4-2_10000.html"。id为“10001”的“大决战”对应的详细信息页面为“Q4-2_10001.html”。 像这样如果link函数的第3个参数和FOREACH中指定的属性保持一致时,link函数生成的URL对应的HTML文件名与FOREACH语句生成的各个HTML文件名也保持一致,这样链接也可以跟着移动

另外在这个查询中使用link函数生成各个演员的个人信息页面的链接。

在【Q4-3】中生成各个演员的详细信息页面

FOREACH actor.id
GENERATE HTML [
・・・
{
"Filmography",

[ link(f.title, file="Q4-2.sql", att=f.id) ]!

}
]!

在这里与演员出演的电影列表对应的,生成电影列表的链接。 像上面所描述的例如“泰坦尼克号”对应生成的链接“http://・・・/Q4-2_10000.html”, 除了生成Q4-2“泰坦尼克号”的详细链接外,也可以同时生成电影和演员页面间的相互链接

像这样使用link函数和FOREACH语句结合使用后,可以生成深度链接符所不能生成的相互链接。

Q5「试试使用聚合函数吧!(sum, max, min, avg, count函数)」

Q5

GENERATE HTML
{
"Title" , "Running" , "MAX" , "MIN" , "AVG"

}!
[
[ f.title , f.length ]! ,
max[f.length],
min[f.length],
avg[f.length]

]!
FROM film f

Q5的解说

在SuperSQL中 sum, max, min, avg, count等聚合函数都可以使用。
GENERATE HTML
・・・
[ f.title , f.length ]! ,

max[f.length],
min[f.length],
avg[f.length]

]!
FROM film f

像这样在聚合函数中加入对象属性的参数,就可以获得相应的聚合运算值。

Q6「试试使用局部排序的功能吧!」

Q6

GENERATE HTML [
(asc2)f.title !
{
{
{ "Director" ! f.dir }!
{ "Running" ! (desc1)f.length }

},
{ "Starring" , [ (asc3)actor.name ]!
}
}!
f.story
]!
FROM film f, actor actor, act a
WHERE a.film = f.id
AND a.actor = actor.id

Q6的解说

在SuperSQL中可以对属性值或聚合函数值进行排序。并且可以控制排序的升降序。

GENERATE HTML [
(asc2)f.title !
{
{
{ "Director" ! f.dir }!
{ "Running" ! (desc1)f.length }

},
{ "Starring" , [ (asc3)actor.name ]!
}
・・・

在要进行排序的对象的属性前面加上"asc(升序) 或 desc(降序)" + "顺序",并在两端加上小括号“()”。 在这个查询中,首先对上映时间进行降序排序,在上映时间相同的情况下,就对题目进行升序排序,最后对演员的名字进行升序排序。这样SuperSQL就可以进行局部排序了。

解説

在SuperSQL中可以使用各种各样的样式修饰符。本页介绍的,为了各项的子查询容易看出,我们将省略,实际中会根据使用不同的 修饰符而显示不同的效果。

在这里介绍下加入样式修饰符后的查询示例。

SuperSQL中可以允许使用的修饰符种类

cssfile, title, charset, description, keyword, author, pragma, robot, class, background-color, font-color, font-size, font-weight, font-style, border, border-width, tableborder, width, height, margin, padding, align, valign, divalign

Q1

GENERATE HTML [
f.title@{width=200, align=center, bgcolor="#EEEECC"},
{
{ "Director"@{width=70, bgcolor="lightcyan"}, f.dir@{width=200} }!
{ "Running"@{width=70, bgcolor="azure"}, f.length@{width=200} }

}!
f.story@{width=470}
]!
FROM film f

Q2

GENERATE HTML [
f.title@{width=500, align=center, bgcolor="#EEEECC"}!
{
{

{ "Director"@{align=center, width=200, bgcolor="lightcyan"}! f.dir@{align=center, width=200} %br }!
{ "Running"@{align=center, width=200, bgcolor="azure"}! f.length@{align=center, width=200} }
},
{ "Starring"@{align=center, width=100, bgcolor="lavender"},
[ actor.name@{width=200, height=30} %
{
actor.name@{width=200, bgcolor="#EEEECC"},
{ "Birthday"@{width=100, bgcolor="lightcyan"}, actor.birthday@{width=100 } }!

{ "Biography"@{width=400, bgcolor="azure"}! actor.biography@{width=400} }

}
]!
}
}!
f.story@{width=500}
]!
FROM film f, actor actor, act a
WHERE a.film = f.id
AND a.actor = actor.id

Q3

GENERATE HTML [
f.title@{width=450, align=center, bgcolor="#EEEECC"}!
{
imagefile(f.pict, path="./img/film/")@{width=150, height=200},

{
{ "Director"@{align=center, width=100, bgcolor="lightcyan"}, f.dir@{width=200} }!

{ "Running"@{align=center, width=100, bgcolor="azure"}, f.length@{width=200} }!

{ "Starring"@{align=center, width=100, bgcolor="lavender"}, [ actor.name@{width=200} ]! }

}

}!
f.story@{width=450}
]!
FROM film f, actor actor, act a
WHERE a.film = f.id
AND a.actor = actor.id

Q4-1

GENERATE HTML [
"In-Theater Movies"@{width=400, align=center, bgcolor="#EEEECC"}!
[ sinvoke(f.title@{width=400}, file="Q4-2.sql",att=f.id) ]!
]!
FROM film f

Q4-2

FOREACH f.id
GENERATE HTML [
f.title@{width=450, align=center, bgcolor="#EEEECC"}!
{
imagefile(f.pict, path="./img/film/")@{width=150, height=200},

{
{ "Director"@{align=center, width=100, bgcolor="lightcyan"}, f.dir@{width=200} }!

{ "Running"@{align=center, width=100, bgcolor="azure"}, f.length@{width=200} }!

{ "Starring"@{align=center, width=100, bgcolor="lavender"},
[ sinvoke(actor.name@{width=200}, file="Q4-3.sql", att=actor.id) ]! }


}

}!
f.story@{width=450}
]!
FROM film f, actor actor, act a
WHERE a.film = f.id
AND a.actor = actor.id

Q4-3

FOREACH actor.id
GENERATE HTML [
{
{
actor.name@{width=300, align=center, bgcolor="#EEEECC"}!

{ "birthday"@{align=center, width=100, bgcolor="lightcyan"}, actor.birthday@{width=200} }

},
imagefile(actor.pict, path="./img/actor/")@{width=100, height=100}
}!
actor.biography@{width=400}!
{
"Filmography"@{align=center, width=100, bgcolor="lavender"},
[ sinvoke(f.title@{width=300}, file="Q4-2.sql", att=f.id) ]!

}
]!
FROM film f, actor actor, act a
WHERE a.film = f.id
AND a.actor = actor.id

其他功能
关于SuperSQL其他功能的解说

OPTIMIZER功能
SuperSQL在生成HTML时,对多余字符串有删除的功能。
此功能可以通过在执行Super SQL时追加optimizer选项来实现。
※使用OPTIMIZER功能可能会改变HTML的布局构造。



使用optmizer并且想在任意地方插入表格标签的时候使用修饰标记符tabletype=nest。以下是使用后的例子。
GENERATE HTML [
f.title !
{
imagefile(f.pict, path="./img/film/") ,
{
{ "Director" , f.dir }!

{ "Running" , f.length }!

{ "Starring", [ actor.name ]! }

}@{tabletype=nest}
}!
f.story
]!
FROM film_e f, actor_e actor, act a
WHERE a.film = f.id
AND a.actor = actor.id
Q3_opt