/[suikacvs]/messaging/manakai/lib/Message/Markup/Atom.dis
Suika

Contents of /messaging/manakai/lib/Message/Markup/Atom.dis

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (show annotations) (download)
Sun Sep 10 11:19:24 2006 UTC (17 years, 7 months ago) by wakaba
Branch: MAIN
Changes since 1.12: +27 -3 lines
++ manakai/bin/ChangeLog	10 Sep 2006 11:09:00 -0000
2006-09-10  Wakaba  <wakaba@suika.fam.cx>

	* daf.pl (--dtd-suffix, --create-dtd-driver): New options
	for DTD driver support.

++ manakai/lib/Message/Markup/ChangeLog	10 Sep 2006 11:12:09 -0000
2006-09-10  Wakaba  <wakaba@suika.fam.cx>

	* Atom.dis (Atom): The |mv:systemIdentifierBaseURI|
	property is set.  It is an empty value to allow to move
	DTD modules without modification.
	(Atom10): New DTD driver for ordinary Atom 1.0 documents.
	(AtomNameElement, AtomUriElement, AtomEmailElement): References
	for |Atom| module are added for |%ATOM.xmlns.attrib;|
	references in the |ATTLIST| declarations.
	(AtomContentElement): Content attribute definitions
	for |type| and |src| attributes are added.

	* Makefile (atom): Generate |Atom10| DTD driver.

++ manakai/lib/Message/Markup/XML/ChangeLog	10 Sep 2006 11:13:04 -0000
2006-09-10  Wakaba  <wakaba@suika.fam.cx>

	* Parser.pm: Comment out Unicode comparibility character
	checking clause since |\p{Compat}| regexp set is not
	supported in the current version of perl.

++ manakai/lib/manakai/ChangeLog	10 Sep 2006 11:19:19 -0000
2006-09-10  Wakaba  <wakaba@suika.fam.cx>

	* DISMarkup.dis (mv:systemIdentifierBaseURI): New property.
	(mv:XMLDTDAnyModule, mv:XMLDTDDriver): New resource types.

	* daf-dtd-modules.pl (daf_dtd_modules): Its main part
	is split into another function named |daf_dm_create_module_file|.
	(daf_dtd_driver): New function for DTD driver support.
	(daf_dm_create_module_file): New function.
	(daf_dm_dtd_driver_content): New function.
	(daf_dm_qname_module_content): What declarations
	are generated is changed so that generated DTD modules
	are more resemble to HTML WG's ones.
	(daf_dm_register_all_components): New function.
	(daf_dm_get_module_group): New function.
	(daf_dm_get_entity_name): Support for DTD drivers is added.  Use
	uppercase'ized name for DTD module sets (to align with
	HTML WG's DTD modules).

1 Module:
2 @QName: Markup|Atom
3 @enFN:
4 Atom DOM
5 @enDesc:
6 The <DFN::Atom DOM> is a language and platform independent
7 programming language interface to Atom 1.0 documents
8 built on the W3C Document Object Model (DOM). It defines
9 a number of interfaces that provide convenience
10 methods and attributes to process Atom 1.0 documents.
11
12 {TODO::
13 - Move descriptions below to somewhere.
14
15 - Formal definition for <IF::StaticNodeList> (reference
16 to Selectors API?) is necessary.
17 }
18
19 Some attributes are defined to contain a <IF::StaticNodeList>.
20 Multiple invocations for such an attribute don't have
21 to return exactly same object, even if no changes are made
22 on the underlying DOM structure.
23
24 {NOTE::
25 The equality of <IF::StaticNodeList> objects as per
26 the <M::Node.isEqualNode> method, however, is
27 preserved as long as the underlying DOM structure
28 and the configuration parameters are not changed.
29 }
30
31 Methods and attributes defined in this module does <EM::not>
32 support <IF::tx|EntityReference>s; for example, an element
33 node that is a child node of an entity reference node
34 that is a child node of another element node is <EM::not> considered
35 as a child element node of the other element node. As a
36 result, applications written using this module might ignore
37 parts of Atom documents unless they configures their XML
38 parser not to expose entity references in the result DOM tree.
39
40 @Namespace:
41 http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup/Atom/
42
43 @DISCore:author: DISCore|Wakaba
44 @License: license|Perl+MPL
45 @Date:
46 $Date: 2006/09/07 07:25:29 $
47
48 @Require:
49 @@Module:
50 @@@QName: Markup|common
51 @@Module:
52 @@@QName: MDOM|TreeCore
53 @@@WithFor: ManakaiDOM|ManakaiDOMLatest
54 @@Module:
55 @@@WithFor: ManakaiDOM|ManakaiDOM
56 @@Module:
57 @@@WithFor: ManakaiDOM|ManakaiDOMLatest
58 @@Module:
59 @@@QName: DISlib|DISMarkup
60 @@@WithFor: ManakaiDOM|all
61 @DefaultFor: ManakaiDOM|ManakaiDOMLatest
62
63 Namespace:
64 @atom:
65 http://www.w3.org/2005/Atom
66 @c:
67 http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#
68 @cfg:
69 http://suika.fam.cx/www/2006/dom-config/
70 @DISlib:
71 http://suika.fam.cx/~wakaba/archive/2004/dis/
72 @dis:
73 http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--
74 @dlp:
75 http://suika.fam.cx/~wakaba/archive/2004/dis/Perl#
76 @d:
77 http://suika.fam.cx/~wakaba/archive/2004/dom/xdt#
78 @DOMMain:
79 http://suika.fam.cx/~wakaba/archive/2004/dom/main#
80 @dx:
81 http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#
82 @dxm:
83 http://suika.fam.cx/~wakaba/archive/2004/dis/XML#
84 @ecore:
85 http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/Core/
86 @f:
87 http://suika.fam.cx/~wakaba/archive/2004/dom/feature#
88 @fe:
89 http://suika.fam.cx/www/2006/feature/
90 @html:
91 http://www.w3.org/1999/xhtml
92 @idl:
93 http://suika.fam.cx/~wakaba/archive/2004/dis/IDL#
94 @kwd:
95 http://suika.fam.cx/~wakaba/archive/2005/rfc2119/
96 @lang:
97 http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#
98 @license:
99 http://suika.fam.cx/~wakaba/archive/2004/8/18/license#
100 @ManakaiDOM:
101 http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#
102 @Markup:
103 http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup#
104 @MDOM:
105 http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM.
106 @MDOMX:
107 http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#
108 @mv:
109 http://suika.fam.cx/www/2006/05/mv/
110 @rel:
111 http://www.iana.org/assignments/relation/
112 @s:
113 http://suika.fam.cx/~wakaba/archive/2004/dis/Markup#
114 @tc:
115 http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/TreeCore/
116 @td:
117 http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Document/
118 @te:
119 http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Element/
120 @test:
121 http://suika.fam.cx/~wakaba/archive/2004/dis/Test#
122 @tx:
123 http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/XML/
124 @urigen:
125 http://suika.fam.cx/~wakaba/archive/2005/manakai/URI/Generic/
126 @xml:
127 http://www.w3.org/XML/1998/namespace
128
129 ElementTypeBinding:
130 @Name: CODE
131 @ElementType:
132 dis:ResourceDef
133 @ShadowContent:
134 @@DISCore:resourceType: dlp|BlockCode
135 @@ForCheck: ManakaiDOM|ForClass
136
137 ElementTypeBinding:
138 @Name: Method
139 @ElementType:
140 dis:ResourceDef
141 @ShadowContent:
142 @@DISCore:resourceType: DISLang|Method
143 @@ForCheck: !=ManakaiDOM|ManakaiDOM
144
145 ElementTypeBinding:
146 @Name: Param
147 @ElementType:
148 dis:ResourceDef
149 @ShadowContent:
150 @@DISCore:resourceType: DISLang|MethodParameter
151
152 ElementTypeBinding:
153 @Name: Return
154 @ElementType:
155 dis:ResourceDef
156 @ShadowContent:
157 @@DISCore:resourceType: DISLang|MethodReturn
158
159 ElementTypeBinding:
160 @Name: Attr
161 @ElementType:
162 dis:ResourceDef
163 @ShadowContent:
164 @@DISCore:resourceType: DISLang|Attribute
165 @@ForCheck: !=ManakaiDOM|ManakaiDOM
166
167 ElementTypeBinding:
168 @Name: ATTR
169 @ElementType:
170 dis:ResourceDef
171 @ShadowContent:
172 @@DISCore:resourceType:
173 @@@@: DISLang|Attribute
174 @@@ForCheck: ManakaiDOM|ForIF
175 @@DISCore:resourceType:
176 @@@@: DISLang|Attribute
177 @@@ForCheck: ManakaiDOM|ForClass
178 @@DISCore:resourceType:
179 @@@@: mv|AttributeType
180 @@@ForCheck: s|ForML
181 @@ForCheck: !=ManakaiDOM|ManakaiDOM
182
183 ElementTypeBinding:
184 @Name: Get
185 @ElementType:
186 dis:ResourceDef
187 @ShadowContent:
188 @@DISCore:resourceType: DISLang|AttributeGet
189
190 ElementTypeBinding:
191 @Name: Set
192 @ElementType:
193 dis:ResourceDef
194 @ShadowContent:
195 @@DISCore:resourceType: DISLang|AttributeSet
196
197 ElementTypeBinding:
198 @Name: nullCase
199 @ElementType:
200 dis:ResourceDef
201 @ShadowContent:
202 @@DISCore:resourceType: ManakaiDOM|InCase
203 @@Value:
204 @@@is-null:1
205
206 ElementTypeBinding:
207 @Name: PerlDef
208 @ElementType:
209 dis:Def
210 @ShadowContent:
211 @@ContentType: lang|Perl
212 @@ForCheck: ManakaiDOM|ForClass
213
214 ElementTypeBinding:
215 @Name: PerlCDef
216 @ElementType:
217 dis:Def
218 @ShadowContent:
219 @@ContentType: lang|Perl
220
221 ElementTypeBinding:
222 @Name: enImplNote
223 @ElementType:
224 dis:ImplNote
225 @ShadowContent:
226 @@lang:en
227
228 ElementTypeBinding:
229 @Name: enFN
230 @ElementType:
231 dis:FullName
232 @ShadowContent:
233 @@lang:en
234
235 ElementTypeBinding:
236 @Name: IFClsETDef
237 @ElementType:
238 dis:ResourceDef
239 @ShadowContent:
240 @@DISCore:resourceType:
241 @@@@: dis|MultipleResource
242 @@@ForCheck: !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML
243 @@resourceFor: ManakaiDOM|ForIF
244 @@resourceFor: ManakaiDOM|ForClass
245 @@resourceFor: s|ForML
246 @@For: ManakaiDOM|ManakaiDOM
247
248 @@DISCore:resourceType:
249 @@@@: DISLang|Interface
250 @@@ForCheck: ManakaiDOM|ForIF
251
252 @@DISCore:resourceType:
253 @@@@: DISLang|Class
254 @@@ForCheck: ManakaiDOM|ForClass
255 @@Implement:
256 @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF
257 @@@ContentType: DISCore|TFPQNames
258 @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM
259 @@Implement:
260 @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
261 @@@ContentType: DISCore|TFPQNames
262 @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
263
264 @@s:elementType:
265 @@@@: ||+||s|ForML
266 @@@ContentType: DISCore|TFPQNames
267 @@@DISCore:stopISARecursive:1
268
269 @@DISCore:resourceType:
270 @@@@: s|ElementType
271 @@@ForCheck: s|ForML
272
273 @@f:implements: AtomFeature10
274
275 ElementTypeBinding:
276 @Name: IFClsDef
277 @ElementType:
278 dis:ResourceDef
279 @ShadowContent:
280 @@DISCore:resourceType:
281 @@@@: dis|MultipleResource
282 @@@ForCheck: !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML
283 @@resourceFor: ManakaiDOM|ForIF
284 @@resourceFor: ManakaiDOM|ForClass
285 @@For: ManakaiDOM|ManakaiDOM
286
287 @@DISCore:resourceType:
288 @@@@: DISLang|Interface
289 @@@ForCheck: ManakaiDOM|ForIF
290
291 @@DISCore:resourceType:
292 @@@@: DISLang|Class
293 @@@ForCheck: ManakaiDOM|ForClass
294 @@Implement:
295 @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF
296 @@@ContentType: DISCore|TFPQNames
297 @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM
298 @@Implement:
299 @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
300 @@@ContentType: DISCore|TFPQNames
301 @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
302
303 @@f:implements: AtomFeature10
304
305 ElementTypeBinding:
306 @Name: IFClsConstructDef
307 @ElementType:
308 dis:ResourceDef
309 @ShadowContent:
310 @@DISCore:resourceType:
311 @@@@: dis|MultipleResource
312 @@@ForCheck:
313 !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML !mv|ForCM !mv|ForAG
314 @@resourceFor: ManakaiDOM|ForIF
315 @@resourceFor: ManakaiDOM|ForClass
316 @@resourceFor: mv|ForCM
317 @@resourceFor: mv|ForAG
318 @@For: ManakaiDOM|ManakaiDOM
319
320 @@DISCore:resourceType:
321 @@@@: DISLang|Interface
322 @@@ForCheck: ManakaiDOM|ForIF
323
324 @@DISCore:resourceType:
325 @@@@: DISLang|Class
326 @@@ForCheck: ManakaiDOM|ForClass
327 @@Implement:
328 @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF
329 @@@ContentType: DISCore|TFPQNames
330 @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM
331 @@Implement:
332 @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
333 @@@ContentType: DISCore|TFPQNames
334 @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
335
336 @@DISCore:resourceType:
337 @@@@: mv|AttributeTypeGroup
338 @@@ForCheck: mv|ForAG
339
340 @@DISCore:resourceType:
341 @@@@: mv|ElementContentModel
342 @@@ForCheck: mv|ForCM
343
344 @@f:implements: AtomFeature10
345
346 ElementTypeBinding:
347 @Name: IFQName
348 @ElementType:
349 dis:QName
350 @ShadowContent:
351 @@ForCheck: ManakaiDOM|ForIF
352
353 ElementTypeBinding:
354 @Name: ClsQName
355 @ElementType:
356 dis:QName
357 @ShadowContent:
358 @@ForCheck: ManakaiDOM|ForClass
359
360 ElementTypeBinding:
361 @Name: ETRQName
362 @ElementType:
363 dis:QName
364 @ShadowContent:
365 @@ForCheck: s|ForML
366
367 ElementTypeBinding:
368 @Name: ETQName
369 @ElementType:
370 dis:AppName
371 @ShadowContent:
372 @@ForCheck: s|ForML
373 @@ContentType: DISCore|QName
374
375 ElementTypeBinding:
376 @Name: CMQName
377 @ElementType:
378 dis:QName
379 @ShadowContent:
380 @@ForCheck: mv|ForCM
381
382 ElementTypeBinding:
383 @Name: CMName
384 @ElementType:
385 mv:elementContentModelName
386 @ShadowContent:
387 @@ForCheck: mv|ForCM
388
389 ElementTypeBinding:
390 @Name: AGQName
391 @ElementType:
392 dis:QName
393 @ShadowContent:
394 @@ForCheck: mv|ForAG
395
396 ElementTypeBinding:
397 @Name: AGName
398 @ElementType:
399 mv:attributeTypeGroupName
400 @ShadowContent:
401 @@ForCheck: mv|ForAG
402
403 ElementTypeBinding:
404 @Name: IFISA
405 @ElementType:
406 dis:ISA
407 @ShadowContent:
408 @@ForCheck: ManakaiDOM|ForIF
409
410 ElementTypeBinding:
411 @Name: ClsISA
412 @ElementType:
413 dis:ISA
414 @ShadowContent:
415 @@ForCheck: ManakaiDOM|ForClass
416
417 ElementTypeBinding:
418 @Name: disDef
419 @ElementType:
420 dis:Def
421 @ShadowContent:
422 @@ContentType:
423 lang:dis
424 @@ForCheck: ManakaiDOM|ForClass
425
426 ElementTypeBinding:
427 @Name: Code
428 @ElementType:
429 dis:ResourceDef
430 @ShadowContent:
431 @@DISCore:resourceType: dlp|InlineCode
432 @@ForCheck: ManakaiDOM|ForClass
433
434 ElementTypeBinding:
435 @Name: Test
436 @ElementType:
437 dis:ResourceDef
438 @ShadowContent:
439 @@DISCore:resourceType: test|StandaloneTest
440 @@ForCheck: ManakaiDOM|ForClass
441
442 ElementTypeBinding:
443 @Name: TestC
444 @ElementType:
445 dis:ResourceDef
446 @ShadowContent:
447 @@DISCore:resourceType: test|StandaloneTest
448
449 ResourceDef:
450 @QName: Document
451 @AliasFor: td|Document
452 @For: ManakaiDOM|DOM
453
454 ResourceDef:
455 @QName: Element
456 @AliasFor: te|Element
457 @For: ManakaiDOM|DOM
458
459 ResourceDef:
460 @QName: Attr
461 @AliasFor: te|Attr
462 @For: ManakaiDOM|DOM
463
464 ResourceDef:
465 @QName: DOMString
466 @AliasFor: DOMMain|DOMString
467 @For: ManakaiDOM|DOM
468
469 ResourceDef:
470 @QName: DOMURI
471 @AliasFor: ManakaiDOM|ManakaiDOMURI
472 @For: ManakaiDOM|DOM3
473
474 ResourceDef:
475 @QName: DOMTimeStamp
476 @AliasFor: DOMMain|DOMTimeStamp
477 @For: ManakaiDOM|DOM2
478
479 ResourceDef:
480 @QName: boolean
481 @AliasFor: idl|boolean||ManakaiDOM|all
482
483 ResourceDef:
484 @QName: Node
485 @AliasFor: tc|Node
486 @For: ManakaiDOM|ManakaiDOM
487
488 ResourceDef:
489 @QName: NodeList
490 @AliasFor: tc|NodeList
491 @For: ManakaiDOM|ManakaiDOM
492
493 ResourceDef:
494 @QName: StaticNodeList
495 @AliasFor: tc|StaticNodeList
496 @For: ManakaiDOM|ManakaiDOM
497
498 ElementTypeBinding:
499 @Name: enDesc
500 @ElementType:
501 dis:Description
502 @ShadowContent:
503 @@lang:en
504
505 ElementTypeBinding:
506 @Name: enLN
507 @ElementType:
508 mv:longName
509 @ShadowContent:
510 @@lang:en
511
512 ElementTypeBinding:
513 @Name: TrueCase
514 @ElementType:
515 dis:ResourceDef
516 @ShadowContent:
517 @@DISCore:resourceType:
518 ManakaiDOM:InCase
519 @@Value:
520 @@@@: 1
521 @@@ContentType: DISCore|Boolean
522 @@Type: idl|boolean||ManakaiDOM|all
523
524 ElementTypeBinding:
525 @Name: FalseCase
526 @ElementType:
527 dis:ResourceDef
528 @ShadowContent:
529 @@DISCore:resourceType:
530 ManakaiDOM:InCase
531 @@Value:
532 @@@@: 0
533 @@@ContentType: DISCore|Boolean
534 @@Type: idl|boolean||ManakaiDOM|all
535
536 ## -- Features
537
538 ElementTypeBinding:
539 @Name: FeatureDef
540 @ElementType:
541 dis:ResourceDef
542 @ShadowContent:
543 @@DISCore:resourceType: f|Feature
544 @@For: =ManakaiDOM|all
545
546 ElementTypeBinding:
547 @Name: FeatureVerDef
548 @ElementType:
549 dis:ResourceDef
550 @ShadowContent:
551 @@DISCore:resourceType: f|Feature
552
553 ElementTypeBinding:
554 @Name: featureQName
555 @ElementType:
556 f:name
557 @ShadowContent:
558 @@ContentType: DISCore|QName
559
560 FeatureDef:
561 @featureQName: fe|Atom
562 @QName: AtomFeature
563 @FeatureVerDef:
564 @@QName: AtomFeature10
565 @@Version: 1.0
566 @@f:instanceOf: AtomFeature
567 @@f:requires: tx|XMLFeature30
568 @@enDesc:
569 The Atom DOM, version 1.0.
570
571 ## -- Modules
572
573 ModuleSetDef:
574 @QName: Atom
575 @enLN: Atom
576 @mv:version: 1.0
577 @mv:contains: AtomDatatypes
578 @mv:contains: AtomProperties
579 @mv:contains: AtomEntry
580 @mv:contains: AtomFeed
581 @mv:contains: AtomQName
582
583 @mv:targetNamespace: atom|
584 @mv:defaultNamespacePrefix: atom
585 @mv:systemIdentifierBaseURI: \
586
587 ModuleDef:
588 @QName: AtomFeed
589 @mv:id: feed
590 @enLN: Feed
591 @mv:contains: feed-prop
592 @mv:contains: atom|feed
593
594 ModuleDef:
595 @QName: AtomEntry
596 @mv:id: entry
597 @enLN: Entry
598 @mv:contains: entry-prop
599 @mv:contains: atom|entry
600
601 ModuleDef:
602 @QName: AtomProperties
603 @mv:id: props
604 @enLN: Properties
605 @mv:contains: atom|content
606 @mv:contains: atom|contributor
607 @mv:contains: atom|category
608 @mv:contains: atom|generator
609 @mv:contains: atom|link
610 @mv:contains: atom|author
611 @mv:contains: atom|published
612 @mv:contains: atom|updated
613 @mv:contains: atom|icon
614 @mv:contains: atom|id
615 @mv:contains: atom|logo
616 @mv:contains: atom|rights
617 @mv:contains: atom|subtitle
618 @mv:contains: atom|summary
619 @mv:contains: atom|title
620 @mv:contains: source-prop
621 @mv:contains: atom|source
622
623 ModuleDef:
624 @QName: AtomDatatypes
625 @mv:id: datatypes
626 @enLN: Datatypes
627
628 @mv:contains: atomNCName
629 @mv:contains: atomMediaType
630 @mv:contains: atomLanguageTag
631 @mv:contains: atomUri
632 @mv:contains: atomUriCM
633 @mv:contains: atomEmailAddress
634 @mv:contains: atomEmailAddressCM
635
636 @mv:contains: undefinedAttributes
637 @mv:contains: undefinedContent
638 @mv:contains: atomCommonAttributes
639
640 @mv:contains: simpleExtensionElements
641 @mv:contains: structuredExtensionElements
642 @mv:contains: extensionElements
643
644 @mv:contains: TextAG
645 @mv:contains: TextCM
646
647 @mv:contains: atom|name
648 @mv:contains: atom|email
649 @mv:contains: atom|uri
650 @mv:contains: PersonAG
651 @mv:contains: person-prop
652 @mv:contains: PersonCM
653
654 @mv:contains: DateAG
655 @mv:contains: DateCM
656
657 ResourceDef:
658 @QName: AtomQName
659 @enLN: Qualified Names
660 @mv:id: qname
661 @For: =ManakaiDOM|ManakaiDOMLatest
662 @DISCore:resourceType: mv|XMLDTDQNameModule
663
664 @mv:contains: Atom
665
666 ResourceDef:
667 @QName: Atom10
668 @enLN: Atom 1.0
669 @mv:id: atom10
670 @For: =ManakaiDOM|ManakaiDOMLatest
671 @DISCore:resourceType: mv|XMLDTDDriver
672
673 @mv:refers: Atom
674
675 @mv:refers: AtomQName
676 @mv:refers: AtomDatatypes
677 @mv:refers: AtomProperties
678 @mv:refers: AtomEntry
679 @mv:refers: AtomFeed
680
681 ElementTypeBinding:
682 @Name: ModuleSetDef
683 @ElementType:
684 dis:ResourceDef
685 @ShadowContent:
686 @@DISCore:resourceType: mv|XMLDTDModuleSet
687 @@For: =ManakaiDOM|ManakaiDOMLatest
688
689 ElementTypeBinding:
690 @Name: ModuleDef
691 @ElementType:
692 dis:ResourceDef
693 @ShadowContent:
694 @@DISCore:resourceType: mv|XMLDTDModule
695 @@For: =ManakaiDOM|ManakaiDOMLatest
696
697 ## -- Implementation
698
699 IFClsDef:
700 @IFQName: AtomImplementation
701 @ClsQName: ManakaiAtomImplementation
702
703 @IFISA: c|DOMImplementation
704 @ClsISA: c|ManakaiDOMImplementation
705
706 @enDesc:
707 The <IF::AtomImplementation> interface provides convenience
708 methods to create Atom documents.
709
710 @f:provides: AtomFeature10
711
712 @Test:
713 @@QName: AtomImplementation.interface.test
714 @@PerlDef:
715 for my $interface (
716 <IFName::AtomImplementation>,
717 <IFName::AtomImplementation||ManakaiDOM|ManakaiDOM>,
718 <IFName::c|DOMImplementation>,
719 <IFName::urigen|URIImplementation>,
720 <IFName::f|MinimumImplementation>,
721 <IFName::f|GetFeature>,
722 ) {
723 $test->id ($interface);
724 $test->assert_true
725 (<Class::ManakaiAtomImplementation>->isa ($interface));
726 }
727 @Test:
728 @@QName: ImplementationRegistry.AtomImplementation.1.test
729 @@PerlDef:
730 require Message::Markup::Atom;
731 my $impl = $Message::DOM::ImplementationRegistry
732 ->get_implementation ({
733 <Q::fe|Atom> => '1.0',
734 });
735
736 $test->assert_isa ($impl, <IFName::AtomImplementation>);
737 @Test:
738 @@QName: ImplementationRegistry.AtomImplementation.2.test
739 @@PerlDef:
740 require Message::Markup::Atom;
741 my $impl = $Message::DOM::ImplementationRegistry
742 ->get_implementation ({
743 Core => '3.0',
744 <Q::fe|Atom> => '1.0',
745 });
746
747 $test->assert_isa ($impl, <IFName::AtomImplementation>);
748 @Test:
749 @@QName: ImplementationRegistry.AtomImplementation.3.test
750 @@PerlDef:
751 require Message::Markup::Atom;
752 my $impl = $Message::DOM::ImplementationRegistry
753 ->get_implementation ({
754 XML => '3.0',
755 <Q::fe|Atom> => '1.0',
756 });
757
758 $test->assert_isa ($impl, <IFName::AtomImplementation>);
759
760 @Method:
761 @@Name: createAtomFeedDocument
762 @@enDesc:
763 Creates an Atom Feed Document object.
764 @@Param:
765 @@@Name: id
766 @@@Type: DOMString
767 @@@actualType: DOMURI
768 @@@enDesc:
769 The <XE::atom|id> of the feed.
770 @@Param:
771 @@@Name: title
772 @@@Type: DOMString
773 @@@enDesc:
774 The <XE::atom|title> of the feed.
775 @@@nullCase:
776 @@@@enDesc:
777 The implementation <kwd:MUST> treate <DOM::null>
778 as if an empty string is specified.
779 @@Param:
780 @@@Name: lang
781 @@@Type: DOMString
782 @@@enDesc:
783 The default natural language of the feed.
784 @@@nullCase:
785 @@@@enDesc:
786 The implementation <kwd:MUST> treate <DOM::null>
787 as if an empty string is specified.
788 @@Return:
789 @@@Type: AtomFeedDocument
790 @@@enDesc:
791 The newly created Atom Feed Document.
792
793 {P:: The returned object <kwd:MUST> be a <IF::Document> node
794 with attributes:
795
796 - <A::Node.childNodes>::: A <IF::NodeList> containing
797 a new <XE::atom|feed> element node.
798
799 - <A::Document.xmlVersion>::: <XML::1.0>.
800
801 }
802
803 {P:: The newly created <XE::atom|feed> element node <kwd:MUST>
804 have attributes set as:
805
806 - <A::Node.attributes>::: A <IF::NamedNodeMap> that contains
807 at least a new <XA::xml|lang>
808 attribute node.
809
810 - <A::Node.childNodes>::: A <IF::NodeList> containing
811 a new <XE::atom|id> element node,
812 a new <XE::atom|title> element node, and
813 a new <XE::atom|updated> element node
814 in any order.
815
816 }
817
818 {P:: The newly created <XA::xml|lang> attribute node <kwd:MUST>
819 have attributes set as:
820
821 - <A::Node.nodeValue>::: <P::lang>.
822
823 - <A::Attr.specified>::: <DOM::true>.
824
825 }
826
827 {P:: The newly created <XE::atom|id> element node <kwd:MUST>
828 have attributes set as:
829
830 - <A::Node.textContent>::: <P::id>.
831
832 }
833
834 {P:: The newly created <XE::atom|title> element node <kwd:MUST>
835 have attributes set as:
836
837 - <A::Node.textContent>::: <P::title>.
838
839 }
840
841 The <XA::type> attribute node <kwd:MUST-NOT> be attached
842 to the <XE::atom|title> element node.
843
844 {P:: The newly created <XE::atom|updated> element node <kwd:MUST>
845 have attributes set as:
846
847 - <A::Node.textContent>::: A uppercase RFC 3339 <CODE::date-time>
848 representation of the time when the method is invoked.
849 The implementation <kwd:MAY> align its timezone to
850 that of the environment in which the method is invoked.
851
852 }
853 @@@PerlDef:
854 __DEEP{
855 $r = $self-><M::c|DOMImplementation.createDocument>
856 (<Q::atom|>, 'feed');
857 $r-><AS::Document.xmlVersion> ('1.0');
858
859 my $feede = $r-><AG::Document.documentElement>;
860 $feede-><AS::Node.manakaiLanguage> (defined $lang ? $lang : '');
861
862 $feede-><AS::AtomFeedElement.id> ($id);
863
864 my $titlee = $r-><M::Document.createElementNS> (<Q::atom|>, 'title');
865 $titlee-><AS::Node.textContent> (defined $title ? $title : '');
866 $feede-><M::Node.appendChild> ($titlee);
867
868 my $updatede = $r-><M::Document.createElementNS>
869 (<Q::atom|>, 'updated');
870 $updatede-><AS::AtomDateConstruct.value> (scalar time);
871 $feede-><M::Node.appendChild> ($updatede);
872 }__;
873
874 @@Test:
875 @@@QName: AtomImplementation.createAtomFeedDocument.test
876 @@@PerlDef:
877 my $impl;
878 __CODE{tc|createImplForTest:: $impl => $impl}__;
879 $impl = $impl->get_feature (<Q::fe|Atom> => '1.0');
880
881 my $doc = $impl-><M::AtomImplementation.createAtomFeedDocument>
882 ('about:id', 'feed title', 'en');
883
884 $test->id ('document.interface');
885 $test->assert_isa ($doc, <IFName::Document>);
886
887 $test->id ('document.xmlVersion');
888 $test->assert_equals ($doc-><AG::Document.xmlVersion>, '1.0');
889
890 my $feed = $doc-><AG::Document.documentElement>;
891
892 $test->id ('feed.namespaceURI');
893 $test->assert_equals ($feed-><AG::Node.namespaceURI>, <Q::atom|>);
894
895 $test->id ('feed.localName');
896 $test->assert_equals ($feed-><AG::Node.localName>, 'feed');
897
898 $test->id ('feed.lang');
899 $test->assert_equals ($feed-><M::Element.getAttributeNS>
900 (<Q::xml|>, 'lang'),
901 'en');
902
903 my $id;
904 my $title;
905 my $updated;
906
907 for my $cn (@{$feed-><AG::Node.childNodes>}) {
908 if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
909 $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
910 if ($cn-><AG::Node.localName> eq 'id') {
911 $id = $cn;
912 } elsif ($cn-><AG::Node.localName> eq 'title') {
913 $title = $cn;
914 } elsif ($cn-><AG::Node.localName> eq 'updated') {
915 $updated = $cn;
916 }
917 }
918 }
919
920 $test->id ('id');
921 $test->assert_not_null ($id);
922
923 $test->id ('id.value');
924 $test->assert_equals ($id-><AG::Node.textContent>, 'about:id');
925
926 $test->id ('title');
927 $test->assert_not_null ($title);
928
929 $test->id ('title.value');
930 $test->assert_equals ($title-><AG::Node.textContent>, 'feed title');
931
932 $test->id ('title.type');
933 $test->assert_null ($title-><M::Element.getAttributeNS> (null, 'type'));
934
935 $test->id ('updated');
936 $test->assert_not_null ($updated);
937
938 $test->id ('updated.value');
939 $test->assert_num_not_equals
940 (actual_value => $updated-><AG::AtomDateConstruct.value>,
941 expected_value => 0);
942
943 @Method:
944 @@Name: createAtomEntryDocument
945 @@enDesc:
946 Creates an Atom Entry Document object.
947 @@Param:
948 @@@Name: id
949 @@@Type: DOMString
950 @@@actualType: DOMURI
951 @@@enDesc:
952 The <XE::atom|id> of the entry.
953 @@Param:
954 @@@Name: title
955 @@@Type: DOMString
956 @@@enDesc:
957 The <XE::atom|title> of the entry.
958 @@@nullCase:
959 @@@@enDesc:
960 The implementation <kwd:MUST> treate <DOM::null>
961 as if an empty string is specified.
962 @@Param:
963 @@@Name: lang
964 @@@Type: DOMString
965 @@@enDesc:
966 The natural language of the entry.
967 @@@nullCase:
968 @@@@enDesc:
969 The implementation <kwd:MUST> treate <DOM::null>
970 as if an empty string is specified.
971 @@Return:
972 @@@Type: AtomEntryDocument
973 @@@enDesc:
974 The newly created Atom Entry Document.
975
976 {P:: The returned object <kwd:MUST> be a <IF::Document> node
977 with attributes:
978
979 - <A::Node.childNodes>::: A <IF::NodeList> containing
980 a new <XE::atom|entry> element node.
981
982 - <A::Document.xmlVersion>::: <XML::1.0>.
983
984 }
985
986 {P:: The newly created <XE::atom|entry> element node <kwd:MUST>
987 have attributes set as:
988
989 - <A::Node.attributes>::: A <IF::NamedNodeMap> that contains
990 at least a new <XA::xml|lang>
991 attribute node.
992
993 - <A::Node.childNodes>::: A <IF::NodeList> containing
994 a new <XE::atom|id> element node,
995 a new <XE::atom|title> element node, and
996 a new <XE::atom|updated> element node
997 in any order.
998
999 }
1000
1001 {P:: The newly created <XA::xml|lang> attribute node <kwd:MUST>
1002 have attributes set as:
1003
1004 - <A::Node.nodeValue>::: <P::lang>.
1005
1006 - <A::Attr.specified>::: <DOM::true>.
1007
1008 }
1009
1010 {P:: The newly created <XE::atom|id> element node <kwd:MUST>
1011 have attributes set as:
1012
1013 - <A::Node.textContent>::: <P::id>.
1014
1015 }
1016
1017 {P:: The newly created <XE::atom|title> element node <kwd:MUST>
1018 have attributes set as:
1019
1020 - <A::Node.textContent>::: <P::title>.
1021
1022 }
1023
1024 The <XA::type> attribute node <kwd:MUST-NOT> be attached
1025 to the <XE::atom|title> element node.
1026
1027 {P:: The newly created <XE::atom|updated> element node <kwd:MUST>
1028 have attributes set as:
1029
1030 - <A::Node.textContent>::: A uppercase RFC 3339 <CODE::date-time>
1031 representation of the time when the method is invoked.
1032 The implementation <kwd:MAY> align its timezone to
1033 that of the environment in which the method is invoked.
1034
1035 }
1036 @@@PerlDef:
1037 __DEEP{
1038 $r = $self-><M::c|DOMImplementation.createDocument>
1039 (<Q::atom|>, 'entry');
1040 $r-><AS::Document.xmlVersion> ('1.0');
1041
1042 my $feede = $r-><AG::Document.documentElement>;
1043 $feede-><AS::Node.manakaiLanguage> (defined $lang ? $lang : '');
1044
1045 $feede-><AS::AtomFeedElement.id> ($id);
1046
1047 my $titlee = $r-><M::Document.createElementNS> (<Q::atom|>, 'title');
1048 $titlee-><AS::Node.textContent> (defined $title ? $title : '');
1049 $feede-><M::Node.appendChild> ($titlee);
1050
1051 my $updatede = $r-><M::Document.createElementNS>
1052 (<Q::atom|>, 'updated');
1053 $updatede-><AS::AtomDateConstruct.value> (scalar time);
1054 $feede-><M::Node.appendChild> ($updatede);
1055 }__;
1056
1057 @@Test:
1058 @@@QName: AtomImplementation.createAtomEntryDocument.test
1059 @@@PerlDef:
1060 my $impl;
1061 __CODE{tc|createImplForTest:: $impl => $impl}__;
1062 $impl = $impl->get_feature (<Q::fe|Atom> => '1.0');
1063
1064 my $doc = $impl-><M::AtomImplementation.createAtomEntryDocument>
1065 ('about:id', 'entry title', 'en');
1066
1067 $test->id ('document.interface');
1068 $test->assert_isa ($doc, <IFName::Document>);
1069
1070 $test->id ('document.xmlVersion');
1071 $test->assert_equals ($doc-><AG::Document.xmlVersion>, '1.0');
1072
1073 my $feed = $doc-><AG::Document.documentElement>;
1074
1075 $test->id ('feed.namespaceURI');
1076 $test->assert_equals ($feed-><AG::Node.namespaceURI>, <Q::atom|>);
1077
1078 $test->id ('feed.localName');
1079 $test->assert_equals ($feed-><AG::Node.localName>, 'entry');
1080
1081 $test->id ('feed.lang');
1082 $test->assert_equals ($feed-><M::Element.getAttributeNS>
1083 (<Q::xml|>, 'lang'),
1084 'en');
1085
1086 my $id;
1087 my $title;
1088 my $updated;
1089
1090 for my $cn (@{$feed-><AG::Node.childNodes>}) {
1091 if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1092 $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
1093 if ($cn-><AG::Node.localName> eq 'id') {
1094 $id = $cn;
1095 } elsif ($cn-><AG::Node.localName> eq 'title') {
1096 $title = $cn;
1097 } elsif ($cn-><AG::Node.localName> eq 'updated') {
1098 $updated = $cn;
1099 }
1100 }
1101 }
1102
1103 $test->id ('id');
1104 $test->assert_not_null ($id);
1105
1106 $test->id ('id.value');
1107 $test->assert_equals ($id-><AG::Node.textContent>, 'about:id');
1108
1109 $test->id ('title');
1110 $test->assert_not_null ($title);
1111
1112 $test->id ('title.value');
1113 $test->assert_equals ($title-><AG::Node.textContent>, 'entry title');
1114
1115 $test->id ('title.type');
1116 $test->assert_null ($title-><M::Element.getAttributeNS> (null, 'type'));
1117
1118 $test->id ('updated');
1119 $test->assert_not_null ($updated);
1120
1121 $test->id ('updated.value');
1122 $test->assert_num_not_equals
1123 (actual_value => $updated-><AG::AtomDateConstruct.value>,
1124 expected_value => 0);
1125
1126 @enImplNote:
1127 @@ddid: imt
1128 @@@:
1129 {ISSUE::
1130 The <CODE::contentType> attribute of the created document
1131 should be set to <CODE::application/atom+xml>?
1132 }
1133
1134 @CODE:
1135 @@QName: returnChildElement
1136 @@enDesc:
1137 {P:: The algorithm to <DFN::return <VAR::element-type> child
1138 element> of the element node <VAR::E> is defined as:
1139
1140 = If <VAR::E> contains one or more child element node
1141 whose element type is <VAR::element-type>,
1142 it <kwd:MUST> return the first such element node
1143 in document order.
1144
1145 {OLI:: Otherwise,
1146
1147 {OLI:: If the <cfg::cfg|create-child-element> configuration
1148 parameter is set to <DOM::true>,
1149
1150 = Create an element node <VAR::N> whose element type
1151 is <VAR::element-type>.
1152
1153 = Append <VAR::N> to <VAR::E> as if the <M::Node.appendChild>
1154 method were called for <VAR::E> with its parameter
1155 set to <VAR::N>. Note that this might throw an exception.
1156
1157 = Then, <VAR::N> <kwd:MUST> be returned.
1158
1159 }
1160
1161 = Otherwise, <DOM::null> <kwd:MUST> be returned.
1162
1163 }
1164
1165 }
1166 @@PerlDef:
1167 __DEEP{
1168 E: {
1169 no warnings 'uninitialized';
1170 for my $__el (@{$node-><AG::Node.childNodes>}) {
1171 if ($__el-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1172 $__el-><AG::Node.localName> eq $localName and
1173 $__el-><AG::Node.namespaceURI> eq $namespaceURI) {
1174 $r = $__el;
1175 last E;
1176 }
1177 }
1178
1179 my $od = $node-><AG::Node.ownerDocument>;
1180 if ($od-><AG::Document.domConfig>
1181 -><M::CFG.getParameter> (<Q::cfg|create-child-element>)) {
1182 $r = $od-><M::Document.createElementNS> ($namespaceURI, $localName);
1183 $node-><M::Node.appendChild> ($r);
1184 }
1185 } # E
1186 }__;
1187
1188 @CODE:
1189 @@QName: returnChildElementList
1190 @@enDesc:
1191 {P:: The algorithm to <DFN::return <VAR::element-type> child
1192 element list> of the element node <VAR::E> is defined as:
1193
1194 = Creates an empty <IF::StaticNodeList> object <VAR::L>
1195 that is <EM::not> read-only.
1196
1197 = For each child element node of <VAR::E>,
1198 add that element node to <VAR::L> in document order
1199 if its element type is <VAR::element-type>.
1200
1201 = Returns <VAR::E>.
1202
1203 }
1204 @@PerlDef:
1205 __DEEP{
1206 no warnings 'uninitialized';
1207 __CODE{tc|createStaticNodeList:: $r => $r}__;
1208 for my $__el (@{$node-><AG::Node.childNodes>}) {
1209 if ($__el-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1210 $__el-><AG::Node.localName> eq $localName and
1211 $__el-><AG::Node.namespaceURI> eq $namespaceURI) {
1212 push @{$r}, $__el;
1213 }
1214 }
1215 }__;
1216
1217 @CODE:
1218 @@QName: getReflectStringValue
1219 @@enDesc:
1220 {P:: If a DOM attribute is defined to <DFN::reflect the string value
1221 of the <VAR::element-type> child element> of the node <VAR::E>,
1222 the getter of the attribute <kwd:MUST> return the value
1223 defined by the algorithm:
1224
1225 = If the <VAR::E> contains a child element node <VAR::C> whose element
1226 type is <VAR::element-type>, it <kwd:MUST> return
1227 the <A::Node.textContent> value of the <VAR::C>.
1228
1229 = Otherwise, it <kwd:MUST> return <DOM::null>.
1230
1231 }
1232 @@PerlDef:
1233 __DEEP{
1234 E: {
1235 no warnings 'uninitialized';
1236 for my $__cn (@{$node-><AG::Node.childNodes>}) {
1237 if ($__cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1238 $__cn-><AG::Node.localName> eq $localName and
1239 $__cn-><AG::Node.namespaceURI> eq $namespaceURI) {
1240 $r = $__cn-><AG::Node.textContent>;
1241 last E;
1242 }
1243 }
1244 $r = null;
1245 } # E
1246 }__;
1247
1248 @CODE:
1249 @@QName: setReflectStringValue
1250 @@enDesc:
1251 {P:: If a DOM attribute is defined to <DFN::reflect the string value
1252 of the <VAR::element-type> child element> of the node <VAR::E>,
1253 the setter of the attribute <kwd:MUST> modify the node as
1254 defined by the algorithm:
1255
1256 = If the given value is <DOM::null>, any child elements
1257 whose element types are <VAR::element-type> <kwd:MUST>
1258 be removed from the list of child nodes.
1259
1260 = Otherwise, if there is no <VAR::element-type> child element
1261 node in the child node list of the <VAR::E>, it
1262 <kwd:MUST> create an element node whose element type
1263 is <VAR::element-type>, append it to the <VAR::E> as
1264 if the <M::Node.appendChild> method were invoked, and
1265 set the <A::Node.textContent> of the newly created
1266 element node to the given value.
1267
1268 = Otherwise, it <kwd:MUST> set the <A::Node.textContent>
1269 of the first <VAR::element-type> child element node
1270 in the child node list of the <VAR::E> to the given value.
1271
1272 }
1273
1274 {NOTE::
1275 It might throw an exception.
1276 }
1277 @@PerlDef:
1278 __DEEP{
1279 no warnings 'uninitialized';
1280 if (defined $given) {
1281 my $__target;
1282 E: {
1283 for my $__cl (@{$node-><AG::Node.childNodes>}) {
1284 if ($__cl-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1285 $__cl-><AG::Node.localName> eq $localName and
1286 $__cl-><AG::Node.namespaceURI> eq $namespaceURI) {
1287 $__target = $__cl;
1288 last E;
1289 }
1290 }
1291
1292 $__target = $node-><AG::Node.ownerDocument>
1293 -><M::Document.createElementNS>
1294 ($namespaceURI, $localName);
1295 $node-><M::Node.appendChild> ($__target);
1296 } # E
1297
1298 $__target-><AS::Node.textContent> ($given);
1299 } else {
1300 my @__remove;
1301 for my $__cl (@{$node-><AG::Node.childNodes>}) {
1302 if ($__cl-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1303 $__cl-><AG::Node.localName> eq $localName and
1304 $__cl-><AG::Node.namespaceURI> eq $namespaceURI) {
1305 push @__remove, $__cl;
1306 }
1307 }
1308 $node-><M::Node.removeChild> ($_) for @__remove;
1309 }
1310 }__;
1311
1312 @CODE:
1313 @@QName: getReflectAttrStringValue
1314 @@enDesc:
1315 {P:: If a DOM attribute is defined to <DFN::reflect the string value
1316 of the <VAR::attr-name> attribute> of the node <VAR::E>,
1317 the getter of the attribute <kwd:MUST> return the value
1318 defined by the algorithm:
1319
1320 = If the <VAR::E> contains an attribute node <VAR::A> whose name
1321 is <VAR::attr-name>, it <kwd:MUST> return
1322 the <A::Node.nodeValue> of the <VAR::A>.
1323
1324 = If a default value is explicitly defined
1325 where this algorithm is referenced, it <kwd:MUST>
1326 return the default value.
1327
1328 = Otherwise, it <kwd:MUST> return <DOM::null>.
1329
1330 }
1331 @@PerlDef:
1332 __DEEP{
1333 E: {
1334 $r = $node-><M::Element.getAttributeNS> ($namespaceURI, $localName);
1335 last E if defined $r;
1336
1337 $r = $defaultValue;
1338 } # E
1339 }__;
1340
1341 @CODE:
1342 @@QName: setReflectAttrStringValue
1343 @@enDesc:
1344 {P:: If a DOM attribute is defined to <DFN::reflect the string value
1345 of the <VAR::attr-name> attribute> of the node <VAR::E>,
1346 the setter of the attribute <kwd:MUST> modify the node as
1347 defined by the algorithm:
1348
1349 = If the given value is <DOM::null>, it <kwd:MUST>
1350 remove the <VAR::attr-name> attribute node, if any,
1351 from the list of attribute nodes of <VAR::E>.
1352
1353 = Otherwise, it <kwd:MUST> set the <VAR::attr-name>
1354 attribute node value to the given value as if
1355 the <M::Element.setAttributeNS> method were invoked.
1356
1357 }
1358
1359 {NOTE::
1360 It might throw an exception.
1361 }
1362 @@PerlDef:
1363 __DEEP{
1364 if (defined $given) {
1365 $node-><M::Element.setAttributeNS> ($namespaceURI, $localName, $given);
1366 } else {
1367 $node-><M::Element.removeAttributeNS> ($namespaceURI, $localName);
1368 }
1369 }__;
1370
1371 @CODE:
1372 @@QName: getReflectURIValue
1373 @@enDesc:
1374 {P:: If a DOM attribute is defined to <DFN::reflect the URI value
1375 of the <VAR::element-type> child element> of the node <VAR::E>,
1376 the getter of the attribute <kwd:MUST> return the value
1377 defined by the algorithm:
1378
1379 = Get the string <VAR::S> that would be returned
1380 if the DOM attribute <I::reflects the string value
1381 of the <VAR::element-type> child element> of the <VAR::E>.
1382
1383 = If the <VAR::S> is <DOM::null>, it <kwd:MUST> return
1384 <DOM::null>.
1385
1386 = Otherwise, if the <A::Node.baseURI> of the node
1387 from which the <VAR::S> comes is <DOM::null>,
1388 it <kwd:MUST> return the <VAR::S>.
1389
1390 = Otherwise, a string that would be returned by the
1391 <M::urigen|URIReference.getAbsoluteReference>
1392 method on a <IF::urigen|URIReference> object whose
1393 <A::urigen|URIReference.uriReference> value
1394 equals to <A::Node.textContent> with the <CODE::base> parameter
1395 set to the <A::Node.baseURI> of the node
1396 from which the <VAR::S> comes and the <CODE::nonStrict>
1397 parameter set to <DOM::false>.
1398
1399 }
1400 @@PerlDef:
1401 __DEEP{
1402 E: {
1403 no warnings 'uninitialized';
1404 for my $__cn (@{$node-><AG::Node.childNodes>}) {
1405 if ($__cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
1406 $__cn-><AG::Node.localName> eq $localName and
1407 $__cn-><AG::Node.namespaceURI> eq $namespaceURI) {
1408 my $__ref_buri = $__cn-><AG::Node.baseURI>;
1409 if (defined $__ref_buri) {
1410 $r = $node-><AG::Node.ownerDocument>
1411 -><AG::Document.implementation>
1412 -><M::urigen|URIImplementation.createURIReference>
1413 ($__cn-><AG::Node.textContent>)
1414 -><M::urigen|URIReference.getAbsoluteReference>
1415 ($__ref_buri)
1416 -><AG::urigen|URIReference.uriReference>;
1417 } else {
1418 $r = $__cn-><AG::Node.textContent>;
1419 }
1420 last E;
1421 }
1422 }
1423 $r = null;
1424 } # E
1425 }__;
1426
1427 @CODE:
1428 @@QName: setReflectURIValue
1429 @@enDesc:
1430 If a DOM attribute is defined to <DFN::reflect the URI value
1431 of the <VAR::element-type> child element> of the node <VAR::E>,
1432 the setter of the attribute <kwd:MUST> modify the node as
1433 if the DOM attribute <I::reflects the string value of
1434 the <VAR::element-type> child element> of the <VAR::E>.
1435
1436 {NOTE::
1437 It might throw an exception.
1438 }
1439 @@PerlDef:
1440 __CODE{setReflectStringValue}__;
1441
1442 @CODE:
1443 @@QName: getReflectAttrURIValue
1444 @@enDesc:
1445 {P:: If a DOM attribute is defined to <DFN::reflect the URI value
1446 of the <VAR::attr-name> attribute> of the node <VAR::E>,
1447 the getter of the attribute <kwd:MUST> return the value
1448 defined by the algorithm:
1449
1450 = Get the string <VAR::S> that would be returned
1451 if the DOM attribute <I::reflects the string value
1452 of the <VAR::attr-name> attribute> of the <VAR::E>.
1453
1454 = If the <VAR::S> is <DOM::null>, it <kwd:MUST> return
1455 <DOM::null>.
1456
1457 = Otherwise, if the <A::Node.baseURI> of the node
1458 from which the <VAR::S> comes is <DOM::null>,
1459 it <kwd:MUST> return the <VAR::S>.
1460
1461 = Otherwise, a string that would be returned by the
1462 <M::urigen|URIReference.getAbsoluteReference>
1463 method on a <IF::urigen|URIReference> object whose
1464 <A::urigen|URIReference.uriReference> value
1465 equals to <A::Node.textContent> with the <CODE::base> parameter
1466 set to the <A::Node.baseURI> of the node
1467 from which the <VAR::S> comes and the <CODE::nonStrict>
1468 parameter set to <DOM::false>.
1469
1470 }
1471 @@PerlDef:
1472 __DEEP{
1473 my $__attr = $node-><M::Element.getAttributeNodeNS>
1474 ($namespaceURI, $localName);
1475 if (defined $__attr) {
1476 my $__attr_base = $__attr-><AG::Node.baseURI>;
1477 if (defined $__attr_base) {
1478 $r = $node-><AG::Node.ownerDocument>
1479 -><AG::Document.implementation>
1480 -><M::urigen|URIImplementation.createURIReference>
1481 ($__attr-><AG::Node.nodeValue>)
1482 -><M::urigen|URIReference.getAbsoluteReference>
1483 ($__attr_base)
1484 -><AG::urigen|URIReference.uriReference>;
1485 } else {
1486 $r = $__attr-><AG::Node.nodeValue>;
1487 }
1488 } else {
1489 $r = null;
1490 }
1491 }__;
1492
1493 @CODE:
1494 @@QName: setReflectAttrURIValue
1495 @@enDesc:
1496 If a DOM attribute is defined to <DFN::reflect the URI value
1497 of the <VAR::attr-name> attribute> of the node <VAR::E>,
1498 the setter of the DOM attribute <kwd:MUST> modify the node as
1499 if the DOM attribute <I::reflects the string value of
1500 the <VAR::attr-name> attribute> of the <VAR::E>.
1501
1502 {NOTE::
1503 It might throw an exception.
1504 }
1505 @@PerlDef:
1506 __CODE{setReflectAttrStringValue}__;
1507
1508 @enImplNote:
1509 @@ddid: datereflect
1510 @@@:
1511 {ISSUE::
1512 <QUOTE::reflecting Date child element> attribute should
1513 be provided for published and created?
1514 }
1515 ##AtomImplementation
1516
1517 IFClsDef:
1518 @IFQName: AtomDocument
1519 @ClsQName: ManakaiAtomDocument
1520
1521 @IFISA: Document
1522 @ClsISA: td|ManakaiDOMDocument
1523
1524 @s:rootElementType: AnyAtomElement||ManakaiDOM|all
1525
1526 @enDesc:
1527 If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
1528 is supported, a <IF::Document> object whose <A::Document.documentElement>'s
1529 <A::Node.namespaceURI>, if any, is <URI^^DISCore|QName::atom|> at least
1530 at the time of creation <kwd:MUST> also
1531 implement the <IF::AtomDocument> interface. Other
1532 <IF:Document> objects <kwd:MAY> also implement
1533 the <IF::AtomDocument> interface.
1534
1535 @Test:
1536 @@QName: createDocument.AtomDocument.test
1537 @@PerlDef:
1538 my $impl;
1539 __CODE{tc|createImplForTest:: $impl => $impl}__;
1540
1541 my $doc = $impl-><M::c|DOMImplementation.createDocument>
1542 (<Q::atom|>, 'unknown');
1543
1544 $test->id ('interface');
1545 $test->assert_isa ($doc, <IFName::AtomDocument>);
1546 ##AtomDocument
1547
1548 IFClsDef:
1549 @IFQName: AtomFeedDocument
1550 @ClsQName: ManakaiFeedEntryDocument
1551
1552 @IFISA: AtomDocument
1553 @ClsISA: ManakaiAtomDocument
1554
1555 @s:rootElementType:
1556 @@@: atom|feed
1557 @@DISCore:stopISARecursive: 1
1558
1559 @enDesc:
1560 The <IF::AtomFeedDocument> interface provides convenience
1561 methods and attributes for an Atom
1562 Feed Document, i.e. representation of an Atom feed.
1563
1564 If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
1565 is supported, a <IF::Document> object whose <A::Document.documentElement>'s
1566 element type, if any, is <XE::atom|feed> at least at
1567 the time of creation <kwd:MUST> also
1568 implement the <IF::AtomFeedDocument> interface. Other
1569 <IF::Document> objects <kwd:MAY> also implement
1570 the <IF::AtomFeedDocument> interface.
1571
1572 @Test:
1573 @@QName: createDocument.AtomFeedDocument.test
1574 @@PerlDef:
1575 my $impl;
1576 __CODE{tc|createImplForTest:: $impl => $impl}__;
1577
1578 my $doc = $impl-><M::c|DOMImplementation.createDocument>
1579 (<Q::atom|>, 'feed');
1580
1581 $test->id ('interface');
1582 $test->assert_isa ($doc, <IFName::AtomFeedDocument>);
1583 ##AtomFeedDocument
1584
1585 IFClsDef:
1586 @IFQName: AtomEntryDocument
1587 @ClsQName: ManakaiAtomEntryDocument
1588
1589 @IFISA: AtomDocument
1590 @ClsISA: ManakaiAtomDocument
1591
1592 @s:rootElementType:
1593 @@@: atom|entry
1594 @@DISCore:stopISARecursive: 1
1595
1596 @enDesc:
1597 The <IF::AtomEntryDocument> interface provides convenience
1598 methods and attributes for an Atom
1599 Entry Document, i.e. exactly one Atom entry, outside
1600 of the context of an Atom feed.
1601
1602 If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
1603 is supported, a <IF::Document> object whose <A::Document.documentElement>'s
1604 element type, if any, is <XE::atom|entry> at least at
1605 the time of the creation <kwd:MUST> also
1606 implement the <IF::AtomEntryDocument> interface. Other
1607 <IF::Document> objects <kwd:MAY> also implement
1608 the <IF::AtomEntryDocument> interface.
1609
1610 @Test:
1611 @@QName: createDocument.AtomEntryDocument.test
1612 @@PerlDef:
1613 my $impl;
1614 __CODE{tc|createImplForTest:: $impl => $impl}__;
1615
1616 my $doc = $impl-><M::c|DOMImplementation.createDocument>
1617 (<Q::atom|>, 'entry');
1618
1619 $test->id ('interface');
1620 $test->assert_isa ($doc, <IFName::AtomEntryDocument>);
1621 ##AtomEntryDocument
1622
1623 AGDef:
1624 @QName: atomCommonAttributes
1625 @enFN: common attributes
1626 @mv:attributeTypeGroupName: common
1627
1628 @mv:refers: Atom
1629
1630 @ATDef:
1631 @@mv:attributeTypeName: xml|base
1632 @@mv:attributeValueType: atomUri
1633
1634 @ATDef:
1635 @@mv:attributeTypeName: xml|lang
1636 @@mv:attributeValueType: atomLanguageTag
1637
1638 @mv:refers: undefinedAttributes
1639 ##atomCommonAttributes
1640
1641 STDef:
1642 @QName: atomNCName
1643 @mv:datatypeEntityName: NCName
1644 #subsetOf: xsd|string
1645 #minLength, pattern
1646
1647 STDef:
1648 @QName: atomMediaType
1649 @mv:datatypeEntityName: MediaType
1650 #subsetOf xsd|string
1651 # pattern
1652
1653 STDef:
1654 @QName: atomLanguageTag
1655 @mv:datatypeEntityName: LangaugeTag
1656 #subsetOf: xsd|string
1657 #pattern
1658
1659 STDef:
1660 @QName: atomUri
1661 @mv:datatypeEntityName: URI
1662 #aliasfor text
1663 STCDef:
1664 @QName: atomUriCM
1665 @mv:elementContentModelName: URI
1666 @cm: (dxm|PCDATA||ManakaiDOM|all)*
1667
1668 STDef:
1669 @QName: atomEmailAddress
1670 @mv:datatypeEntityName: EmailAddress
1671 #subsetOf xsd|string
1672 #pattern
1673 STCDef:
1674 @QName: atomEmailAddressCM
1675 @mv:elementContentModelName: EmailAddress
1676 @cm: (dxm|PCDATA||ManakaiDOM|all)*
1677
1678 ElementTypeBinding:
1679 @Name: AGDef
1680 @ElementType:
1681 dis:ResourceDef
1682 @ShadowContent:
1683 @@DISCore:resourceType: mv|AttributeTypeGroup
1684 @@For: =ManakaiDOM|ManakaiDOMLatest
1685
1686 ElementTypeBinding:
1687 @Name: ATDef
1688 @ElementType:
1689 dis:ResourceDef
1690 @ShadowContent:
1691 @@DISCore:resourceType: mv|AttributeType
1692 @@For: =ManakaiDOM|ManakaiDOMLatest
1693
1694 ElementTypeBinding:
1695 @Name: ECDef
1696 @ElementType:
1697 dis:ResourceDef
1698 @ShadowContent:
1699 @@DISCore:resourceType: mv|ElementTypeClass
1700 @@For: =ManakaiDOM|ManakaiDOMLatest
1701
1702 ElementTypeBinding:
1703 @Name: EMDef
1704 @ElementType:
1705 dis:ResourceDef
1706 @ShadowContent:
1707 @@DISCore:resourceType: mv|ElementTypeClassMix
1708 @@For: =ManakaiDOM|ManakaiDOMLatest
1709
1710 ElementTypeBinding:
1711 @Name: STDef
1712 @ElementType:
1713 dis:ResourceDef
1714 @ShadowContent:
1715 @@DISCore:resourceType: mv|XMLDTDDatatypeEntity
1716 @@For: =ManakaiDOM|ManakaiDOMLatest
1717
1718 ElementTypeBinding:
1719 @Name: STCDef
1720 @ElementType:
1721 dis:ResourceDef
1722 @ShadowContent:
1723 @@DISCore:resourceType: mv|ElementContentModel
1724 @@For: =ManakaiDOM|ManakaiDOMLatest
1725
1726 IFClsDef:
1727 @IFQName: AtomElement
1728 @ClsQName: ManakaiAtomElement
1729
1730 @IFISA: Element
1731 @ClsISA: te|ManakaiDOMElement
1732
1733 @s:elementType: AnyAtomElement||ManakaiDOM|all
1734
1735 @enDesc:
1736 The <IF::AtomElement> interface provides convenience
1737 methods and attributes for Atom elements.
1738
1739 If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
1740 is supported, an <IF::Element> object whose namespace URI
1741 is <URI^^DIS|QName::atom|> <kwd:MUST> also implement
1742 the <IF::AtomElement> interface. Other <IF::Element> objects
1743 <kwd:MAY> also implement the <IF::AtomElement> interface.
1744
1745 @enImplNote:
1746 @@ddid: todo
1747 @@@:
1748 {TODO::
1749 Need <CODE::xmllang> and <CODE::xmlbase> attributes
1750 from SVG?
1751 }
1752
1753 @Test:
1754 @@QName: AtomElement.interface.test
1755 @@PerlDef:
1756 for my $interface (
1757 <IFName::AtomElement>,
1758 <IFName::AtomElement||ManakaiDOM|ManakaiDOM>,
1759 <IFName::Element>,
1760 <IFName::Node>,
1761 <IFName::f|GetFeature>,
1762 ) {
1763 $test->id ($interface);
1764 $test->assert_true (<Class::ManakaiAtomElement>->isa ($interface));
1765 }
1766 @Test:
1767 @@QName: createElementNS.AtomElement.test
1768 @@PerlDef:
1769 my $doc;
1770 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
1771
1772 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'unknown');
1773 $test->assert_isa ($el, <IFName::AtomElement>);
1774 ##AtomElement
1775
1776 ResourceDef:
1777 @QName: AnyAtomElement
1778 @DISCore:resourceType: s|AnyElementInNS
1779 @AppName:
1780 @@@: atom|*
1781 @@ContentType: DISCore|QName
1782 @ForCheck: =ManakaiDOM|all
1783
1784 ElementTypeBinding:
1785 @Name: cm
1786 @ElementType:
1787 mv:elementContentModel
1788 @ShadowContent:
1789 @@ContentType: lang|dcmodel
1790
1791 IFClsConstructDef:
1792 @IFQName: AtomTextConstruct
1793 @ClsQName: ManakaiAtomTextConstruct
1794 @AGQName: TextAG
1795 @AGName: text
1796 @CMQName: TextCM
1797 @CMName: text
1798
1799 @IFISA: AtomElement
1800 @ClsISA: ManakaiAtomElement
1801
1802 @mv:refers: atomCommonAttributes
1803
1804 @cm:
1805 dxm|ANY||ManakaiDOM|all
1806 @enImplNote:
1807 @@ddid:cm
1808 @@@:
1809 {TODO::
1810 (dxm|PCDATA||ManakaiDOM|all | html|div)*
1811 }
1812
1813 @enDesc:
1814 The <IF::AtomTextConstruct> interface provides convenience
1815 methods and attributes for <IF::Element> nodes
1816 classfied to the Text constructs. Other <IF::Element>
1817 objects <kwd:MAY> also implement the <IF::AtomTextConstruct>
1818 interface.
1819
1820 A Text construct contains human-readable text, usually in
1821 small quantities. The content of a Text construct is
1822 Language-Sensitive.
1823
1824 @ATTR:
1825 @@Name: type
1826 @@enDesc:
1827 The <XA::type> attribute of the element.
1828
1829 It <kwd:MUST> <I::reflect the string value
1830 of the <XA::type> attribute> of the node. The
1831 default value <kwd:MUST> be <CODE::text>.
1832 @@Type: DOMString
1833 @@Get:
1834 @@@nullCase:
1835 @@@@enDesc:
1836 If the algorithm returns <DOM::null>.
1837 @@@PerlDef:
1838 __CODE{getReflectAttrStringValue::
1839 $node => $self,
1840 $namespaceURI => {null},
1841 $localName => 'type',
1842 $r => $r,
1843 $defaultValue => 'text',
1844 }__;
1845 @@Set:
1846 @@@nullCase:
1847 @@@@enDesc:
1848 Removes the attribute.
1849 @@@NodeReadOnlyError:
1850 @@@PerlDef:
1851 __CODE{setReflectAttrStringValue::
1852 $node => $self,
1853 $namespaceURI => {null},
1854 $localName => 'type',
1855 $given => $given,
1856 }__;
1857
1858 @Attr:
1859 @@Name: container
1860 @@enDesc:
1861 The container element that contains the actual content
1862 of the construct.
1863 @@Type: Element
1864 @@Get:
1865 @@@enDesc:
1866 If the <A::AtomTextConstruct.type> is <CODE::xhtml>,
1867 the getter <kwd:MUST> <I::return the <XE::html|div> child element>.
1868 Otherwise, the object itself <kwd:MUST> be returned.
1869 @@@nullCase:
1870 @@@@enDesc:
1871 If the <A::AtomTextConstruct.type> is <CODE::xhtml>
1872 and the algorithm returns <DOM::null>.
1873 @@@NodeReadOnlyError:
1874 @@@PerlDef:
1875 __DEEP{
1876 my $type = $self-><AG::AtomTextConstruct.type>;
1877 if ($type eq 'xhtml') {
1878 __CODE{returnChildElement::
1879 $node => $self,
1880 $namespaceURI => {<Q::html|>},
1881 $localName => 'div',
1882 $r => $r,
1883 }__;
1884 } else {
1885 $r = $self;
1886 }
1887 }__;
1888
1889 @@Test:
1890 @@@QName: AtomTextConstruct.container.test
1891 @@@PerlDef:
1892 my $doc;
1893 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
1894
1895 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'title');
1896
1897 $test->id ('no');
1898 $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $el);
1899
1900 $test->id ('text');
1901 $el-><AS::AtomTextConstruct.type> ('text');
1902 $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $el);
1903
1904 $test->id ('html');
1905 $el-><AS::AtomTextConstruct.type> ('html');
1906 $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $el);
1907
1908 $test->id ('xhtml');
1909 $el-><AS::AtomTextConstruct.type> ('xhtml');
1910 $test->assert_null ($el-><AG::AtomTextConstruct.container>);
1911
1912 $doc-><AG::Document.domConfig>
1913 -><M::CFG.setParameter> (<Q::cfg|create-child-element> => true);
1914 my $con = $el-><AG::AtomTextConstruct.container>;
1915
1916 $test->id ('xhtml.create');
1917 $test->assert_not_equals ($con, $el);
1918
1919 $test->id ('xhtml.namespaceURI');
1920 $test->assert_equals ($con-><AG::Node.namespaceURI>, <Q::html|>);
1921
1922 $test->id ('xhtml.localName');
1923 $test->assert_equals ($con-><AG::Node.localName>, 'div');
1924
1925 $test->id ('xhtml.parentNode');
1926 $test->assert_equals ($con-><AG::Node.parentNode>, $el);
1927
1928 $test->id ('xhtml.2');
1929 $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $con);
1930 ##AtomTextConstruct
1931
1932 IFClsConstructDef:
1933 @IFQName: AtomPersonConstruct
1934 @ClsQName: ManakaiAtomPersonConstruct
1935 @AGQName: PersonAG
1936 @AGName: person
1937 @CMQName: PersonCM
1938 @CMName: person
1939
1940 @IFISA: AtomElement
1941 @ClsISA: ManakaiAtomElement
1942
1943 @mv:refers: atomCommonAttributes
1944
1945 @cm:
1946 (person-prop+)
1947
1948 @enDesc:
1949 The <IF::AtomPersonConstruct> interface provides convenience
1950 methods and attributes for <IF::Element> nodes
1951 classfied to the Person constructs. Other <IF::Element>
1952 objects <kwd:MAY> also implement the <IF::AtomPersonConstruct>
1953 interface.
1954
1955 A Person construct is an element that describes a person,
1956 corporation, or similar entity.
1957
1958 @Attr:
1959 @@Name: name
1960 @@enDesc:
1961 The <XE::atom|name> value of the feed.
1962
1963 It <kwd:MUST> <I::reflect the string value
1964 of the <XE::atom|name> child element> of the node.
1965 @@Type: DOMString
1966 @@Get:
1967 @@@nullCase:
1968 @@@@enDesc:
1969 If the algorithm returns <DOM::null>.
1970 @@@NodeReadOnlyError:
1971 @@@PerlDef:
1972 __CODE{getReflectStringValue::
1973 $node => $self,
1974 $namespaceURI => {<Q::atom|>},
1975 $localName => 'name',
1976 $r => $r,
1977 }__;
1978 @@Set:
1979 @@@nullCase:
1980 @@@@enDesc:
1981 Removes the value.
1982 @@@NodeReadOnlyError:
1983 @@@PerlDef:
1984 __CODE{setReflectStringValue::
1985 $node => $self,
1986 $namespaceURI => {<Q::atom|>},
1987 $localName => 'name',
1988 $given => $given,
1989 }__;
1990
1991 @Attr:
1992 @@Name: nameElement
1993 @@enDesc:
1994 The <XE::atom|name> child element of the node.
1995 @@Type: AtomNameElement
1996 @@Get:
1997 @@@enDesc:
1998 It <kwd:MUST> <I::return a <XE::atom|name> child element>
1999 of the node.
2000 @@@nullCase:
2001 @@@@enDesc:
2002 If the algorithm returns <DOM::null>.
2003 @@@NodeReadOnlyError:
2004 @@@PerlDef:
2005 __CODE{returnChildElement::
2006 $node => $self,
2007 $namespaceURI => {<Q::atom|>},
2008 $localName => 'name',
2009 $r => $r,
2010 }__;
2011
2012 @Attr:
2013 @@Name: uri
2014 @@enDesc:
2015 The <XE::atom|uri> value of the feed.
2016
2017 It <kwd:MUST> <I::reflect the URI value
2018 of the <XE::atom|uri> child element> of the node.
2019 @@Type: DOMString
2020 @@actualType: DOMURI
2021 @@Get:
2022 @@@nullCase:
2023 @@@@enDesc:
2024 If the algorithm returns <DOM::null>.
2025 @@@NodeReadOnlyError:
2026 @@@PerlDef:
2027 __CODE{getReflectURIValue::
2028 $node => $self,
2029 $namespaceURI => {<Q::atom|>},
2030 $localName => 'uri',
2031 $r => $r,
2032 }__;
2033 @@Set:
2034 @@@nullCase:
2035 @@@@enDesc:
2036 Removes the value.
2037 @@@NodeReadOnlyError:
2038 @@@PerlDef:
2039 __CODE{setReflectURIValue::
2040 $node => $self,
2041 $namespaceURI => {<Q::atom|>},
2042 $localName => 'uri',
2043 $given => $given,
2044 }__;
2045
2046 @Attr:
2047 @@Name: email
2048 @@enDesc:
2049 The <XE::atom|email> value of the feed.
2050
2051 It <kwd:MUST> <I::reflect the string value
2052 of the <XE::atom|email> child element> of the node.
2053 @@Type: DOMString
2054 @@Get:
2055 @@@nullCase:
2056 @@@@enDesc:
2057 If the algorithm returns <DOM::null>.
2058 @@@NodeReadOnlyError:
2059 @@@PerlDef:
2060 __CODE{getReflectStringValue::
2061 $node => $self,
2062 $namespaceURI => {<Q::atom|>},
2063 $localName => 'email',
2064 $r => $r,
2065 }__;
2066 @@Set:
2067 @@@nullCase:
2068 @@@@enDesc:
2069 Removes the value.
2070 @@@NodeReadOnlyError:
2071 @@@PerlDef:
2072 __CODE{setReflectStringValue::
2073 $node => $self,
2074 $namespaceURI => {<Q::atom|>},
2075 $localName => 'email',
2076 $given => $given,
2077 }__;
2078 ##AtomPersonConstruct
2079
2080 ECDef:
2081 @QName: person-prop
2082 @mv:elementTypeClassName: person-prop
2083 @mv:refers: atom|name
2084 @mv:refers: atom|uri
2085 @mv:refers: atom|email
2086 @mv:refers: extensionElements
2087
2088 IFClsConstructDef:
2089 @IFQName: AtomDateConstruct
2090 @ClsQName: ManakaiAtomDateConstruct
2091 @AGQName: DateAG
2092 @AGName: date
2093 @CMQName: DateCM
2094 @CMName: date
2095
2096 @IFISA: AtomElement
2097 @ClsISA: ManakaiAtomElement
2098
2099 @mv:refers: atomCommonAttributes
2100
2101 @cm:
2102 (dxm|PCDATA||ManakaiDOM|all)*
2103 @enImplNote:
2104 @@ddid: cm
2105 @@@:
2106 {TODO::
2107 xsd|dateTime
2108 }
2109
2110 @enDesc:
2111 The <IF::AtomDateConstruct> interface provides convenience
2112 methods and attributes for <IF::Element> nodes
2113 classfied to the Date constructs. Other <IF::Element>
2114 objects <kwd:MAY> also implement the <IF::AtomDateConstruct>
2115 interface.
2116
2117 A Date construct is an element whose content is a date that
2118 conforms to the uppercase version of the RFC 3339 format.
2119
2120 @Attr:
2121 @@Name: value
2122 @@enDesc:
2123 The date value of the node.
2124
2125 {ISSUE::
2126
2127 - Out of range of platform DOMTimeStamp type
2128
2129 - Errorous xsd:dateTime
2130
2131 - Leap seconds
2132
2133 - Timezone
2134
2135 - Precision
2136
2137 }
2138 @@Type: DOMTimeStamp
2139 @@Get:
2140 @@@enDesc:
2141 {TODO:: Define
2142 }
2143 @@@PerlDef:
2144 my $value = $self-><AG::Node.textContent>;
2145 if ($value =~ /\A(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)(\.\d+)?
2146 (?:Z|([+-]\d+):(\d+))\z/x) {
2147 require Time::Local;
2148 $r = Time::Local::timegm_nocheck
2149 ($6, defined $8 ? $8 > 0 ? $5 - $9 : $5 + $9 : $5,
2150 defined $8 ? $4 - $8 : $4, $3, $2-1, $1-1900);
2151 $r += "0$7" if defined $7;
2152 } else {
2153 $r = 0;
2154 }
2155 @@Set:
2156 @@@enDesc:
2157 {TODO:: Define
2158 }
2159 @@@NodeReadOnlyError:
2160 @@@PerlDef:
2161 __DEEP{
2162 my @value = gmtime (int ($given / 1));
2163 my $value = sprintf '%04d-%02d-%02dT%02d:%02d:%02d',
2164 $value[5] + 1900, $value[4] + 1,
2165 $value[3], $value[2], $value[1], $value[0];
2166 my $f = $given % 1;
2167 $value .= substr (''.$f, 1) if $f;
2168 $value .= 'Z';
2169 $self-><AS::Node.textContent> ($value);
2170 }__;
2171
2172 @enImplNote:
2173 @@ddid: todo
2174 @@@:
2175 {TODO::
2176 Access to components, especially timezone and -00:00.
2177 }
2178 ##AtomDateConstruct
2179
2180 ECDef:
2181 @QName: feed-prop
2182 @mv:elementTypeClassName: feed-prop
2183 @mv:refers: atom|author
2184 @mv:refers: atom|category
2185 @mv:refers: atom|contributor
2186 @mv:refers: atom|generator
2187 @mv:refers: atom|icon
2188 @mv:refers: atom|id
2189 @mv:refers: atom|link
2190 @mv:refers: atom|logo
2191 @mv:refers: atom|rights
2192 @mv:refers: atom|subtitle
2193 @mv:refers: atom|title
2194 @mv:refers: atom|updated
2195 @mv:refers: extensionElements
2196
2197 IFClsETDef:
2198 @IFQName: AtomFeedElement
2199 @ETQName: atom|feed
2200 @ETRQName: atom|feed
2201 @ClsQName: ManakaiAtomFeedElement
2202
2203 @IFISA: AtomElement
2204 @ClsISA: ManakaiAtomElement
2205
2206 @mv:refers: atomCommonAttributes
2207
2208 @cm:
2209 (feed-prop+, atom|entry*)
2210
2211 @enDesc:
2212 The <XE::atom|feed> element is the document element
2213 of an Atom Feed Document.
2214
2215 {ISSUE::
2216 <XE::atom|entry> children <kwd:MUST> be placed after
2217 any other elements. Attributes creating children
2218 should insert them before any entries?
2219 }
2220
2221 @Attr:
2222 @@Name: authorElements
2223 @@enDesc:
2224 A static list of <XE::atom|author> child elements of the node.
2225 @@Type: StaticNodeList
2226 @@Get:
2227 @@@enDesc:
2228 It <kwd:MUST> <I::return a <XE::atom|author> child element list>
2229 of the node.
2230 @@@PerlDef:
2231 __CODE{returnChildElementList::
2232 $node => $self,
2233 $namespaceURI => {<Q::atom|>},
2234 $localName => 'author',
2235 $r => $r,
2236 }__;
2237
2238 @@Test:
2239 @@@QName: AtomFeedElement.authorElements.empty.test
2240 @@@PerlDef:
2241 my $doc;
2242 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2243
2244 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2245
2246 my $list = $el-><AG::AtomFeedElement.authorElements>;
2247
2248 $test->id ('interface');
2249 $test->assert_isa ($list, <IFName::StaticNodeList>);
2250
2251 $test->id ('length');
2252 $test->assert_num_equals
2253 (actual_value => 0+@{$list}, expected_value => 0);
2254
2255 $test->id ('readOnly');
2256 $test->assert_false ($list-><AG::NodeList.manakaiReadOnly>);
2257 @@Test:
2258 @@@QName: AtomFeedElement.authorElements.two.test
2259 @@@PerlDef:
2260 my $doc;
2261 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2262
2263 my $e1 = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2264 my $a1 = $doc-><M::Document.createElementNS> (<Q::atom|>, 'author');
2265 $e1-><M::Node.appendChild> ($a1);
2266 my $a2 = $doc-><M::Document.createElementNS> (<Q::atom|>, 'author');
2267 $e1-><M::Node.appendChild> ($a2);
2268
2269 my $list = $e1-><AG::AtomFeedElement.authorElements>;
2270 my $a3 = $doc-><M::Document.createElementNS> (<Q::atom|>, 'author');
2271 $e1-><M::Node.appendChild> ($a3);
2272
2273 $test->id ('length');
2274 $test->assert_num_equals
2275 (actual_value => 0+@{$list}, expected_value => 2);
2276
2277 $test->id (0);
2278 $test->assert_equals ($list->[0], $a1);
2279
2280 $test->id (1);
2281 $test->assert_equals ($list->[1], $a2);
2282
2283 @Attr:
2284 @@Name: categoryElements
2285 @@enDesc:
2286 A static list of <XE::atom|category> child elements of the node.
2287 @@Type: StaticNodeList
2288 @@Get:
2289 @@@enDesc:
2290 It <kwd:MUST> <I::return a <XE::atom|category> child element list>
2291 of the node.
2292 @@@PerlDef:
2293 __CODE{returnChildElementList::
2294 $node => $self,
2295 $namespaceURI => {<Q::atom|>},
2296 $localName => 'category',
2297 $r => $r,
2298 }__;
2299
2300 @Attr:
2301 @@Name: contributorElements
2302 @@enDesc:
2303 A static list of <XE::atom|contributor> child elements of the node.
2304 @@Type: StaticNodeList
2305 @@Get:
2306 @@@enDesc:
2307 It <kwd:MUST> <I::return a <XE::atom|contributor> child element list>
2308 of the node.
2309 @@@PerlDef:
2310 __CODE{returnChildElementList::
2311 $node => $self,
2312 $namespaceURI => {<Q::atom|>},
2313 $localName => 'contributor',
2314 $r => $r,
2315 }__;
2316
2317 @Attr:
2318 @@Name: generatorElement
2319 @@enDesc:
2320 The <XE::atom|generator> child element of the node.
2321 @@Type: AtomGeneratorElement
2322 @@Get:
2323 @@@enDesc:
2324 It <kwd:MUST> <I::return a <XE::atom|generator> child element>
2325 of the node.
2326 @@@nullCase:
2327 @@@@enDesc:
2328 If the algorithm returns <DOM::null>.
2329 @@@NodeReadOnlyError:
2330 @@@PerlDef:
2331 __CODE{returnChildElement::
2332 $node => $self,
2333 $namespaceURI => {<Q::atom|>},
2334 $localName => 'generator',
2335 $r => $r,
2336 }__;
2337
2338 @@Test:
2339 @@@QName: AtomFeedElement.generatorElement.test
2340 @@@PerlDef:
2341 my $doc;
2342 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2343
2344 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2345
2346 $test->id ('no');
2347 $test->assert_null ($el-><AG::AtomFeedElement.generatorElement>);
2348
2349 $doc-><AG::Document.domConfig>
2350 -><M::CFG.setParameter> (<Q::cfg|create-child-element> => true);
2351 my $ge = $el-><AG::AtomFeedElement.generatorElement>;
2352
2353 $test->id ('create.interface');
2354 $test->assert_isa ($ge, <IFName::Element>);
2355
2356 $test->id ('create.namespaceURI');
2357 $test->assert_equals ($ge-><AG::Node.namespaceURI>, <Q::atom|>);
2358
2359 $test->id ('create.localName');
2360 $test->assert_equals ($ge-><AG::Node.localName>, 'generator');
2361
2362 $test->id ('has');
2363 my $ge2 = $el-><AG::AtomFeedElement.generatorElement>;
2364 $test->assert_equals ($ge2, $ge);
2365
2366 $test->id ('multiple');
2367 $el-><M::Node.appendChild>
2368 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'generator'));
2369 my $ge3 = $el-><AG::AtomFeedElement.generatorElement>;
2370 $test->assert_equals ($ge3, $ge);
2371
2372 @Attr:
2373 @@Name: icon
2374 @@enDesc:
2375 The <XE::atom|icon> value of the feed.
2376
2377 It <kwd:MUST> <I::reflect the URI value
2378 of the <XE::atom|icon> child element> of the node.
2379 @@Type: DOMString
2380 @@actualType: DOMURI
2381 @@Get:
2382 @@@nullCase:
2383 @@@@enDesc:
2384 If the algorithm returns <DOM::null>.
2385 @@@NodeReadOnlyError:
2386 @@@PerlDef:
2387 __CODE{getReflectURIValue::
2388 $node => $self,
2389 $namespaceURI => {<Q::atom|>},
2390 $localName => 'icon',
2391 $r => $r,
2392 }__;
2393 @@Set:
2394 @@@nullCase:
2395 @@@@enDesc:
2396 Removes the value.
2397 @@@NodeReadOnlyError:
2398 @@@PerlDef:
2399 __CODE{setReflectURIValue::
2400 $node => $self,
2401 $namespaceURI => {<Q::atom|>},
2402 $localName => 'icon',
2403 $given => $given,
2404 }__;
2405
2406 @@Test:
2407 @@@QName: AtomFeedElement.icon.test
2408 @@@PerlDef:
2409 my $doc;
2410 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2411
2412 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2413
2414 $test->id ('default');
2415 $test->assert_null ($el-><AG::AtomFeedElement.icon>);
2416
2417 $test->id ('set');
2418 $el-><AS::AtomFeedElement.icon> ('http://example.com/');
2419 $test->assert_equals ($el-><AG::AtomFeedElement.icon>,
2420 'http://example.com/');
2421
2422 $test->id ('relative');
2423 $el-><AS::AtomFeedElement.icon> ('favicon.ico');
2424 $test->assert_equals ($el-><AG::AtomFeedElement.icon>,
2425 'favicon.ico');
2426
2427 $test->id ('relative.base');
2428 $el-><M::Element.setAttributeNS> (<Q::xml:>, 'xml:base',
2429 'http://www.example.com/');
2430 $test->assert_equals ($el-><AG::AtomFeedElement.icon>,
2431 'http://www.example.com/favicon.ico');
2432
2433 $test->id ('multiple');
2434 $el-><M::Node.appendChild>
2435 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'icon'))
2436 -><AS::Node.textContent> ('/default.ico'); # ignored
2437 $test->assert_equals ($el-><AG::AtomFeedElement.icon>,
2438 'http://www.example.com/favicon.ico');
2439
2440 $test->id ('remove');
2441 $el-><AS::AtomFeedElement.icon> (null);
2442 $test->assert_null ($el-><AG::AtomFeedElement.icon>);
2443
2444 @Attr:
2445 @@Name: id
2446 @@enDesc:
2447 The <XE::atom|id> value of the feed.
2448
2449 It <kwd:MUST> <I::reflect the string value
2450 of the <XE::atom|id> child element> of the node.
2451 @@Type: DOMString
2452 @@actualType: DOMURI
2453 @@Get:
2454 @@@nullCase:
2455 @@@@enDesc:
2456 If the algorithm returns <DOM::null>.
2457 @@@NodeReadOnlyError:
2458 @@@PerlDef:
2459 __CODE{getReflectStringValue::
2460 $node => $self,
2461 $namespaceURI => {<Q::atom|>},
2462 $localName => 'id',
2463 $r => $r,
2464 }__;
2465 @@Set:
2466 @@@nullCase:
2467 @@@@enDesc:
2468 Removes the value.
2469 @@@NodeReadOnlyError:
2470 @@@PerlDef:
2471 __CODE{setReflectStringValue::
2472 $node => $self,
2473 $namespaceURI => {<Q::atom|>},
2474 $localName => 'id',
2475 $given => $given,
2476 }__;
2477
2478 @@Test:
2479 @@@QName: AtomFeedElement.id.test
2480 @@@PerlDef:
2481 my $doc;
2482 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2483
2484 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2485
2486 $test->id ('default');
2487 $test->assert_null ($el-><AG::AtomFeedElement.id>);
2488
2489 $test->id ('set');
2490 $el-><AS::AtomFeedElement.id> ('http://example.com/');
2491 $test->assert_equals ($el-><AG::AtomFeedElement.id>,
2492 'http://example.com/');
2493
2494 $test->id ('relative');
2495 $el-><AS::AtomFeedElement.id> ('favicon.ico');
2496 $test->assert_equals ($el-><AG::AtomFeedElement.id>,
2497 'favicon.ico');
2498
2499 $test->id ('relative.base');
2500 $el-><M::Element.setAttributeNS> (<Q::xml:>, 'xml:base',
2501 'http://www.example.com/');
2502 $test->assert_equals ($el-><AG::AtomFeedElement.id>,
2503 'favicon.ico');
2504
2505 $test->id ('multiple');
2506 $el-><M::Node.appendChild>
2507 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'id'))
2508 -><AS::Node.textContent> ('/default.ico'); # ignored
2509 $test->assert_equals ($el-><AG::AtomFeedElement.id>,
2510 'favicon.ico');
2511
2512 $test->id ('remove');
2513 $el-><AS::AtomFeedElement.id> (null);
2514 $test->assert_null ($el-><AG::AtomFeedElement.id>);
2515
2516 @Attr:
2517 @@Name: linkElements
2518 @@enDesc:
2519 A static list of <XE::atom|link> child elements of the node.
2520 @@Type: StaticNodeList
2521 @@Get:
2522 @@@enDesc:
2523 It <kwd:MUST> <I::return a <XE::atom|link> child element list>
2524 of the node.
2525 @@@PerlDef:
2526 __CODE{returnChildElementList::
2527 $node => $self,
2528 $namespaceURI => {<Q::atom|>},
2529 $localName => 'link',
2530 $r => $r,
2531 }__;
2532
2533 @Attr:
2534 @@Name: logo
2535 @@enDesc:
2536 The <XE::atom|logo> value of the feed.
2537
2538 It <kwd:MUST> <I::reflect the URI value
2539 of the <XE::atom|logo> child element> of the node.
2540 @@Type: DOMString
2541 @@actualType: DOMURI
2542 @@Get:
2543 @@@nullCase:
2544 @@@@enDesc:
2545 If the algorithm returns <DOM::null>.
2546 @@@NodeReadOnlyError:
2547 @@@PerlDef:
2548 __CODE{getReflectURIValue::
2549 $node => $self,
2550 $namespaceURI => {<Q::atom|>},
2551 $localName => 'logo',
2552 $r => $r,
2553 }__;
2554 @@Set:
2555 @@@nullCase:
2556 @@@@enDesc:
2557 Removes the value.
2558 @@@NodeReadOnlyError:
2559 @@@PerlDef:
2560 __CODE{setReflectURIValue::
2561 $node => $self,
2562 $namespaceURI => {<Q::atom|>},
2563 $localName => 'logo',
2564 $given => $given,
2565 }__;
2566
2567 @Attr:
2568 @@Name: rightsElement
2569 @@enDesc:
2570 The <XE::atom|rights> child element of the node.
2571 @@Type: AtomRightsElement
2572 @@Get:
2573 @@@enDesc:
2574 It <kwd:MUST> <I::return a <XE::atom|rights> child element>
2575 of the node.
2576 @@@nullCase:
2577 @@@@enDesc:
2578 If the algorithm returns <DOM::null>.
2579 @@@NodeReadOnlyError:
2580 @@@PerlDef:
2581 __CODE{returnChildElement::
2582 $node => $self,
2583 $namespaceURI => {<Q::atom|>},
2584 $localName => 'rights',
2585 $r => $r,
2586 }__;
2587
2588 @Attr:
2589 @@Name: subtitleElement
2590 @@enDesc:
2591 The <XE::atom|subtitle> child element of the node.
2592 @@Type: AtomSubtitleElement
2593 @@Get:
2594 @@@enDesc:
2595 It <kwd:MUST> <I::return a <XE::atom|subtitle> child element>
2596 of the node.
2597 @@@nullCase:
2598 @@@@enDesc:
2599 If the algorithm returns <DOM::null>.
2600 @@@NodeReadOnlyError:
2601 @@@PerlDef:
2602 __CODE{returnChildElement::
2603 $node => $self,
2604 $namespaceURI => {<Q::atom|>},
2605 $localName => 'subtitle',
2606 $r => $r,
2607 }__;
2608
2609 @Attr:
2610 @@Name: titleElement
2611 @@enDesc:
2612 The <XE::atom|title> child element of the node.
2613 @@Type: AtomTitleElement
2614 @@Get:
2615 @@@enDesc:
2616 It <kwd:MUST> <I::return a <XE::atom|title> child element>
2617 of the node.
2618 @@@nullCase:
2619 @@@@enDesc:
2620 If the algorithm returns <DOM::null>.
2621 @@@NodeReadOnlyError:
2622 @@@PerlDef:
2623 __CODE{returnChildElement::
2624 $node => $self,
2625 $namespaceURI => {<Q::atom|>},
2626 $localName => 'title',
2627 $r => $r,
2628 }__;
2629
2630 @Attr:
2631 @@Name: updatedElement
2632 @@enDesc:
2633 The <XE::atom|updated> child element of the node.
2634 @@Type: AtomUpdatedElement
2635 @@Get:
2636 @@@enDesc:
2637 It <kwd:MUST> <I::return a <XE::atom|updated> child element>
2638 of the node.
2639 @@@nullCase:
2640 @@@@enDesc:
2641 If the algorithm returns <DOM::null>.
2642 @@@NodeReadOnlyError:
2643 @@@PerlDef:
2644 __CODE{returnChildElement::
2645 $node => $self,
2646 $namespaceURI => {<Q::atom|>},
2647 $localName => 'updated',
2648 $r => $r,
2649 }__;
2650
2651 @Attr:
2652 @@Name: entryElements
2653 @@enDesc:
2654 A static list of <XE::atom|entry> child elements of the node.
2655 @@Type: StaticNodeList
2656 @@Get:
2657 @@@enDesc:
2658 It <kwd:MUST> <I::return a <XE::atom|entry> child element list>
2659 of the node.
2660 @@@PerlDef:
2661 __CODE{returnChildElementList::
2662 $node => $self,
2663 $namespaceURI => {<Q::atom|>},
2664 $localName => 'entry',
2665 $r => $r,
2666 }__;
2667
2668 @Method:
2669 @@Name: getEntryElementById
2670 @@enDesc:
2671 Returns an <XE::atom|entry> node selected by its <XE::atom|id>.
2672 @@Param:
2673 @@@Name: idArg
2674 @@@Type: DOMString
2675 @@@actualType: DOMURI
2676 @@@enDesc:
2677 The identifier of the entry.
2678 @@Return:
2679 @@@Type: AtomEntryElement
2680 @@@enDesc:
2681 The <XE::atom|entry> element whose identifier equals to
2682 <P::id>.
2683
2684 It <kwd:MUST> return the first child element node in document
2685 order whose element type is <XE::atom|entry> and
2686 whose first child element node in document order
2687 with element type <XE::atom|id> has <A::Node.textContent>
2688 equals to <P::id>, if any, or <DOM::null>.
2689 @@@nullCase:
2690 @@@@enDesc:
2691 If no matching element.
2692 @@@PerlDef:
2693 E: {
2694 no warnings 'uninitialized';
2695 for my $cn (@{$self-><AG::Node.childNodes>}) {
2696 if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
2697 $cn-><AG::Node.localName> eq 'entry' and
2698 $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
2699 if ($cn-><AG::AtomEntryElement.id> eq $idArg) {
2700 $r = $cn;
2701 last E;
2702 }
2703 }
2704 }
2705 } # E
2706
2707 @Method:
2708 @@Name: addNewEntry
2709 @@enDesc:
2710 Creates an <XA::atom|entry> element node and
2711 appends to the node.
2712 @@Param:
2713 @@@Name: id
2714 @@@Type: DOMString
2715 @@@actualType: DOMURI
2716 @@@enDesc:
2717 The <XE::atom|id> of the entry.
2718 @@Param:
2719 @@@Name: title
2720 @@@Type: DOMString
2721 @@@enDesc:
2722 The <XE::atom|title> of the entry.
2723 @@@nullCase:
2724 @@@@enDesc:
2725 The implementation <kwd:MUST> treate <DOM::null>
2726 as if an empty string is specified.
2727 @@Param:
2728 @@@Name: lang
2729 @@@Type: DOMString
2730 @@@enDesc:
2731 The natural language of the entry.
2732 @@@nullCase:
2733 @@@@enDesc:
2734 No explicit language specification is added.
2735 @@Return:
2736 @@@Type: AtomEntryElement
2737 @@@enDesc:
2738 The newly created <XE::atom|entry> element.
2739
2740 {P:: The newly created <XE::atom|entry> element node <kwd:MUST>
2741 have attributes set as:
2742
2743 - <A::Node.attributes>::: A <IF::NamedNodeMap> that contains
2744 at least a new <XA::xml|lang>
2745 attribute node except when
2746 the <P::lang> parameter is set
2747 to <DOM::null>.
2748
2749 - <A::Node.childNodes>::: A <IF::NodeList> containing
2750 a new <XE::atom|id> element node,
2751 a new <XE::atom|title> element node, and
2752 a new <XE::atom|updated> element node
2753 in any order.
2754
2755 }
2756
2757 This element node <kwd:MUST> be appended to the node
2758 as if the <M::Node.appendChild> method were invoked
2759 on the node and <kwd:MUST> be returned by the method.
2760 Note that an exception might be thrown during this course.
2761
2762 {P:: The <XA::xml|lang> attribute node, if created, <kwd:MUST>
2763 have attributes set as:
2764
2765 - <A::Node.nodeValue>::: <P::lang>.
2766
2767 - <A::Attr.specified>::: <DOM::true>.
2768
2769 }
2770
2771 {P:: The newly created <XE::atom|id> element node <kwd:MUST>
2772 have attributes set as:
2773
2774 - <A::Node.textContent>::: <P::id>.
2775
2776 }
2777
2778 {P:: The newly created <XE::atom|title> element node <kwd:MUST>
2779 have attributes set as:
2780
2781 - <A::Node.textContent>::: <P::title>.
2782
2783 }
2784
2785 The <XA::type> attribute node <kwd:MUST-NOT> be attached
2786 to the <XE::atom|title> element node.
2787
2788 {P:: The newly created <XE::atom|updated> element node <kwd:MUST>
2789 have attributes set as:
2790
2791 - <A::Node.textContent>::: A uppercase RFC 3339 <CODE::date-time>
2792 representation of the time when the method is invoked.
2793 The implementation <kwd:MAY> align its timezone to
2794 that of the environment in which the method is invoked.
2795
2796 }
2797 @@@PerlDef:
2798 __DEEP{
2799 my $od = $self-><AG::Node.ownerDocument>;
2800
2801 $r = $od-><M::Document.createElementNS> (<Q::atom|>, 'entry');
2802 $r-><AS::Node.manakaiLanguage> ($lang) if defined $lang;
2803
2804 $r-><AS::AtomFeedElement.id> ($id);
2805
2806 my $titlee = $od-><M::Document.createElementNS> (<Q::atom|>, 'title');
2807 $titlee-><AS::Node.textContent> (defined $title ? $title : '');
2808 $r-><M::Node.appendChild> ($titlee);
2809
2810 my $updatede = $od-><M::Document.createElementNS>
2811 (<Q::atom|>, 'updated');
2812 $updatede-><AS::AtomDateConstruct.value> (scalar time);
2813 $r-><M::Node.appendChild> ($updatede);
2814
2815 $self-><M::Node.appendChild> ($r);
2816 }__;
2817
2818 @@Test:
2819 @@@QName: AtomFeedElement.addNewEntry.1.test
2820 @@@PerlDef:
2821 my $doc;
2822 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2823
2824 my $feed = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2825
2826 my $ent = $feed-><M::AtomFeedElement.addNewEntry>
2827 ('about:id', 'entry title', 'en');
2828
2829 $test->id ('entry.interface');
2830 $test->assert_isa ($ent, <IFName::AtomEntryElement>);
2831
2832 $test->id ('entry.namespaceURI');
2833 $test->assert_equals ($ent-><AG::Node.namespaceURI>, <Q::atom|>);
2834
2835 $test->id ('entry.localName');
2836 $test->assert_equals ($ent-><AG::Node.localName>, 'entry');
2837
2838 $test->id ('entry.lang');
2839 $test->assert_equals ($ent-><M::Element.getAttributeNS>
2840 (<Q::xml|>, 'lang'),
2841 'en');
2842
2843 my $id;
2844 my $title;
2845 my $updated;
2846
2847 for my $cn (@{$ent-><AG::Node.childNodes>}) {
2848 if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
2849 $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
2850 if ($cn-><AG::Node.localName> eq 'id') {
2851 $id = $cn;
2852 } elsif ($cn-><AG::Node.localName> eq 'title') {
2853 $title = $cn;
2854 } elsif ($cn-><AG::Node.localName> eq 'updated') {
2855 $updated = $cn;
2856 }
2857 }
2858 }
2859
2860 $test->id ('id');
2861 $test->assert_not_null ($id);
2862
2863 $test->id ('id.value');
2864 $test->assert_equals ($id-><AG::Node.textContent>, 'about:id');
2865
2866 $test->id ('title');
2867 $test->assert_not_null ($title);
2868
2869 $test->id ('title.value');
2870 $test->assert_equals ($title-><AG::Node.textContent>, 'entry title');
2871
2872 $test->id ('title.type');
2873 $test->assert_null ($title-><M::Element.getAttributeNS> (null, 'type'));
2874
2875 $test->id ('updated');
2876 $test->assert_not_null ($updated);
2877
2878 $test->id ('updated.value');
2879 $test->assert_num_not_equals
2880 (actual_value => $updated-><AG::AtomDateConstruct.value>,
2881 expected_value => 0);
2882
2883 $test->id ('parent');
2884 $test->assert_equals ($ent-><AG::Node.parentNode>, $feed);
2885 @@Test:
2886 @@@QName: AtomFeedElement.addNewEntry.2.test
2887 @@@enDesc:
2888 <DOM::null> <CODE::lang>.
2889 @@@PerlDef:
2890 my $doc;
2891 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
2892
2893 my $feed = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
2894
2895 my $ent = $feed-><M::AtomFeedElement.addNewEntry>
2896 ('about:id', 'entry title', null);
2897
2898 $test->id ('entry.lang');
2899 $test->assert_null ($ent-><M::Element.getAttributeNS>
2900 (<Q::xml|>, 'lang'));
2901 ##AtomFeedElement
2902
2903 ECDef:
2904 @QName: entry-prop
2905 @mv:elementTypeClassName: entry-prop
2906 @mv:refers: atom|author
2907 @mv:refers: atom|category
2908 @mv:refers: atom|content
2909 @mv:refers: atom|contributor
2910 @mv:refers: atom|id
2911 @mv:refers: atom|link
2912 @mv:refers: atom|published
2913 @mv:refers: atom|rights
2914 @mv:refers: atom|source
2915 @mv:refers: atom|summary
2916 @mv:refers: atom|title
2917 @mv:refers: atom|updated
2918 @mv:refers: extensionElements
2919
2920 IFClsETDef:
2921 @IFQName: AtomEntryElement
2922 @ETQName: atom|entry
2923 @ETRQName: atom|entry
2924 @ClsQName: ManakaiAtomEntryElement
2925
2926 @IFISA: AtomElement
2927 @ClsISA: ManakaiAtomElement
2928
2929 @mv:refers: atomCommonAttributes
2930
2931 @cm:
2932 (entry-prop+)
2933
2934 @enDesc:
2935 The <XE::atom|entry> element represents an individual
2936 entry, acting as a container for metadata and data
2937 associated with the entry.
2938
2939 @Attr:
2940 @@Name: authorElements
2941 @@enDesc:
2942 A static list of <XE::atom|author> child elements of the node.
2943 @@Type: StaticNodeList
2944 @@Get:
2945 @@@enDesc:
2946 It <kwd:MUST> <I::return a <XE::atom|author> child element list>
2947 of the node.
2948 @@@disDef:
2949 @@@@dlp:cloneCode: ManakaiAtomFeedElement.authorElements.get
2950
2951 @Attr:
2952 @@Name: entryAuthorElements
2953 @@enDesc:
2954 A static list of <XE::atom|author> elements for the node.
2955 @@Type: StaticNodeList
2956 @@Get:
2957 @@@enDesc:
2958 = If the node contains one or more <XE::atom|author>
2959 element node in its child node list, then it
2960 <kwd:MUST> return a <IF::StaticNodeList> that
2961 would be returned by the <A::AtomEntryElement.authorElements>
2962 attribute of the node.
2963
2964 = Otherwise, if the node contains a <XE::atom|source>
2965 element node in its child node list, then it
2966 <kwd:MUST> return a <IF::StaticNodeList> that
2967 would be returned by the <A::AtomSourceElement.authorElements>
2968 attribute of that node, unless its <A::NodeList.length>
2969 is zero.
2970
2971 = Otherwise, if the <A::Node.parentNode> of the
2972 node is a <XE::atom|feed> element node, then
2973 it <kwd:MUST> return a <IF::StaticNodeList> that
2974 would be returned by the <A::AtomFeedElement.authorElements>
2975 attribute of that node.
2976
2977 = Otherwise, it <kwd:MUST> return a <IF::StaticNodeList>
2978 whose <A::NodeList.length> is zero.
2979 @@@PerlDef:
2980 __DEEP{
2981 E: {
2982 no warnings 'uninitialized';
2983 __CODE{tc|createStaticNodeList:: $r => $r}__;
2984
2985 my $source;
2986 for my $cn (@{$self-><AG::Node.childNodes>}) {
2987 if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
2988 $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
2989 if ($cn-><AG::Node.localName> eq 'author') {
2990 push @{$r}, $cn;
2991 } elsif ($cn-><AG::Node.localName> eq 'source') {
2992 $source = $cn;
2993 }
2994 }
2995 }
2996 last E unless @{$r} == 0;
2997
2998 if (defined $source) {
2999 $r = $source-><AG::AtomSourceElement.authorElements>;
3000 }
3001 last E unless @{$r} == 0;
3002
3003 my $parent = $self-><AG::Node.parentNode>;
3004 if (defined $parent and
3005 $parent-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
3006 $parent-><AG::Node.namespaceURI> eq <Q::atom|> and
3007 $parent-><AG::Node.localName> eq 'feed') {
3008 $r = $parent-><AG::AtomFeedElement.authorElements>;
3009 }
3010 } # E
3011 }__;
3012
3013 @@Test:
3014 @@@QName: AtomEntryElement.entryAuthorElements.1.test
3015 @@@PerlDef:
3016 my $doc;
3017 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3018
3019 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3020
3021
3022 $test->id ('empty');
3023 my $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3024 $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0);
3025
3026 $test->id ('one');
3027 $el-><M::Node.appendChild>
3028 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3029 $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3030 $test->assert_num_equals (actual_value => 0+@$list, expected_value => 1);
3031
3032 $test->id ('source');
3033 for ($el-><M::Node.appendChild>
3034 ($doc-><M::Document.createElementNS>
3035 (<Q::atom|>, 'source'))) {
3036 $_-><M::Node.appendChild>
3037 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3038 $_-><M::Node.appendChild>
3039 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3040 }
3041 $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3042 $test->assert_num_equals (actual_value => 0+@$list, expected_value => 1);
3043
3044 $test->id ('parent');
3045 for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3046 $_-><M::Node.appendChild>
3047 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3048 $_-><M::Node.appendChild>
3049 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3050 $_-><M::Node.appendChild>
3051 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3052 $_-><M::Node.appendChild> ($el);
3053 }
3054 $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3055 $test->assert_num_equals (actual_value => 0+@$list, expected_value => 1);
3056 @@Test:
3057 @@@QName: AtomEntryElement.entryAuthorElements.2.test
3058 @@@PerlDef:
3059 my $doc;
3060 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3061
3062 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3063
3064 $test->id ('source');
3065 for ($el-><M::Node.appendChild>
3066 ($doc-><M::Document.createElementNS>
3067 (<Q::atom|>, 'source'))) {
3068 $_-><M::Node.appendChild>
3069 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3070 $_-><M::Node.appendChild>
3071 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3072 }
3073 my $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3074 $test->assert_num_equals (actual_value => 0+@$list, expected_value => 2);
3075
3076 $test->id ('parent');
3077 for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3078 $_-><M::Node.appendChild>
3079 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3080 $_-><M::Node.appendChild>
3081 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3082 $_-><M::Node.appendChild>
3083 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3084 $_-><M::Node.appendChild> ($el);
3085 }
3086 $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3087 $test->assert_num_equals (actual_value => 0+@$list, expected_value => 2);
3088 @@Test:
3089 @@@QName: AtomEntryElement.entryAuthorElements.3.test
3090 @@@PerlDef:
3091 my $doc;
3092 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3093
3094 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3095
3096 $test->id ('source');
3097 for ($el-><M::Node.appendChild>
3098 ($doc-><M::Document.createElementNS>
3099 (<Q::atom|>, 'source'))) {
3100 # empty
3101 }
3102 my $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3103 $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0);
3104
3105 $test->id ('parent');
3106 for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3107 $_-><M::Node.appendChild>
3108 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3109 $_-><M::Node.appendChild>
3110 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3111 $_-><M::Node.appendChild>
3112 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3113 $_-><M::Node.appendChild> ($el);
3114 }
3115 $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3116 $test->assert_num_equals (actual_value => 0+@$list, expected_value => 3);
3117 @@Test:
3118 @@@QName: AtomEntryElement.entryAuthorElements.4.test
3119 @@@PerlDef:
3120 my $doc;
3121 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3122
3123 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3124
3125 $test->id ('parent');
3126 for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3127 $_-><M::Node.appendChild>
3128 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3129 $_-><M::Node.appendChild>
3130 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3131 $_-><M::Node.appendChild>
3132 ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3133 $_-><M::Node.appendChild> ($el);
3134 }
3135 my $list = $el-><AG::AtomEntryElement.entryAuthorElements>;
3136 $test->assert_num_equals (actual_value => 0+@$list, expected_value => 3);
3137
3138 @Attr:
3139 @@Name: categoryElements
3140 @@enDesc:
3141 A static list of <XE::atom|category> child elements of the node.
3142 @@Type: StaticNodeList
3143 @@Get:
3144 @@@enDesc:
3145 It <kwd:MUST> <I::return a <XE::atom|category> child element list>
3146 of the node.
3147 @@@disDef:
3148 @@@@dlp:cloneCode: ManakaiAtomFeedElement.categoryElements.get
3149
3150 @Attr:
3151 @@Name: contentElement
3152 @@enDesc:
3153 The <XE::atom|content> child element of the node.
3154 @@Type: AtomContentElement
3155 @@Get:
3156 @@@enDesc:
3157 It <kwd:MUST> <I::return a <XE::atom|content> child element>
3158 of the node.
3159 @@@nullCase:
3160 @@@@enDesc:
3161 If the algorithm returns <DOM::null>.
3162 @@@NodeReadOnlyError:
3163 @@@PerlDef:
3164 __CODE{returnChildElement::
3165 $node => $self,
3166 $namespaceURI => {<Q::atom|>},
3167 $localName => 'content',
3168 $r => $r,
3169 }__;
3170
3171 @Attr:
3172 @@Name: contributorElements
3173 @@enDesc:
3174 A static list of <XE::atom|contributor> child elements of the node.
3175 @@Type: StaticNodeList
3176 @@Get:
3177 @@@enDesc:
3178 It <kwd:MUST> <I::return a <XE::atom|contributor> child element list>
3179 of the node.
3180 @@@disDef:
3181 @@@@dlp:cloneCode: ManakaiAtomFeedElement.contributorElements.get
3182
3183 @Attr:
3184 @@Name: id
3185 @@enDesc:
3186 The <XE::atom|id> value of the feed.
3187
3188 It <kwd:MUST> <I::reflect the string value
3189 of the <XE::atom|id> child element> of the node.
3190 @@Type: DOMString
3191 @@actualType: DOMURI
3192 @@Get:
3193 @@@nullCase:
3194 @@@@enDesc:
3195 If the algorithm returns <DOM::null>.
3196 @@@NodeReadOnlyError:
3197 @@@disDef:
3198 @@@@dlp:cloneCode: ManakaiAtomFeedElement.id.get
3199 @@Set:
3200 @@@nullCase:
3201 @@@@enDesc:
3202 Removes the value.
3203 @@@NodeReadOnlyError:
3204 @@@disDef:
3205 @@@@dlp:cloneCode: ManakaiAtomFeedElement.id.set
3206
3207 @Attr:
3208 @@Name: linkElements
3209 @@enDesc:
3210 A static list of <XE::atom|link> child elements of the node.
3211 @@Type: StaticNodeList
3212 @@Get:
3213 @@@enDesc:
3214 It <kwd:MUST> <I::return a <XE::atom|link> child element list>
3215 of the node.
3216 @@@disDef:
3217 @@@@dlp:cloneCode: ManakaiAtomFeedElement.linkElements.get
3218
3219 @Attr:
3220 @@Name: publishedElement
3221 @@enDesc:
3222 The <XE::atom|published> child element of the node.
3223 @@Type: AtomPublishedElement
3224 @@Get:
3225 @@@enDesc:
3226 It <kwd:MUST> <I::return a <XE::atom|published> child element>
3227 of the node.
3228 @@@nullCase:
3229 @@@@enDesc:
3230 If the algorithm returns <DOM::null>.
3231 @@@NodeReadOnlyError:
3232 @@@PerlDef:
3233 __CODE{returnChildElement::
3234 $node => $self,
3235 $namespaceURI => {<Q::atom|>},
3236 $localName => 'published',
3237 $r => $r,
3238 }__;
3239
3240 @Attr:
3241 @@Name: rightsElement
3242 @@enDesc:
3243 The <XE::atom|rights> child element of the node.
3244 @@Type: AtomRightsElement
3245 @@Get:
3246 @@@enDesc:
3247 It <kwd:MUST> <I::return a <XE::atom|rights> child element>
3248 of the node.
3249 @@@nullCase:
3250 @@@@enDesc:
3251 If the algorithm returns <DOM::null>.
3252 @@@NodeReadOnlyError:
3253 @@@disDef:
3254 @@@@dlp:cloneCode: ManakaiAtomFeedElement.rightsElement.get
3255
3256 @Attr:
3257 @@Name: entryRightsElement
3258 @@enDesc:
3259 The <XE::atom|rights> element for the node.
3260 @@Type: AtomRightsElement
3261 @@Get:
3262 @@@enDesc:
3263 = If the node contains a <XE::atom|rights>
3264 element node in its child node list, then it
3265 <kwd:MUST> return the first such a node in document order.
3266
3267 = Otherwise, if the <A::Node.parentNode> of the
3268 node is a <XE::atom|feed> element node, then
3269 it <kwd:MUST> return an <IF::AtomRightsElement>
3270 that would be returned by the <A::AtomFeedElement.rightsElement>
3271 attribute of that node, except when it is <DOM::null>.
3272
3273 {OLI:: Otherwise,
3274
3275 {OLI:: If the <cfg::cfg|create-child-element> configuration
3276 parameter is set to <DOM::true>,
3277
3278 = Create an element node <VAR::N> whose element type
3279 is <XE::atom|rights>.
3280
3281 = Append <VAR::N> to this node as if the <M::Node.appendChild>
3282 method were called for the node with its parameter
3283 set to <VAR::N>. Note that this might throw an exception.
3284
3285 = Then, <VAR::N> <kwd:MUST> be returned.
3286
3287 }
3288
3289 = Otherwise, it <kwd:MUST> return <DOM::null>.
3290 }
3291 @@@nullCase:
3292 @@@@enDesc:
3293 If the algorithm returns <DOM::null>.
3294 @@@NodeReadOnlyError:
3295 @@@PerlDef:
3296 __DEEP{
3297 E: {
3298 no warnings 'uninitialized';
3299 for my $cn (@{$self-><AG::Node.childNodes>}) {
3300 if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
3301 $cn-><AG::Node.localName> eq 'rights' and
3302 $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
3303 $r = $cn;
3304 last E;
3305 }
3306 }
3307
3308 my $parent = $self-><AG::Node.parentNode>;
3309 if (defined $parent and
3310 $parent-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
3311 $parent-><AG::Node.namespaceURI> eq <Q::atom|> and
3312 $parent-><AG::Node.localName> eq 'feed') {
3313 for my $cn (@{$parent-><AG::Node.childNodes>}) {
3314 if ($cn-><AG::Node.nodeType> == <C::Node.ELEMENT_NODE> and
3315 $cn-><AG::Node.localName> eq 'rights' and
3316 $cn-><AG::Node.namespaceURI> eq <Q::atom|>) {
3317 $r = $cn;
3318 last E;
3319 }
3320 }
3321 }
3322
3323 my $od = $self-><AG::Node.ownerDocument>;
3324 if ($od-><AG::Document.domConfig>
3325 -><M::CFG.getParameter> (<Q::cfg|create-child-element>)) {
3326 $r = $od-><M::Document.createElementNS> (<Q::atom|>, 'rights');
3327 $self-><M::Node.appendChild> ($r);
3328 }
3329 } # E
3330 }__;
3331
3332 @@Test:
3333 @@@QName: AtomEntryElement.entryRightsElement.1.test
3334 @@@PerlDef:
3335 my $doc;
3336 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3337
3338 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3339
3340 $test->id ('no');
3341 my $rights = $el-><AG::AtomEntryElement.entryRightsElement>;
3342 $test->assert_null ($rights);
3343
3344 $doc-><AG::Document.domConfig>
3345 -><M::CFG.setParameter> (<Q::cfg|create-child-element> => true);
3346
3347 $rights = $el-><AG::AtomEntryElement.entryRightsElement>;
3348
3349 $test->id ('created.namespaceURI');
3350 $test->assert_equals ($rights-><AG::Node.namespaceURI>, <Q::atom|>);
3351
3352 $test->id ('created.localName');
3353 $test->assert_equals ($rights-><AG::Node.localName>, 'rights');
3354
3355 $test->id ('created.parentNode');
3356 $test->assert_equals ($rights-><AG::Node.parentNode>, $el);
3357
3358 $test->id ('get');
3359 my $rights2 = $el-><AG::AtomEntryElement.entryRightsElement>;
3360 $test->assert_equals ($rights2, $rights);
3361 @@Test:
3362 @@@QName: AtomEntryElement.entryRightsElement.2.test
3363 @@@PerlDef:
3364 my $doc;
3365 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3366
3367 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3368
3369 my $feed = $doc-><M::Document.createElementNS> (<Q::atom|>, 'feed');
3370 $feed-><M::Node.appendChild> ($el);
3371 my $rights = $doc-><M::Document.createElementNS> (<Q::atom|>, 'rights');
3372 $feed-><M::Node.appendChild> ($rights);
3373
3374 $test->id ('get');
3375 my $rights2 = $el-><AG::AtomEntryElement.entryRightsElement>;
3376 $test->assert_equals ($rights2, $rights);
3377
3378 @Attr:
3379 @@Name: sourceElement
3380 @@enDesc:
3381 The <XE::atom|source> child element of the node.
3382 @@Type: AtomSourceElement
3383 @@Get:
3384 @@@enDesc:
3385 It <kwd:MUST> <I::return a <XE::atom|source> child element>
3386 of the node.
3387 @@@nullCase:
3388 @@@@enDesc:
3389 If the algorithm returns <DOM::null>.
3390 @@@NodeReadOnlyError:
3391 @@@PerlDef:
3392 __CODE{returnChildElement::
3393 $node => $self,
3394 $namespaceURI => {<Q::atom|>},
3395 $localName => 'source',
3396 $r => $r,
3397 }__;
3398
3399 @Attr:
3400 @@Name: summaryElement
3401 @@enDesc:
3402 The <XE::atom|summary> child element of the node.
3403 @@Type: AtomSummaryElement
3404 @@Get:
3405 @@@enDesc:
3406 It <kwd:MUST> <I::return a <XE::atom|summary> child element>
3407 of the node.
3408 @@@nullCase:
3409 @@@@enDesc:
3410 If the algorithm returns <DOM::null>.
3411 @@@NodeReadOnlyError:
3412 @@@PerlDef:
3413 __CODE{returnChildElement::
3414 $node => $self,
3415 $namespaceURI => {<Q::atom|>},
3416 $localName => 'summary',
3417 $r => $r,
3418 }__;
3419
3420 @Attr:
3421 @@Name: titleElement
3422 @@enDesc:
3423 The <XE::atom|title> child element of the node.
3424 @@Type: AtomTitleElement
3425 @@Get:
3426 @@@enDesc:
3427 It <kwd:MUST> <I::return a <XE::atom|title> child element>
3428 of the node.
3429 @@@nullCase:
3430 @@@@enDesc:
3431 If the algorithm returns <DOM::null>.
3432 @@@NodeReadOnlyError:
3433 @@@disDef:
3434 @@@@dlp:cloneCode: ManakaiAtomFeedElement.titleElement.get
3435
3436 @Attr:
3437 @@Name: updatedElement
3438 @@enDesc:
3439 The <XE::atom|updated> child element of the node.
3440 @@Type: AtomUpdatedElement
3441 @@Get:
3442 @@@enDesc:
3443 It <kwd:MUST> <I::return a <XE::atom|updated> child element>
3444 of the node.
3445 @@@nullCase:
3446 @@@@enDesc:
3447 If the algorithm returns <DOM::null>.
3448 @@@NodeReadOnlyError:
3449 @@@disDef:
3450 @@@@dlp:cloneCode: ManakaiAtomFeedElement.updatedElement.get
3451 ##AtomEntryElement
3452
3453 IFClsETDef:
3454 @IFQName: AtomIdElement
3455 @ETQName: atom|id
3456 @ETRQName: atom|id
3457 @ClsQName: ManakaiAtomIdElement
3458
3459 @IFISA: AtomElement
3460 @ClsISA: ManakaiAtomElement
3461
3462 @mv:refers: atomCommonAttributes
3463
3464 @cm: atomUriCM
3465 ##AtomIdElement
3466
3467 IFClsETDef:
3468 @IFQName: AtomIconElement
3469 @ETQName: atom|icon
3470 @ETRQName: atom|icon
3471 @ClsQName: ManakaiAtomIconElement
3472
3473 @IFISA: AtomElement
3474 @ClsISA: ManakaiAtomElement
3475
3476 @mv:refers: atomCommonAttributes
3477
3478 @cm: atomUriCM
3479 ##AtomIconElement
3480
3481 IFClsETDef:
3482 @IFQName: AtomNameElement
3483 @ETQName: atom|name
3484 @ETRQName: atom|name
3485 @ClsQName: ManakaiAtomNameElement
3486
3487 @IFISA: AtomElement
3488 @ClsISA: ManakaiAtomElement
3489
3490 # no common attribs
3491 @cm: TextCM
3492
3493 @mv:refers: Atom
3494 ##AtomNameElement
3495
3496 IFClsETDef:
3497 @IFQName: AtomUriElement
3498 @ETQName: atom|uri
3499 @ETRQName: atom|uri
3500 @ClsQName: ManakaiAtomUriElement
3501
3502 @IFISA: AtomElement
3503 @ClsISA: ManakaiAtomElement
3504
3505 # no common attribs
3506 @cm: atomUriCM
3507
3508 @mv:refers: Atom
3509 ##AtomUriElement
3510
3511 IFClsETDef:
3512 @IFQName: AtomEmailElement
3513 @ETQName: atom|email
3514 @ETRQName: atom|email
3515 @ClsQName: ManakaiAtomEmailElement
3516
3517 @IFISA: AtomElement
3518 @ClsISA: ManakaiAtomElement
3519
3520 # no common attribs
3521 @cm: atomEmailAddressCM
3522
3523 @mv:refers: Atom
3524 ##AtomEmailElement
3525
3526 IFClsETDef:
3527 @IFQName: AtomLogoElement
3528 @ETQName: atom|logo
3529 @ETRQName: atom|logo
3530 @ClsQName: ManakaiAtomLogoElement
3531
3532 @IFISA: AtomElement
3533 @ClsISA: ManakaiAtomElement
3534
3535 @mv:refers: atomCommonAttributes
3536
3537 @cm: atomUriCM
3538 ##AtomLogoElement
3539
3540 IFClsETDef:
3541 @IFQName: AtomContentElement
3542 @ETQName: atom|content
3543 @ETRQName: atom|content
3544 @ClsQName: ManakaiAtomContentElement
3545
3546 @IFISA: AtomElement
3547 @ClsISA: ManakaiAtomElement
3548
3549 @mv:refers: atomCommonAttributes
3550
3551 @cm:
3552 dxm|ANY||ManakaiDOM|all
3553
3554 @enDesc:
3555 The <XE::atom|content> element either contains or links to
3556 the content of the entry.
3557
3558 @ATTR:
3559 @@Name: type
3560 @@enDesc:
3561 The type of the element.
3562
3563 It <kwd:MUST> <I::reflect the string value
3564 of the <XA::type> attribute> of the node. It default
3565 value <kwd:MUST> be <CODE::text> if and only if
3566 there is no <XA::src> attribute on the node.
3567 @@Type: DOMString
3568 @@Get:
3569 @@@nullCase:
3570 @@@@enDesc:
3571 If the algorithm returns <DOM::null>.
3572 @@@PerlDef:
3573 __CODE{getReflectAttrStringValue::
3574 $node => $self,
3575 $namespaceURI => {null},
3576 $localName => 'type',
3577 $r => $r,
3578 $defaultValue => {
3579 $self-><M::Element.hasAttributeNS> (null, 'src') ? null : 'text'
3580 },
3581 }__;
3582 @@Set:
3583 @@@nullCase:
3584 @@@@enDesc:
3585 Removes the attribute.
3586 @@@NodeReadOnlyError:
3587 @@@PerlDef:
3588 __CODE{setReflectAttrStringValue::
3589 $node => $self,
3590 $namespaceURI => {null},
3591 $localName => 'type',
3592 $given => $given,
3593 }__;
3594
3595 @@Test:
3596 @@@QName: AtomContentElement.type.test
3597 @@@PerlDef:
3598 my $doc;
3599 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3600
3601 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'content');
3602
3603 $test->id ('default.no.src');
3604 $test->assert_equals ($el-><AG::AtomContentElement.type>, 'text');
3605
3606 $test->id ('default.src');
3607 $el-><AS::AtomContentElement.src> ('http://atom.example/');
3608 $test->assert_null ($el-><AG::AtomContentElement.type>);
3609
3610 $test->id ('set.xhtml');
3611 $el-><AS::AtomContentElement.type> ('xhtml');
3612 $test->assert_equals ($el-><AG::AtomContentElement.type>, 'xhtml');
3613
3614 $test->id ('set.imt');
3615 $el-><AS::AtomContentElement.type> ('application/xml');
3616 $test->assert_equals ($el-><AG::AtomContentElement.type>,
3617 'application/xml');
3618
3619 $test->id ('remove');
3620 $el-><AS::AtomContentElement.type> (null);
3621 $test->assert_null ($el-><AG::AtomContentElement.type>);
3622
3623 @ATTR:
3624 @@Name: src
3625 @@enDesc:
3626 The source of the remote content of the element.
3627
3628 It <kwd:MUST> <I::reflect the string value
3629 of the <XA::src> attribute> of the node.
3630 @@Type: DOMString
3631 @@Type: DOMURI
3632 @@Get:
3633 @@@nullCase:
3634 @@@@enDesc:
3635 If the algorithm returns <DOM::null>.
3636 @@@PerlDef:
3637 __CODE{getReflectAttrURIValue::
3638 $node => $self,
3639 $namespaceURI => {null},
3640 $localName => 'src',
3641 $r => $r,
3642 $defaultValue => {null},
3643 }__;
3644 @@Set:
3645 @@@nullCase:
3646 @@@@enDesc:
3647 Removes the attribute.
3648 @@@NodeReadOnlyError:
3649 @@@PerlDef:
3650 __CODE{setReflectAttrURIValue::
3651 $node => $self,
3652 $namespaceURI => {null},
3653 $localName => 'src',
3654 $given => $given,
3655 }__;
3656
3657 @@Test:
3658 @@@QName: AtomContentElement.src.test
3659 @@@PerlDef:
3660 my $doc;
3661 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3662
3663 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'content');
3664
3665 $test->id ('default');
3666 $test->assert_null ($el-><AG::AtomContentElement.src>);
3667
3668 $test->id ('set');
3669 $el-><AS::AtomContentElement.src> ('http://atom.example/');
3670 $test->assert_equals ($el-><AG::AtomContentElement.src>,
3671 'http://atom.example/');
3672
3673 $test->id ('set.relative');
3674 $el-><AS::AtomContentElement.src> ('atom');
3675 $test->assert_equals ($el-><AG::AtomContentElement.src>, 'atom');
3676
3677 $test->id ('set.relative.base');
3678 $el-><M::Element.setAttributeNS> (<Q::xml|>, 'xml:base',
3679 'http://atom.example/');
3680 $test->assert_equals ($el-><AG::AtomContentElement.src>,
3681 'http://atom.example/atom');
3682
3683 $test->id ('remove');
3684 $el-><AS::AtomContentElement.src> (null);
3685 $test->assert_null ($el-><AG::AtomContentElement.src>);
3686
3687 @Attr:
3688 @@Name: container
3689 @@enDesc:
3690 The container element that contains the actual content for the node.
3691 @@Type: Element
3692 @@Get:
3693 @@@enDesc:
3694 - If the <A::AtomContentElement.type> is <CODE::xhtml>,
3695 it <kwd:MUST> <I::return the <XE::html|div> child element>.
3696
3697 - Otherwise, if the <A::AtomContentElement.src> is <DOM::null>,
3698 it <kwd:MUST> return <DOM::null>.
3699
3700 - Otherwise, it <kwd:MUST> return the node itself.
3701 @@@nullCase:
3702 @@@@enDesc:
3703 If the algorithm returns <DOM::null>.
3704 @@@NodeReadOnlyError:
3705 @@@PerlDef:
3706 __DEEP{
3707 my $type = $self-><AG::AtomContentElement.type>;
3708 if (defined $type and $type eq 'xhtml') {
3709 __UNDEEP{
3710 __CODE{returnChildElement::
3711 $node => $self,
3712 $namespaceURI => {<Q::html|>},
3713 $localName => 'div',
3714 $r => $r,
3715 }__;
3716 }__;
3717 } elsif (not $self-><M::Element.hasAttributeNS> (null, 'src')) {
3718 $r = $self;
3719 }
3720 }__;
3721
3722 @@Test:
3723 @@@QName: AtomContentElement.container.1.test
3724 @@@PerlDef:
3725 my $doc;
3726 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3727
3728 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'content');
3729
3730 $test->id ('no');
3731 $test->assert_equals ($el-><AG::AtomContentElement.container>, $el);
3732
3733 $test->id ('application/smil');
3734 $el-><AS::AtomContentElement.type> ('application/smil');
3735 $test->assert_equals ($el-><AG::AtomContentElement.container>, $el);
3736
3737 $test->id ('text');
3738 $el-><AS::AtomContentElement.type> ('text');
3739 $test->assert_equals ($el-><AG::AtomContentElement.container>, $el);
3740
3741 $test->id ('html');
3742 $el-><AS::AtomContentElement.type> ('html');
3743 $test->assert_equals ($el-><AG::AtomContentElement.container>, $el);
3744
3745 $test->id ('xhtml');
3746 $el-><AS::AtomContentElement.type> ('xhtml');
3747 $test->assert_null ($el-><AG::AtomContentElement.container>);
3748
3749 $doc-><AG::Document.domConfig>
3750 -><M::CFG.setParameter> (<Q::cfg|create-child-element> => true);
3751 my $con = $el-><AG::AtomContentElement.container>;
3752
3753 $test->id ('xhtml.create');
3754 $test->assert_not_equals ($con, $el);
3755
3756 $test->id ('xhtml.namespaceURI');
3757 $test->assert_equals ($con-><AG::Node.namespaceURI>, <Q::html|>);
3758
3759 $test->id ('xhtml.localName');
3760 $test->assert_equals ($con-><AG::Node.localName>, 'div');
3761
3762 $test->id ('xhtml.parentNode');
3763 $test->assert_equals ($con-><AG::Node.parentNode>, $el);
3764
3765 $test->id ('xhtml.2');
3766 $test->assert_equals ($el-><AG::AtomContentElement.container>, $con);
3767 @@Test:
3768 @@@QName: AtomContentElement.container.2.test
3769 @@@enDesc:
3770 With <XA::src>.
3771 @@@PerlDef:
3772 my $doc;
3773 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
3774
3775 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'content');
3776
3777 $el-><AS::AtomContentElement.src> ('http://www.example.com/');
3778
3779 $test->id ('no');
3780 $test->assert_null ($el-><AG::AtomContentElement.container>);
3781
3782 $test->id ('application/smil');
3783 $el-><AS::AtomContentElement.type> ('application/smil');
3784 $test->assert_null ($el-><AG::AtomContentElement.container>);
3785
3786 @enImplNote:
3787 @@ddid: base64
3788 @@@:
3789 {TODO::
3790 Access to Base64'ed content is necessary.
3791 }
3792 ##AtomContentElement
3793
3794 IFClsETDef:
3795 @IFQName: AtomAuthorElement
3796 @ETQName: atom|author
3797 @ETRQName: atom|author
3798 @ClsQName: ManakaiAtomAuthorElement
3799
3800 @IFISA: AtomPersonConstruct
3801 @ClsISA: ManakaiAtomPersonConstruct
3802 @mv:refers: PersonAG
3803 @mv:elementContentModel: PersonCM
3804
3805 @enDesc:
3806 The <XE::atom|author> element is a Person construct that
3807 indicates the author of the entry or feed.
3808 ##AtomAuthorElement
3809
3810 IFClsETDef:
3811 @IFQName: AtomCategoryElement
3812 @ETQName: atom|category
3813 @ETRQName: atom|category
3814 @ClsQName: ManakaiAtomCategoryElement
3815
3816 @IFISA: AtomElement
3817 @ClsISA: ManakaiAtomElement
3818
3819 @mv:refers: atomCommonAttributes
3820
3821 @cm: undefinedContent
3822
3823 @enDesc:
3824 The <XE::atom|category> element conveys information abut
3825 a category associated with an entry or feed.
3826
3827 @Attr:
3828 @@Name: term
3829 @@enDesc:
3830 The <XA::term> attribute of the element.
3831
3832 It <kwd:MUST> <I::reflect the string value
3833 of the <XA::term> attribute> of the node.
3834 @@Type: DOMString
3835 @@Get:
3836 @@@nullCase:
3837 @@@@enDesc:
3838 If the algorithm returns <DOM::null>.
3839 @@@PerlDef:
3840 __CODE{getReflectAttrStringValue::
3841 $node => $self,
3842 $namespaceURI => {null},
3843 $localName => 'term',
3844 $r => $r,
3845 $defaultValue => {null},
3846 }__;
3847 @@Set:
3848 @@@nullCase:
3849 @@@@enDesc:
3850 Removes the attribute.
3851 @@@NodeReadOnlyError:
3852 @@@PerlDef:
3853 __CODE{setReflectAttrStringValue::
3854 $node => $self,
3855 $namespaceURI => {null},
3856 $localName => 'term',
3857 $given => $given,
3858 }__;
3859
3860 @Attr:
3861 @@Name: scheme
3862 @@enDesc:
3863 The categorization scheme of the element.
3864
3865 It <kwd:MUST> <I::reflect the URI value
3866 of the <XA::scheme> attribute> of the node.
3867 @@Type: DOMString
3868 @@Type: DOMURI
3869 @@Get:
3870 @@@nullCase:
3871 @@@@enDesc:
3872 If the algorithm returns <DOM::null>.
3873 @@@PerlDef:
3874 __CODE{getReflectAttrURIValue::
3875 $node => $self,
3876 $namespaceURI => {null},
3877 $localName => 'scheme',
3878 $r => $r,
3879 $defaultValue => {null},
3880 }__;
3881 @@Set:
3882 @@@nullCase:
3883 @@@@enDesc:
3884 Removes the attribute.
3885 @@@NodeReadOnlyError:
3886 @@@PerlDef:
3887 __CODE{setReflectAttrURIValue::
3888 $node => $self,
3889 $namespaceURI => {null},
3890 $localName => 'scheme',
3891 $given => $given,
3892 }__;
3893
3894 @Attr:
3895 @@Name: label
3896 @@enDesc:
3897 The <XA::label> attribute of the element.
3898
3899 It <kwd:MUST> <I::reflect the string value
3900 of the <XA::label> attribute> of the node.
3901 @@Type: DOMString
3902 @@Get:
3903 @@@nullCase:
3904 @@@@enDesc:
3905 If the algorithm returns <DOM::null>.
3906 @@@PerlDef:
3907 __CODE{getReflectAttrStringValue::
3908 $node => $self,
3909 $namespaceURI => {null},
3910 $localName => 'label',
3911 $r => $r,
3912 $defaultValue => {null},
3913 }__;
3914 @@Set:
3915 @@@nullCase:
3916 @@@@enDesc:
3917 Removes the attribute.
3918 @@@NodeReadOnlyError:
3919 @@@PerlDef:
3920 __CODE{setReflectAttrStringValue::
3921 $node => $self,
3922 $namespaceURI => {null},
3923 $localName => 'label',
3924 $given => $given,
3925 }__;
3926 ##AtomCategoryElement
3927
3928 IFClsETDef:
3929 @IFQName: AtomContributorElement
3930 @ETQName: atom|contributor
3931 @ETRQName: atom|contributor
3932 @ClsQName: ManakaiAtomContributorElement
3933
3934 @IFISA: AtomPersonConstruct
3935 @ClsISA: ManakaiAtomPersonConstruct
3936 @mv:refers: PersonAG
3937 @mv:elementContentModel: PersonCM
3938
3939 @enDesc:
3940 The <XE::atom|contributor> element is a Person construct that
3941 indicates a person or other entity who contributed to the entry
3942 or feed.
3943 ##AtomContributorElement
3944
3945 IFClsETDef:
3946 @IFQName: AtomGeneratorElement
3947 @ETQName: atom|generator
3948 @ETRQName: atom|generator
3949 @ClsQName: ManakaiAtomGeneratorElement
3950
3951 @IFISA: AtomElement
3952 @ClsISA: ManakaiAtomElement
3953
3954 @mv:refers: atomCommonAttributes
3955
3956 @cm:
3957 (dxm|PCDATA||ManakaiDOM|all)*
3958
3959 @enDesc:
3960 The <XE::atom|generator> element identifies the agent used
3961 to generate a feed.
3962
3963 @Attr:
3964 @@Name: uri
3965 @@enDesc:
3966 The URI attribute of the element.
3967
3968 It <kwd:MUST> <I::reflect the URI value
3969 of the <XA::uri> attribute> of the node.
3970 @@Type: DOMString
3971 @@Type: DOMURI
3972 @@Get:
3973 @@@nullCase:
3974 @@@@enDesc:
3975 If the algorithm returns <DOM::null>.
3976 @@@PerlDef:
3977 __CODE{getReflectAttrURIValue::
3978 $node => $self,
3979 $namespaceURI => {null},
3980 $localName => 'uri',
3981 $r => $r,
3982 $defaultValue => {null},
3983 }__;
3984 @@Set:
3985 @@@nullCase:
3986 @@@@enDesc:
3987 Removes the attribute.
3988 @@@NodeReadOnlyError:
3989 @@@PerlDef:
3990 __CODE{setReflectAttrURIValue::
3991 $node => $self,
3992 $namespaceURI => {null},
3993 $localName => 'uri',
3994 $given => $given,
3995 }__;
3996
3997 @Attr:
3998 @@Name: version
3999 @@enDesc:
4000 The <XA::version> attribute of the element.
4001
4002 It <kwd:MUST> <I::reflect the string value
4003 of the <XA::version> attribute> of the node.
4004 @@Type: DOMString
4005 @@Get:
4006 @@@nullCase:
4007 @@@@enDesc:
4008 If the algorithm returns <DOM::null>.
4009 @@@PerlDef:
4010 __CODE{getReflectAttrStringValue::
4011 $node => $self,
4012 $namespaceURI => {null},
4013 $localName => 'version',
4014 $r => $r,
4015 $defaultValue => {null},
4016 }__;
4017 @@Set:
4018 @@@nullCase:
4019 @@@@enDesc:
4020 Removes the attribute.
4021 @@@NodeReadOnlyError:
4022 @@@PerlDef:
4023 __CODE{setReflectAttrStringValue::
4024 $node => $self,
4025 $namespaceURI => {null},
4026 $localName => 'version',
4027 $given => $given,
4028 }__;
4029 ##AtomGeneratorElement
4030
4031 IFClsETDef:
4032 @IFQName: AtomLinkElement
4033 @ETQName: atom|link
4034 @ETRQName: atom|link
4035 @ClsQName: ManakaiAtomLinkElement
4036
4037 @IFISA: AtomElement
4038 @ClsISA: ManakaiAtomElement
4039
4040 @mv:refers: atomCommonAttributes
4041
4042 @cm: undefinedContent
4043
4044 @enDesc:
4045 The <XE::atom|link> element defines a reference from an entry
4046 or feed to a Web resource.
4047
4048 @ATTR:
4049 @@Name: href
4050 @@enDesc:
4051 The <XA::href> attribute of the element.
4052
4053 It <kwd:MUST> <I::reflect the URI value
4054 of the <XA::href> attribute> of the node.
4055 @@Type: DOMString
4056 @@actualType: DOMURI
4057 @@Get:
4058 @@@nullCase:
4059 @@@@enDesc:
4060 If the algorithm returns <DOM::null>.
4061 @@@PerlDef:
4062 __CODE{getReflectAttrURIValue::
4063 $node => $self,
4064 $namespaceURI => {null},
4065 $localName => 'href',
4066 $r => $r,
4067 $defaultValue => {null},
4068 }__;
4069 @@Set:
4070 @@@nullCase:
4071 @@@@enDesc:
4072 Removes the attribute.
4073 @@@NodeReadOnlyError:
4074 @@@PerlDef:
4075 __CODE{setReflectAttrURIValue::
4076 $node => $self,
4077 $namespaceURI => {null},
4078 $localName => 'href',
4079 $given => $given,
4080 }__;
4081
4082 @ATTR:
4083 @@Name: rel
4084 @@enDesc:
4085 The <XA::rel> attribute of the element.
4086
4087 It <kwd:MUST> <I::reflect the string value
4088 of the <XA::rel> attribute> of the node, with
4089 a few exceptions. The default value <kwd:MUST>
4090 be <URI^DISCore|QName::rel|alternate>.
4091 @@Type: DOMString
4092 @@actualType: DOMURI
4093 @@Get:
4094 @@@enDesc:
4095 If the algorithm returns a string that does not contain
4096 any <CHAR::COLON> character, the string
4097 <URI^DISCore|QName::rel|> <kwd:MUST> be prepended
4098 for the return value of the getter.
4099 @@@PerlDef:
4100 __CODE{getReflectAttrStringValue::
4101 $node => $self,
4102 $namespaceURI => {null},
4103 $localName => 'rel',
4104 $r => $r,
4105 $defaultValue => {<Q::rel|alternate>},
4106 }__;
4107 if (defined $r and index ($r, ':') == -1) {
4108 $r = <Q::rel|> . $r;
4109 }
4110 @@Set:
4111 @@@enDesc:
4112 If the given value starts with <URI^DISCore|QName::rel|> (by
4113 simple character-by-character comparison), such substring
4114 <kwd:MUST> be removed for the purpose of the setter algorithm,
4115 if and only if the result string is not empty and does contain
4116 none of <CHAR::COLON>, <CHAR::SOLIDUS>, <CHAR::QUESTION MARK>,
4117 and <CHAR::NUMBER SIGN>.
4118 @@@nullCase:
4119 @@@@enDesc:
4120 Removes the attribute.
4121 @@@NodeReadOnlyError:
4122 @@@PerlDef:
4123 if (defined $given) {
4124 $given =~ s[\Ahttp://www.iana.org/assignments/relation/([^:/?#]+)\z]
4125 [$1];
4126 }
4127 __CODE{setReflectAttrStringValue::
4128 $node => $self,
4129 $namespaceURI => {null},
4130 $localName => 'rel',
4131 $given => $given,
4132 }__;
4133
4134 @@Test:
4135 @@@QName: AtomLinkElement.rel.test
4136 @@@PerlDef:
4137 my $doc;
4138 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4139
4140 my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4141
4142 $test->id ('default');
4143 $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4144 <Q::rel|alternate>);
4145
4146 $test->id ('set');
4147 $el-><AS::AtomLinkElement.rel> ('http://www.example.com/');
4148 $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4149 'http://www.example.com/');
4150
4151 $test->id ('set.self');
4152 $el-><AS::AtomLinkElement.rel> ('self');
4153 $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4154 <Q::rel|self>);
4155
4156 $test->id ('set.qrelated');
4157 $el-><AS::AtomLinkElement.rel> (<Q::rel|related>);
4158 $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4159 <Q::rel|related>);
4160
4161 $test->id ('remove');
4162 $el-><AS::AtomLinkElement.rel> (null);
4163 $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4164 <Q::rel|alternate>);
4165
4166 @ATTR:
4167 @@Name: type
4168 @@enDesc:
4169 The <XA::type> attribute of the element.
4170
4171 It <kwd:MUST> <I::reflect the string value
4172 of the <XA::type> attribute> of the node.
4173 @@Type: DOMString
4174 @@Get:
4175 @@@nullCase:
4176 @@@@enDesc:
4177 If the algorithm returns <DOM::null>.
4178 @@@PerlDef:
4179 __CODE{getReflectAttrStringValue::
4180 $node => $self,
4181 $namespaceURI => {null},
4182 $localName => 'type',
4183 $r => $r,
4184 $defaultValue => {null},
4185 }__;
4186 @@Set:
4187 @@@nullCase:
4188 @@@@enDesc:
4189 Removes the attribute.
4190 @@@NodeReadOnlyError:
4191 @@@PerlDef:
4192 __CODE{setReflectAttrStringValue::
4193 $node => $self,
4194 $namespaceURI => {null},
4195 $localName => 'type',
4196 $given => $given,
4197 }__;
4198
4199 @ATTR:
4200 @@Name: hreflang
4201 @@enDesc:
4202 The <XA::hreflang> attribute of the element.
4203
4204 It <kwd:MUST> <I::reflect the string value
4205 of the <XA::hreflang> attribute> of the node.
4206 @@Type: DOMString
4207 @@Get:
4208 @@@nullCase:
4209 @@@@enDesc:
4210 If the algorithm returns <DOM::null>.
4211 @@@PerlDef:
4212 __CODE{getReflectAttrStringValue::
4213 $node => $self,
4214 $namespaceURI => {null},
4215 $localName => 'hreflang',
4216 $r => $r,
4217 $defaultValue => {null},
4218 }__;
4219 @@Set:
4220 @@@nullCase:
4221 @@@@enDesc:
4222 Removes the attribute.
4223 @@@NodeReadOnlyError:
4224 @@@PerlDef:
4225 __CODE{setReflectAttrStringValue::
4226 $node => $self,
4227 $namespaceURI => {null},
4228 $localName => 'hreflang',
4229 $given => $given,
4230 }__;
4231
4232 @ATTR:
4233 @@Name: title
4234 @@enDesc:
4235 The <XA::title> attribute of the element.
4236
4237 It <kwd:MUST> <I::reflect the string value
4238 of the <XA::title> attribute> of the node.
4239 @@Type: DOMString
4240 @@Get:
4241 @@@nullCase:
4242 @@@@enDesc:
4243 If the algorithm returns <DOM::null>.
4244 @@@PerlDef:
4245 __CODE{getReflectAttrStringValue::
4246 $node => $self,
4247 $namespaceURI => {null},
4248 $localName => 'title',
4249 $r => $r,
4250 $defaultValue => {null},
4251 }__;
4252 @@Set:
4253 @@@nullCase:
4254 @@@@enDesc:
4255 Removes the attribute.
4256 @@@NodeReadOnlyError:
4257 @@@PerlDef:
4258 __CODE{setReflectAttrStringValue::
4259 $node => $self,
4260 $namespaceURI => {null},
4261 $localName => 'title',
4262 $given => $given,
4263 }__;
4264
4265 @ATTR:
4266 @@Name: length
4267 @@enDesc:
4268 The <XA::length> attribute of the element.
4269
4270 It <kwd:MUST> <I::reflect the string value
4271 of the <XA::length> attribute> of the node.
4272 @@Type: DOMString
4273 @@Get:
4274 @@@nullCase:
4275 @@@@enDesc:
4276 If the algorithm returns <DOM::null>.
4277 @@@PerlDef:
4278 __CODE{getReflectAttrStringValue::
4279 $node => $self,
4280 $namespaceURI => {null},
4281 $localName => 'length',
4282 $r => $r,
4283 $defaultValue => {null},
4284 }__;
4285 @@Set:
4286 @@@nullCase:
4287 @@@@enDesc:
4288 Removes the attribute.
4289 @@@NodeReadOnlyError:
4290 @@@PerlDef:
4291 __CODE{setReflectAttrStringValue::
4292 $node => $self,
4293 $namespaceURI => {null},
4294 $localName => 'length',
4295 $given => $given,
4296 }__;
4297 ##AtomLinkElement
4298
4299 IFClsETDef:
4300 @IFQName: AtomPublishedElement
4301 @ETQName: atom|published
4302 @ETRQName: atom|published
4303 @ClsQName: ManakaiAtomPublishedElement
4304
4305 @IFISA: AtomDateConstruct
4306 @ClsISA: ManakaiAtomDateConstruct
4307 @mv:refers: DateAG
4308 @mv:elementContentModel: DateCM
4309
4310 @enDesc:
4311 The <XE::atom|published> element is a Date construct
4312 indicating an instant in time associated with an
4313 event early in the life cycle of the entry.
4314
4315 Typically, <XE::atom|published> will be associated with
4316 the initial creation or first availability of the resouce.
4317 ##AtomPublishedElement
4318
4319 IFClsETDef:
4320 @IFQName: AtomRightsElement
4321 @ETQName: atom|rights
4322 @ETRQName: atom|rights
4323 @ClsQName: ManakaiAtomRightsElement
4324
4325 @IFISA: AtomTextConstruct
4326 @ClsISA: ManakaiAtomTextConstruct
4327 @mv:refers: TextAG
4328 @mv:elementContentModel: TextCM
4329
4330 @enDesc:
4331 The <XE::atom|rights> element is a Text construct
4332 that conveys information about rights held in and
4333 over an entry or feed.
4334 ##AtomRightsElement
4335
4336 ECDef:
4337 @QName: source-prop
4338 @mv:elementTypeClassName: source-prop
4339 @mv:refers: atom|author
4340 @mv:refers: atom|category
4341 @mv:refers: atom|contributor
4342 @mv:refers: atom|generator
4343 @mv:refers: atom|icon
4344 @mv:refers: atom|id
4345 @mv:refers: atom|link
4346 @mv:refers: atom|logo
4347 @mv:refers: atom|rights
4348 @mv:refers: atom|subtitle
4349 @mv:refers: atom|title
4350 @mv:refers: atom|updated
4351 @mv:refers: extensionElements
4352
4353 IFClsETDef:
4354 @IFQName: AtomSourceElement
4355 @ETQName: atom|source
4356 @ETRQName: atom|source
4357 @ClsQName: ManakaiAtomSourceElement
4358
4359 @IFISA: AtomElement
4360 @ClsISA: ManakaiAtomElement
4361
4362 @mv:refers: atomCommonAttributes
4363
4364 @cm:
4365 (source-prop*)
4366
4367 @Attr:
4368 @@Name: authorElements
4369 @@enDesc:
4370 A static list of <XE::atom|author> child elements of the node.
4371 @@Type: StaticNodeList
4372 @@Get:
4373 @@@enDesc:
4374 It <kwd:MUST> <I::return a <XE::atom|author> child element list>
4375 of the node.
4376 @@@disDef:
4377 @@@@dlp:cloneCode: ManakaiAtomFeedElement.authorElements.get
4378
4379 @Attr:
4380 @@Name: categoryElements
4381 @@enDesc:
4382 A static list of <XE::atom|category> child elements of the node.
4383 @@Type: StaticNodeList
4384 @@Get:
4385 @@@enDesc:
4386 It <kwd:MUST> <I::return a <XE::atom|category> child element list>
4387 of the node.
4388 @@@disDef:
4389 @@@@dlp:cloneCode: ManakaiAtomFeedElement.categoryElements.get
4390
4391 @Attr:
4392 @@Name: contributorElements
4393 @@enDesc:
4394 A static list of <XE::atom|contributor> child elements of the node.
4395 @@Type: StaticNodeList
4396 @@Get:
4397 @@@enDesc:
4398 It <kwd:MUST> <I::return a <XE::atom|contributor> child element list>
4399 of the node.
4400 @@@disDef:
4401 @@@@dlp:cloneCode: ManakaiAtomFeedElement.contributorElements.get
4402
4403 @Attr:
4404 @@Name: generatorElement
4405 @@enDesc:
4406 The <XE::atom|generator> child element of the node.
4407 @@Type: AtomGeneratorElement
4408 @@Get:
4409 @@@enDesc:
4410 It <kwd:MUST> <I::return a <XE::atom|generator> child element>
4411 of the node.
4412 @@@nullCase:
4413 @@@@enDesc:
4414 If the algorithm returns <DOM::null>.
4415 @@@NodeReadOnlyError:
4416 @@@disDef:
4417 @@@@dlp:cloneCode: ManakaiAtomFeedElement.generatorElement.get
4418
4419 @Attr:
4420 @@Name: icon
4421 @@enDesc:
4422 The <XE::atom|icon> value of the node.
4423
4424 It <kwd:MUST> <I::reflect the URI value
4425 of the <XE::atom|icon> child element> of the node.
4426 @@Type: DOMString
4427 @@actualType: DOMURI
4428 @@Get:
4429 @@@nullCase:
4430 @@@@enDesc:
4431 If the algorithm returns <DOM::null>.
4432 @@@NodeReadOnlyError:
4433 @@@disDef:
4434 @@@@dlp:cloneCode: ManakaiAtomFeedElement.icon.get
4435 @@Set:
4436 @@@nullCase:
4437 @@@@enDesc:
4438 Removes the value.
4439 @@@NodeReadOnlyError:
4440 @@@disDef:
4441 @@@@dlp:cloneCode: ManakaiAtomFeedElement.icon.set
4442
4443 @Attr:
4444 @@Name: id
4445 @@enDesc:
4446 The <XE::atom|id> value of the node.
4447
4448 It <kwd:MUST> <I::reflect the string value
4449 of the <XE::atom|id> child element> of the node.
4450 @@Type: DOMString
4451 @@actualType: DOMURI
4452 @@Get:
4453 @@@nullCase:
4454 @@@@enDesc:
4455 If the algorithm returns <DOM::null>.
4456 @@@NodeReadOnlyError:
4457 @@@disDef:
4458 @@@@dlp:cloneCode: ManakaiAtomFeedElement.id.get
4459 @@Set:
4460 @@@nullCase:
4461 @@@@enDesc:
4462 Removes the value.
4463 @@@NodeReadOnlyError:
4464 @@@disDef:
4465 @@@@dlp:cloneCode: ManakaiAtomFeedElement.id.set
4466
4467 @Attr:
4468 @@Name: linkElements
4469 @@enDesc:
4470 A static list of <XE::atom|link> child elements of the node.
4471 @@Type: StaticNodeList
4472 @@Get:
4473 @@@enDesc:
4474 It <kwd:MUST> <I::return a <XE::atom|link> child element list>
4475 of the node.
4476 @@@disDef:
4477 @@@@dlp:cloneCode: ManakaiAtomFeedElement.linkElements.get
4478
4479 @Attr:
4480 @@Name: logo
4481 @@enDesc:
4482 The <XE::atom|logo> value of the node.
4483
4484 It <kwd:MUST> <I::reflect the URI value
4485 of the <XE::atom|logo> child element> of the node.
4486 @@Type: DOMString
4487 @@actualType: DOMURI
4488 @@Get:
4489 @@@nullCase:
4490 @@@@enDesc:
4491 If the algorithm returns <DOM::null>.
4492 @@@NodeReadOnlyError:
4493 @@@disDef:
4494 @@@@dlp:cloneCode: ManakaiAtomFeedElement.logo.get
4495 @@Set:
4496 @@@nullCase:
4497 @@@@enDesc:
4498 Removes the value.
4499 @@@NodeReadOnlyError:
4500 @@@disDef:
4501 @@@@dlp:cloneCode: ManakaiAtomFeedElement.logo.set
4502
4503 @Attr:
4504 @@Name: rightsElement
4505 @@enDesc:
4506 The <XE::atom|rights> child element of the node.
4507 @@Type: AtomRightsElement
4508 @@Get:
4509 @@@enDesc:
4510 It <kwd:MUST> <I::return a <XE::atom|rights> child element>
4511 of the node.
4512 @@@nullCase:
4513 @@@@enDesc:
4514 If the algorithm returns <DOM::null>.
4515 @@@NodeReadOnlyError:
4516 @@@disDef:
4517 @@@@dlp:cloneCode: ManakaiAtomFeedElement.rightsElement.get
4518
4519 @Attr:
4520 @@Name: subtitleElement
4521 @@enDesc:
4522 The <XE::atom|subtitle> child element of the node.
4523 @@Type: AtomSubtitleElement
4524 @@Get:
4525 @@@enDesc:
4526 It <kwd:MUST> <I::return a <XE::atom|subtitle> child element>
4527 of the node.
4528 @@@nullCase:
4529 @@@@enDesc:
4530 If the algorithm returns <DOM::null>.
4531 @@@NodeReadOnlyError:
4532 @@@disDef:
4533 @@@@dlp:cloneCode: ManakaiAtomFeedElement.subtitleElement.get
4534
4535 @Attr:
4536 @@Name: titleElement
4537 @@enDesc:
4538 The <XE::atom|title> child element of the node.
4539 @@Type: AtomTitleElement
4540 @@Get:
4541 @@@enDesc:
4542 It <kwd:MUST> <I::return a <XE::atom|title> child element>
4543 of the node.
4544 @@@nullCase:
4545 @@@@enDesc:
4546 If the algorithm returns <DOM::null>.
4547 @@@NodeReadOnlyError:
4548 @@@disDef:
4549 @@@@dlp:cloneCode: ManakaiAtomFeedElement.titleElement.get
4550
4551 @Attr:
4552 @@Name: updatedElement
4553 @@enDesc:
4554 The <XE::atom|updated> child element of the node.
4555 @@Type: AtomUpdatedElement
4556 @@Get:
4557 @@@enDesc:
4558 It <kwd:MUST> <I::return a <XE::atom|updated> child element>
4559 of the node.
4560 @@@nullCase:
4561 @@@@enDesc:
4562 If the algorithm returns <DOM::null>.
4563 @@@NodeReadOnlyError:
4564 @@@disDef:
4565 @@@@dlp:cloneCode: ManakaiAtomFeedElement.updatedElement.get
4566 ##AtomSourceElement
4567
4568 IFClsETDef:
4569 @IFQName: AtomSubtitleElement
4570 @ETQName: atom|subtitle
4571 @ETRQName: atom|subtitle
4572 @ClsQName: ManakaiAtomSubtitleElement
4573
4574 @IFISA: AtomTextConstruct
4575 @ClsISA: ManakaiAtomTextConstruct
4576 @mv:refers: TextAG
4577 @mv:elementContentModel: TextCM
4578
4579 @enDesc:
4580 The <XE::atom|subtitle> element is a Text construct
4581 that conveys a human-readable description or subtitle for a feed.
4582 ##AtomSubtitleElement
4583
4584 IFClsETDef:
4585 @IFQName: AtomSummaryElement
4586 @ETQName: atom|summary
4587 @ETRQName: atom|summary
4588 @ClsQName: ManakaiAtomSummaryElement
4589
4590 @IFISA: AtomTextConstruct
4591 @ClsISA: ManakaiAtomTextConstruct
4592 @mv:refers: TextAG
4593 @mv:elementContentModel: TextCM
4594
4595 @enDesc:
4596 The <XE::atom|summary> element is a Text construct
4597 that conveys a short summary, abstract, or excerpt of an entry.
4598 ##AtomSummaryElement
4599
4600 IFClsETDef:
4601 @IFQName: AtomTitleElement
4602 @ETQName: atom|title
4603 @ETRQName: atom|title
4604 @ClsQName: ManakaiAtomTitleElement
4605
4606 @IFISA: AtomTextConstruct
4607 @ClsISA: ManakaiAtomTextConstruct
4608 @mv:refers: TextAG
4609 @mv:elementContentModel: TextCM
4610
4611 @enDesc:
4612 The <XE::atom|title> element is a Text construct
4613 that conveys a human-readable title for an entry or feed.
4614 ##AtomTitleElement
4615
4616 IFClsETDef:
4617 @IFQName: AtomUpdatedElement
4618 @ETQName: atom|updated
4619 @ETRQName: atom|updated
4620 @ClsQName: ManakaiAtomUpdatedElement
4621
4622 @IFISA: AtomDateConstruct
4623 @ClsISA: ManakaiAtomDateConstruct
4624 @mv:refers: DateAG
4625 @mv:elementContentModel: DateCM
4626
4627 @enDesc:
4628 The <XE::atom|updated> element is a Date construct
4629 indicating the most recent instant in time when an
4630 entry or feed was modified in a way the publisher considers
4631 significant.
4632 ##AtomPublishedElement
4633
4634 ElementTypeBinding:
4635 @Name: NodeReadOnlyError
4636 @ElementType:
4637 dx:raises
4638 @ShadowContent:
4639 @@@: MDOMX|NOMOD_THIS
4640 @@Description:
4641 @@@lang:en
4642 @@@@:
4643 If the node or a descendant of it, which
4644 is to be modified, is read-only.
4645
4646 ## -- Configuration Parameters
4647
4648 boolCParam:
4649 @QName: cfg|create-child-element
4650 @tc:nodeStemKey:
4651 @@@: ccldel
4652 @@ForCheck: =ManakaiDOM|all
4653 @c:targetType: tc|Document
4654 @IsSupportRequired:1
4655 @TrueCase:
4656 @@c:isSupported:1
4657 @@enDesc:
4658 If the parameter is set to <DOM::true>, some DOM attributes
4659 that returns an element will create a child element
4660 when there is no element that met the condition defined
4661 for that DOM attribute.
4662 @FalseCase:
4663 @@c:isSupported:1
4664 @@IsSupportRequired:1
4665 @@IsDefault:1
4666 @@enDesc:
4667 If the parameter is set to <DOM::true>, some DOM attributes
4668 that returns an element will <EM::not> create a child element
4669 even when there is no element that met the condition defined
4670 for that DOM attribute.
4671 @TestC:
4672 @@QName: cfg.create-child-element.set.test
4673 @@PerlCDef:
4674 my $doc;
4675 __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4676
4677 my $cfg = $doc-><AG::Document.domConfig>;
4678 my $cp = <Q::cfg|create-child-element>;
4679
4680 $test->id ('default');
4681 $test->assert_false ($cfg-><M::CFG.getParameter> ($cp));
4682
4683 $test->id ('set.f.to.t');
4684 $cfg-><M::CFG.setParameter> ($cp => true);
4685 $test->assert_true ($cfg-><M::CFG.getParameter> ($cp));
4686
4687 $test->id ('set.t.to.f');
4688 $cfg-><M::CFG.setParameter> ($cp => false);
4689 $test->assert_false ($cfg-><M::CFG.getParameter> ($cp));
4690
4691 $cfg-><M::CFG.setParameter> ($cp => true);
4692
4693 $test->id ('reset');
4694 $cfg-><M::CFG.setParameter> ($cp => null);
4695 $test->assert_false ($cfg-><M::CFG.getParameter> ($cp));
4696
4697 ResourceDef:
4698 @QName: CFG
4699 @AliasFor: c|DOMConfiguration
4700 @For: ManakaiDOM|DOM3
4701
4702 ElementTypeBinding:
4703 @Name: boolCParam
4704 @ElementType:
4705 dis:ResourceDef
4706 @ShadowContent:
4707 @@DISCore:resourceType:
4708 @@@@: c|DOMConfigurationParameter
4709 @@@For: ManakaiDOM|DOM
4710 @@DISCore:resourceType:
4711 @@@@: DISCore|Property
4712 @@@For: =ManakaiDOM|all
4713 @@For: ManakaiDOM|DOM3
4714 @@For: =ManakaiDOM|all
4715 @@Type: idl|boolean||ManakaiDOM|all
4716
4717 ECDef:
4718 @QName: simpleExtensionElements
4719 @mv:elementTypeClassName: simple.extra
4720 @DISCore:resourceType: mv|ElementTypeAdditionalClass
4721
4722 ECDef:
4723 @QName: structuredExtensionElements
4724 @mv:elementTypeClassName: structured.extra
4725 @DISCore:resourceType: mv|ElementTypeAdditionalClass
4726
4727 EMDef:
4728 @QName: extensionElements
4729 @mv:elementTypeClassName: extra
4730 @mv:refers: simpleExtensionElements
4731 @mv:refers: structuredExtensionElements
4732 @DISCore:resourceType: mv|ElementTypeAdditionalClass
4733
4734 AGDef:
4735 @QName: undefinedAttributes
4736 @mv:attributeTypeGroupName: common.extra
4737
4738 ResourceDef:
4739 @QName: undefinedContent
4740 @mv:elementContentModelName: undefined
4741 @For: =ManakaiDOM|ManakaiDOMLatest
4742 @DISCore:resourceType: mv|ElementContentModel
4743 @cm: dxm|ANY||ManakaiDOM|all
4744 @enImplNote:
4745 (text | anyForeignElement)*

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24