xquery/XQuery__ElementAccessor.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 02 Jul 2018 08:46:01 +0200
changeset 305 bad21c4f64bf
parent 296 ea3dbc023c80
permissions -rw-r--r--
Tagged Smalltalk/X 8.0.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
241
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/xmlsuite/xquery' }"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: XQuery }"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
XDMAccessors subclass:#ElementAccessor
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:''
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'XQuery-Sequence'
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
!ElementAccessor methodsFor:'private'!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
descendants: xdm
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    | children descendants |
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    descendants := OrderedCollection new.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
    children := self dmChildrenFor: xdm.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
    descendants addAll: children.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
    children do: [ :child |
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
        descendants addAll: (self descendants: child).
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
    ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
    ^ descendants.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
    "Created: / 03-10-2009 / 14:46:05 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
! !
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
!ElementAccessor methodsFor:'xdm accessors - private'!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
primDmAttributesFor: xdm
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
    xdm attributes ifNil:
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
    [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
        ^ XQuerySequence new.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
    ]
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    ifNotNil:
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
        ^ xdm attributes.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
    ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
    "Created: / 03-10-2009 / 14:16:59 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    "Modified: / 06-10-2009 / 13:07:57 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
primDmChildrenFor: xdm
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    xdm children ifNil:
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
        ^ OrderedCollection new.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
    ]
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    ifNotNil:
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
    [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
        ^ xdm children.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
    ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
    "Created: / 03-10-2009 / 14:13:35 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
primDmDocumentUriFor: xdm
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
    ^ XQuerySequence new.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
    "Created: / 03-10-2009 / 14:13:30 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
primDmStringValueFor: xdm
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    "The string-value property of an Element Node must be the concatenation of the 
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
        string-values of all its Text Node descendants in document order or, if the 
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
        element has no such descendants, the zero-length string."
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    | stringValue descendants |
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    stringValue := ''.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    descendants := self descendants: xdm.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
    descendants do: [ :descendant |
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
        descendant nodeKind = 'text' ifTrue:
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
        [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
            stringValue := stringValue, (self dmStringValueFor: descendant).
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
        ]
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    ^ stringValue.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    "Created: / 03-10-2009 / 14:38:54 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
    "Modified: / 06-10-2009 / 16:47:13 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
primDmTypedValueFor: xdm
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    ^ AtomicItem withValue: (self dmStringValueFor: xdm).
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    "Created: / 06-10-2009 / 15:43:44 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
! !
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
!ElementAccessor class methodsFor:'documentation'!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
version_SVN
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    ^ '$Id$'
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
! !