8045851a51905869eef365fbfc2fe566376bc98b.svn-base
8.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<HTML>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="../temp1.css" type="text/css">
</head>
<body bgcolor=#ffffff vlink=#0000ff>
<div id="Tag10"/>
<Table cols=2 border=0 width=100%>
<col width=60%>
<col width=40%>
<tr height=91><td/><td><img src='devsh.jpg'></td></tr>
</table>
<h3> <font color=#3366ff>附录一:数据格式</font></h3><hr color=#2266ee size=1>
Supcan TreeList、Freeform、Report的外观样式都是由一个XML或JSON文件来描述的,加载的数据则支持XML、JSON、和TSV文本格式,Report的临时数据源还支持HTML格式。<br>
Supcan内置了一个性能极为出色的XML/JSON/HTML解析器。考虑到程序员通常是手工编辑Treelist、Freeform的模板描述文件,难免出错,所以该解析器的另一特色
就是能够解析出不太规范的粗放型XML、JSON文件, 比如对XML的大小写不敏感、对JSON的单引号双引号不敏感、甚至无引号也能正确解析。<br>
<img src='glass.jpg'><font color="552222">当然,你不能粗犷得太离谱.</font><br><br>
无论是XML或JSON描述文件,还是加载的XML、JSON数据,解析器是根据内容自适应的。也就是说,格式和文件(或URL)的后缀没有关系,比如,http://localhost/ack.xml 返回
了JSON数据、http://localhost/ack.json 返回的是XML数据,解析器均能自动识别。<br>
<div id="Tag11"/><br><br><br>
<font style='font-size:15pt'>1.XML</font><hr color=#2266ee size=1>
Supcan Treelist加载的数据、Report数据源加载的XML数据,格式比较简单,例如:<br>
<pre class='xml'>
<?xml version="1.0" encoding="utf-8"?>
<DataRoot>
<Record>
<OrderID>10248</OrderID>
<CustomerID>VINET</CustomerID>
<Freight>1,232.38</Freight>
</Record>
<Record>
<OrderID>10249</OrderID>
<CustomerID>TOMSP</CustomerID>
<Freight>11.60</Freight>
</Record>
...(略)
</DataRoot></pre>
<img src='glass.jpg'><font color="552222">元素<DataRoot>、<Record>的命名是任意的,不一定要写成DataRoot、Record.</font><br><br>
<br><br>
Supcan Treelist、Freeform、Report有固定的XML/JSON语法规则,请参见顶部tab的"Treelist XML文档规范"、"Freeform XML文档规范",Report没有公开文档规范是因为
Report本身就是编辑器,不需要手工书写XML/JSON文件.<br>
<br>
Supcan Treelist、Freeform 的XML格式规范看上去复杂,其实并不复杂,尤其是Treelist,例如:
<pre class='xml'>
<?xml version="1.0" encoding="utf-8"?>
<TreeList>
<Properties Title="订单明细表"></Properties>
<Cols>
<Col name="OrderID" width="70" align="center">订单号|Order ID</Col>
<Col name="CustomerID" width="70">客户号|CustomerID</Col>
<Col name="Freight" width="100" datatype="double">货重|Freight</Col>
</Cols>
</TreeList></pre>
规范中的大部分属性都不需要书写,因为不写就是自动采用默认。在演示包的Treelist子目录下有大量的模板文件,请自行参考。<br>
<br>
对粗放型的XML文件的支持表现在如下几个方面:<br>
1.大小写不敏感,例如:<br>
<table cellpadding=4 width=85% cellspacing=0 border=1 align="center" borderColorLight=#999999 borderColorDark=#999999>
<col align=center><col align=center width=90><col align=center width=110>
<tr bgcolor=#eaeaea><td>片段</td><td>标准解析器</td><td>Supcan解析器</td></tr>
<tr><td align=left><CustomerID>abcde</<font color=red>c</font>ustomer<font color=red>id</font>></td><td><img src="button_cancel.png"></td><td><img src="button_ok.png"></td></tr>
</table><br><br>
2.不带引号,例如:<br>
<table cellpadding=4 width=85% cellspacing=0 border=1 align="center" borderColorLight=#999999 borderColorDark=#999999>
<col align=center><col align=center width=90><col align=center width=110>
<tr bgcolor=#eaeaea><td>片段</td><td>标准解析器</td><td>Supcan解析器</td></tr>
<tr><td align=left><Properties title="物资清单"></Properties></td><td><img src="button_ok.png"></td><td><img src="button_ok.png"></td></tr>
<tr><td align=left><Properties title=物资清单></Properties></td><td><img src="button_cancel.png"></td><td><img src="button_ok.png"></td></tr>
</table><br><br>
3.未转义:<br>
<table cellpadding=4 width=85% cellspacing=0 border=1 align="center" borderColorLight=#999999 borderColorDark=#999999>
<col align=center><col align=center width=90><col align=center width=110>
<tr bgcolor=#eaeaea><td>片段</td><td>标准解析器</td><td>Supcan解析器</td></tr>
<tr><td align=left><Properties title="John<font color=red>&amp;</font>Sam"></Properties></td><td><img src="button_ok.png"></td><td><img src="button_ok.png"></td></tr>
<tr><td align=left><Properties title="John<font color=red>&</font>Sam"></Properties></td><td><img src="button_cancel.png"></td><td><img src="button_ok.png"></td></tr>
</table><br><br>
<div id="Tag12"/><br><br><br>
<font style='font-size:15pt'>2.JSON</font><hr color=#2266ee size=1>
Supcan Treelist加载的数据、Report数据源加载的JSON数据,格式比较简单,例如:<br>
<pre class='xml'>
{"Record": [
{"Country":"Austria","OrderID":"10258","CustomerID":"ERNSH","OrderDate":"2006.07.17"},
{"Country":"Austria","OrderID":"10263","CustomerID":"ERNSH","OrderDate":null},
{"Country":"Austria","OrderID":"10747","CustomerID":"PICCO","OrderDate":"2007.11.19"},
...(略)
]}</pre>
<img src='glass.jpg'><font color="552222">对象名不一定是"Record",你可以任意命名.</font><br>
<img src='glass.jpg'><font color="552222">日期支持类似"\/Date(783643765+0800)\/"的格式; 中文支持类似"\u0f88\u44f0"的格式.</font><br>
<img src='glass.jpg'><font color="552222">也可以写成这样:</font><br>
<pre class='xml'>
[
{"Country":"Austria","OrderID":"10258","CustomerID":"ERNSH","OrderDate":"2006.07.17"},
{"Country":"Austria","OrderID":"10263","CustomerID":"ERNSH","OrderDate":null},
{"Country":"Austria","OrderID":"10747","CustomerID":"PICCO","OrderDate":"2007.11.19"},
...(略)
]</pre>
<br>
<br>
Supcan Treelist、Freeform、Report的模板描述文件和数据,均是既支持XML格式、也支持JSON格式.<br>
例如上例Treelist的XML串,用JSON来表示,就是:<br>
<pre class='xml'>
{
"TreeList": {
"Properties": {"Title":"订单明细表"},
"Cols": [
{"name":"Country", "width":100, "text":"国家|Country"},
{"name":"OrderID", "width":70, "align":"center", "text":"订单号|OrderID"},
{"name":"CustomerID", "width":70, "text":"客户号|CustomerID"},
]
}
}</pre>
XML中的 <Col>国家</Col> 中的"国家"是用 { "text":"国家" } 来代替的。<br>
<br>
对粗放型的JSON文件的支持,主要表现在对引号不敏感,例如:<br>
<table cellpadding=4 width=85% cellspacing=0 border=1 align="center" borderColorLight=#999999 borderColorDark=#999999>
<col align=center><col align=center width=90><col align=center width=110>
<tr bgcolor=#eaeaea><td>片段</td><td>标准解析器</td><td>Supcan解析器</td></tr>
<tr><td align=left>{ "align": "left" }</td><td><img src="button_ok.png"></td><td><img src="button_ok.png"></td></tr>
<tr><td align=left>{ align: "left" }</td><td><img src="button_cancel.png"></td><td><img src="button_ok.png"></td></tr>
<tr><td align=left>{ "align": left }</td><td><img src="button_cancel.png"></td><td><img src="button_ok.png"></td></tr>
<tr><td align=left>{ align: left }</td><td><img src="button_cancel.png"></td><td><img src="button_ok.png"></td></tr>
<tr><td align=left>{ 'align': 'left' }</td><td>不一定</td><td><img src="button_ok.png"></td></tr>
</table><br>
当然,引号必须配对,比如下面的片段Supcan解析器也无法解析:<br>
<table cellpadding=4 width=85% cellspacing=0 border=1 align="center" borderColorLight=#999999 borderColorDark=#999999>
<col align=center><col align=center width=90><col align=center width=110>
<tr bgcolor=#eaeaea><td>片段</td><td>标准解析器</td><td>Supcan解析器</td></tr>
<tr><td align=left>{ "align": "left<font color=red>'</font> }</td><td><img src="button_cancel.png"></td><td><img src="button_cancel.png"></td></tr>
</table><br><br>
此外,Supcan解析器也允许正斜杠不转义:<br>
<table cellpadding=4 width=85% cellspacing=0 border=1 align="center" borderColorLight=#999999 borderColorDark=#999999>
<col align=center><col align=center width=90><col align=center width=110>
<tr bgcolor=#eaeaea><td>片段</td><td>标准解析器</td><td>Supcan解析器</td></tr>
<tr><td align=left>{ "dataURL": "http:\/\/localhost\/index.aspx" }</td><td><img src="button_ok.png"></td><td><img src="button_ok.png"></td></tr>
<tr><td align=left>{ "dataURL": "http://localhost/index.aspx" }</td><td>不一定</td><td><img src="button_ok.png"></td></tr>
</table><br><br>
<div id="Tag13"/><br><br><br>
<font style='font-size:15pt'>3.TSV</font><hr color=#2266ee size=1>
TSV格式只能用作数据格式,不能用来描述模板文件.<br>
TSV格式是不含列信息的纯文本,类似二维的平面结果集,也无法表达树结构。<br>
TSV即 Tab-Seperated Value,以Tab分隔列、回车分隔行 (在C#、Java、js中,Tab是"\t",回车是"\r\n"),所以其废码特别少,耗用的网络流量比XML和JSON都要小得多.<br>
TSV规则简单,转义规则为:<br>
1.如果值串中本身就包含Tab符或回车符,那么请用双引号包绕这个值;<br>
2.如果值串中本身就包含了双引号,那么请用连续2个双引号代替之、再用双引号包绕这个串.<br>
<br><br><br><br><br><br>
<script type='text/javascript' src='nstd.js'></script>
</body></html>