- From: <bugzilla@wiggum.w3.org>
- Date: Tue, 11 Mar 2008 03:19:56 +0000
- To: public-qt-comments@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=3771 ------- Comment #8 from jmdyck@ibiblio.org 2008-03-11 03:19 ------- Re the type-unsoundness problem of comment #6, here is my proposed solution. It eliminates the interleaved text{""} nodes from the normalization of direct element constructors. To "distinguish" enclosed expressions, each is instead normalized to a separate function call. Roughly speaking, we split the (intended) semantics of fs:item-sequence-to-node-sequence into two fs functions, called fs:A and fs:B here for brevity. With respect to XQuery 3.7.1.3, fs:A represents step 1e (the processing of enclosed expressions, including node-copying and all that that entails), and fs:B represents steps 2 through 4 (the processing of the constructor's whole content sequence). (I'd suggest that fs:A inherit the name fs:item-sequence-to-node-sequence, and fs:B get the name fs:element-content-sequence.) The specific changes to rules would be as follows. (Of course there would be collateral changes to the prose and examples.) 4.7.1 Direct Element Constructors / Norm / rule 3 Change fs:item-sequence-to-node-sequence to fs:B Delete the interleaved text{""} items. 4.7.1 Direct Element Constructors / Norm / rule 8 Change to: [[ { Expr } ]]_ElementContentUnit == fs:A(( [[ Expr ]]_Expr )) 4.7.3.1 Computed Element Constructors / Norm / rule 2+3 Change fs:item-sequence-to-node-sequence(...) to fs:B( fs:A(...) ) 7.1.5 The fs:item-sequence-to-node-sequence function Split it into sections for fs:A and fs:B as follows. For brevity here, I leave out the "statEnv |-" and use the following abbreviations: Child_Type -> (element*|text|processing-instruction*|comment) A(Type) -> (FS-URI,"A")(Type) B(Type) -> (FS-URI,"B")(Type) Also for brevity, I leave out the "statEnv |-". The STA rules for fs:A would be: Type <: attribute** --------------------- A(Type) : attribute** Type <: (Child_Type|document|xs:anyAtomicType)* -------------------------------------------------------------- A(Type) : (Child_Type|document)* Type <: attribute**, (Child_Type|document|xs:anyAtomicType)* -------------------------------------------------------------- A(Type) : attribute**, (Child_Type|document)* The STA rule for fs:B would be: Type <: attribute**, (Child_Type|document)* --------------------------------------------- B(Type) : attribute**, Child_Type*
Received on Tuesday, 11 March 2008 03:20:07 UTC