float → Name string → Name boolean → Name

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Remarks to Step by Step Application of Operations
Klaus Benecke e-mail: benecke@iws.cs.uni-magdeburg.de
13. Workshop “Grundlagen von Datenbanken” Gommern 8. Juni 2001 1. To the Specification of XML-Documents 2. A Remark to XPath 3. Operations path and tree 4. Queries on Federated Databases
3
t1 = tag(A, el-tab(”today”)) = <A><string>today</string></A> = <A>today</A> t2 = <SEQ(A)> <A>today</A> <A>yesterday</A> </SEQ(A)> t3 = <A, A> <A>today</A> <A>yesterday</A> <\A, A>
2
def sorts Table (table or document) opers empty-t → Table empty (s: Scheme iff coll?(s) or hetero?(s)) → Table el-tab (Value) → Table add (t1: Table, t2: Table iff equal-s(red(head(t1)), head(t2)) or hetero?(head(t1)) → Table pair (Table, Table) → Table alternate1 (Table, Scheme) → Table alternate2 (Scheme, Table) → Table tag (n: Name, t: Table iff dtd(n) = head(t) | t = empty-t) → Table head (Table) → Scheme axioms n: Name; s: Scheme; t, t1, t2, t3: Table; v: Value head(empty-t) = empty-s if coll?(s) or hetero?(s) then head(empty(s)) = s if equal-s(red(head(t1)), head(t2)) or hetero?(head(t1)) then head(add(t1, t2)) = head(t1) head(pair(t1, t2)) = pair-s(head(t1), head(t2)) pair(empty-t, t) = pair(t, empty-t) = t pair(t1, pair(t2, t3)) = pair(pair(t1, t2), t3) if coll-type(head(t1)) = set & red(head(t1)) = head(t2) = head(t3) then add(add(t1, t2), t3) = add(add(t1, t3), t2) if coll-type(head(t1)) = bag & red(head(t1)) = head(t2) = head(t3) then add(add(t1, t2), t3) = add(add(t1, t3), t2) if head(t1) = coll(set, head(t2)) then add(add(t1, t2), t2) = add(t1, t2) if coll-type(head(t1)) = s1 & head(t2) = head(t3) = red(head(t1)) & t1 = empty(s) then add(add(t1, t2), t3) = add(t1, t2) el-tab(v) = tag(elementary-type(v), v) if dtd(n) = head(t) then head(tag(n, t)) = inj(n) head(tag(n, empty-t)) = inj(n) head(alternate1(t, s)) = alternate-s(head(t), s) head(alternate2(s, t)) = alternate-s(s, head(t)) end
5
dtd(DBPERSON) = (NAME, SALARY, S1(MGR), SET(CHILD)) dtd( NAME) = string, dtd(SALARY) = integer, dtd( MGR) = dtd( CHILD) = idref DBPERSONS = <SET(DBPERSON)> <DBPERSON><NAME>Paul</NAME> <SALARY>100</SALARY> <MGR>Jim</MGR> <CHILD>Julia</CHILD> <CHILD>Robert</CHILD> </DBPERSON> <DBPERSON> <NAME>Paula</NAME> <SALARY>5000</SALARY> </DBPERSON> <DBPERSON> <NAME>Jim</NAME> <SALARY>2000</SALARY> <MGR>Christian</MGR> </DBPERSON> <NAME>Julia</NAME> <SALARY>3000</SALARY> <CHILD>Suse</CHILD> <DBPERSON> <NAME>Christian</NAME> <SALARY>10000</SALARY> </DBPERSON> <DBPERSON> <NAME>SUSE</NAME> <SALARY>0</SALARY> </DBPERSON> <DBPERSON> <NAME>Robert</NAME> <SALARY>4000</SALARY> </DBPERSON> </SET(DBPERSON)>
4
dtd(PERSON) = (NAME, SALARY, S1(MGR), SET(CHILD)), dtd( NAME) = string, dtd(SALARY) = integer, dtd( MGR) = dtd(CHILD) = PERSON PERSONS = <SET(PERSON)> <PERSON><NAME>Paul</NAME> <SALARY>100</SALARY> <MGR> <NAME>Jim</NAME> <SALARY>2000</SALARY> <MGR&g;/NAME> <SALARY>10000</SALARY> </MGR> </MGR> <CHILD> <NAME>Julia</NAME> <SALARY>3000</SALARY> <CHILD> <NAME>SUSE</NAME> <SALARY>0</SALARY> </CHILD> </CHILD> <CHILD> <NAME>Robert</NAME> <SALARY>4000</SALARY> </CHILD> </PERSON> <PERSON> <NAME, SALARY, S1(MGR), SET(CHILD)> <NAME>Paula</NAME> <SALARY>5000</SALARY> </NAME, SALARY, S1(MGR), SET(CHILD)> </PERSON> </SET(PERSON)>
References
http://fuzzy.cs.uni-magdeburg.de/benecke.html [CD99] J. Clark, S.DeRose, XML Path Language (XPath), W3C Recommendation 16.11.1999, /TR/1999/REC-xpath-19991116 [CFMR00] D. Chamberlain, P. Fankhauser, M. Marchiori, J. Robie, „XML query requirement“, /TR/xmlquery-req [CFRSS01] D. Chamberlain, D. Florescu, ... „XQuery: A Query Language for XML“, W3C Working Draft 15.2.2001, /TR/xquery/ [SCS01] K.-U. Sattler, S. Conrad, G. Saake, “Adding Conflict Resolution Features to a Query Language for Database Federations”, submitted for publication [Wil00] K. Williams, ... “XML Databases” , Wrox Press, 2000
6
dtd(DB1_BOOK) = (ISBN, PRICE, SUPPLIER) dtd(DB2_BOOK) = (ISBN, MEYERS, JONES) dtd(TABLES) = SET(TABNAME, TABTYPE, DATABASE) TABLES.TABNAME: SET(TABNAME, TABTYPE, DATABASE, TAB: HETERO) <HL0><HL1> <TABNAME>db1_book</TABNAME> <TABTYPE>book</TABTYPE> <DATABASE>uni magdeburg</DATABASE> <TAB><DB1_BOOK> <ISBN>38</ISBN> <PRICE>59.00</PRICE> <SUPPLIER>meyers</SUPPLIER> </DB1_BOOK> <DB1_BOOK> <ISBN>38</ISBN> <PRICE>48.00</PRICE> <SUPPLIER>jones</SUPPLIER> </DB1_BOOK> </TAB> </HL1> <HL1> <TABNAME>db2_book</TABNAME> <TABTYPE>book</TABTYPE> <DATABASE>uni halle</DATABASE> <TAB><DB2_BOOK> <ISBN>38</ISBN> <MEYERS>59.00</MEYERS> <JONES>48.00</JONES> </DB2_BOOK> <DB2_BOOK> <ISBN>22</ISBN> <MEYERS>27.00</MEYERS> <JONES>29.00</JONES> </DB2_BOOK> </TAB> </HL1> </HL0>
1
1. To the Specification of XML-Documents
sorts Name (names for elementary tags) opers integer → Name float → Name string → Name boolean → Name id → Name idref → Name hetero → Name name → Name salary → Name mgr → Name person → Name ... end sorts Coll-sym opers set, bag, seq, s1 → Coll-sym end sorts Scheme opers empty-s → Scheme inj (Name) → Scheme coll (Coll-sym, Scheme) → Scheme pair-s (Scheme, Scheme) → Scheme alternate-s (Scheme, Scheme) → Scheme axioms s, s', s": Scheme pair-s(s, empty-s) = pair-s(empty-s, s) = s pair-s(pair-s(s, s'), s") = pair-s(s, pair-s(s', s")) end
相关文档
最新文档