TODO 7.7 KB
Newer Older
gerd's avatar
gerd committed
1 2
  neue Klasse fake_system. Wenn der untergeordnete resolver
  funktioniert, wird xid_system auf eine bestimmte URL gesetzt.
gerd's avatar
gerd committed
3 4 5 6 7
  ???

- Warners: Polymorphic variants benutzen.
  Cannot_represent auch als Fehler!  (A. Frisch)
  DONE
gerd's avatar
gerd committed
8

gerd's avatar
gerd committed
9 10
- Doku: Sektion "Known problems"
  * Non-representable characters. Kann zu well-formedness errors fhren.
gerd's avatar
gerd committed
11

12 13
- Check:
  Pxp_lexers: Thread-safe? Reentrant?
gerd's avatar
gerd committed
14
  DONE
15 16 17

- Unicode:
  Include Characters > 0xFFFF
gerd's avatar
gerd committed
18
  DONE
19 20

- Lexers:
gerd's avatar
gerd committed
21 22
  einchecken,  DONE
  wlex-Support DONE
23

gerd's avatar
gerd committed
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
- Ausgabe von XML verbessern:
  * derived DTDs richtig ausgeben knnen

    schwierig, man muss ein extdecl vergleichbares Flag hinzunehmen,
    dass true ist, wenn per SYSTEM/PUBLIC in ein external entity
    verzweigt wird

    Optionale ?domain-Attribute. Gltige domains:
    - Ext_subset:       im SYSTEM/PUBLIC-Entity oder in einem
                        von dort angesteuerten Entity
    - Int_subset:       Direkt im internal subset definiert
    - Ext_ent_of_int_subset:  In einem externen Entity, das
                        in das internal subset inkludiert wird.
    
    Default ist Int_subset.

    Frage: (1) Zhlt nur der Ort der Deklaration, oder auch, wo
               das deklarierende Entity angezogen wird?
           (2) Kann man extdecl-Flags auf domains reduzieren?

gerd's avatar
gerd committed
44 45 46 47 48 49
    NICHT IN 1.2. Das ist viel zu schwierig. Eher in die Richtung entwickeln,
    den internal subset orignalgetreu wiederzugeben (z.B. indem man den
    Token-Strom aufzeichnet). Das ist allerdings nur fr geparste DTDs
    sinnvoll; was machen wir mit selbsterzeugten DTDs und modifizierten
    DTDs?

gerd's avatar
gerd committed
50
  * Optionen: Elemente ausgegeben ja/nein usw.
gerd's avatar
gerd committed
51
  ???
gerd's avatar
gerd committed
52 53

  * event-based parser: Entities NICHT auflsen
gerd's avatar
gerd committed
54
  NICHT IN 1.2
gerd's avatar
gerd committed
55 56

- Auch bei parse_wfdocument_entity die DTD transformieren knnen
gerd's avatar
gerd committed
57
  DONE
gerd's avatar
gerd committed
58 59
 
- resolver: externe entities nicht parsen (durch "" ersetzen)
gerd's avatar
gerd committed
60 61
  NICHT NOTWENDIG. Kann durch Pxp_reader auf einfache Weise bereitgestellt
  werden.
gerd's avatar
gerd committed
62 63

- from_string ~alt
gerd's avatar
gerd committed
64
  DONE
gerd's avatar
gerd committed
65 66 67 68 69 70

- Wirkung von `Extend_dtd_fully auch bei parse_wfdocument_entity ???
    Geht wohl nicht.

- ocamlnet-channels untersttzen, sowohl bei input-channels als
    auch output
gerd's avatar
gerd committed
71
  DONE
gerd's avatar
gerd committed
72 73 74 75

- Doku:
    - Wann ist dtd#root gesetzt?
    - Wann ist dtd#id gesetzt?
gerd's avatar
gerd committed
76
  DONE
gerd's avatar
gerd committed
77

gerd's avatar
gerd committed
78 79
- Event-based parsers:

gerd's avatar
gerd committed
80
  * Parse a single element, PI, comment, ... instead of misc* element misc*
gerd's avatar
gerd committed
81
    DONE
gerd's avatar
gerd committed
82

gerd's avatar
gerd committed
83 84
  * process_entity: erstes Token kann bergeben werden DONE
    Letztes Token? DONE
gerd's avatar
gerd committed
85

gerd's avatar
gerd committed
86 87 88 89 90 91 92 93
    Problem: m2parsergen erzwingt, dass immer ein Token zuviel gelesen
    wird. Mgliche Lsung: Eine Grammatikregel wird mit ! markiert;
    diese liest dann nicht ein weiteres Token. Nur erlaubt bei Regeln,
    die auf ein Token enden. Dies erfordert auch eine nderung des
    Aufrufs.

    Problem: Um process_expr zu benutzen, muss man low-level entity
    Methoden aufrufen. Eine bessere API finden.
gerd's avatar
gerd committed
94

gerd's avatar
gerd committed
95 96 97 98
  * { and } inside attribute lists DONE
    
    TODO: Don't forget: pxp_lex_content_string.src: more efficient way of
    handling character sequences
gerd's avatar
gerd committed
99 100 101 102 103

  * Signature for entity_manager

  * Examples

104
  * Pull parser DONE
gerd's avatar
gerd committed
105

106
  * Review Pullparser + Entry_expr
gerd's avatar
gerd committed
107

gerd's avatar
gerd committed
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
  * Namespaces
    TODO: test

  * Pxp_ev_parser: stream parser
    (In Kommentar erlutert) DONE

  * Pxp_ev_parser: Filter, der ignorable whitespace lscht
    DONE

  * Filter, der char data normalisiert
    DONE

  * CHECK: Attributwerte

  * Pxp_document: erzeugen aus event stream; abbilden in event stream

  * Wie bricht man einen stream parser vorzeitig ab? Dateien schlieen!

  * Namespaces und DTDs: Eine pxp:dtd processing instruction, um den
    Default-Namespace fr Element-Deklarationen in DTDs zu setzen.
    <?pxp:dtd xmlns="..."?>

gerd's avatar
gerd committed
130 131
- Follow-Ups:

gerd's avatar
gerd committed
132
  * Clean-up of lexer definitions
gerd's avatar
gerd committed
133
    ???
gerd's avatar
gerd committed
134

gerd's avatar
gerd committed
135 136 137
  * Clean-Up of pxp_yacc.m2y: separate tree_parser and event_parser.
    They have a common superclass where event methods are virtual.

gerd's avatar
gerd committed
138 139 140 141
    Pxp_grammar: Contains grammar and state classes
    Pxp_parse_tree: Only entry points for tree parser
    Pxp_parse_events: Only entry points for event-based parser
    Pxp_yacc: compatibility interface
gerd's avatar
gerd committed
142

gerd's avatar
gerd committed
143 144
    DONE

gerd's avatar
gerd committed
145
  * extend_dtd: export? DONE
gerd's avatar
gerd committed
146

gerd's avatar
gerd committed
147
  * standalone DONE
gerd's avatar
gerd committed
148

gerd's avatar
gerd committed
149 150 151 152 153 154
  * Clean-Up of Pxp_entity. At least define class type entity (in .ml).

  * Pxp_light: XML-Baum als rekursiver Typ
    Pxp_light_trans: Light-Darstellung von/nach Heavy-Darstellung konvertieren
    Pxp_light_docemu: Light-Darstellung als Document-kompatible Klasse

gerd's avatar
gerd committed
155 156
    NICHT IN PXP 1.2

gerd's avatar
gerd committed
157
  * Undo pxp_lexing.mlp DONE
gerd's avatar
gerd committed
158

gerd's avatar
gerd committed
159 160 161 162 163 164
- Improvements:

  * Clone nodes and change DTD

  * parse_wfdocument_entity: argument ~share_dtd

gerd's avatar
gerd committed
165
  * pxp_reader uses netchannels instead of channels
gerd's avatar
gerd committed
166 167 168 169
    DONE

- pxpvalidate braucht hook um Baum teilweise zu lschen.

gerd's avatar
gerd committed
170

gerd's avatar
gerd committed
171 172 173 174 175
- Packen:

  * pxp.files aktualisieren
  * pxp_wlex_utf8_01.ml vorgenerieren

gerd's avatar
gerd committed
176

gerd's avatar
gerd committed
177
------------------------------
gerd's avatar
gerd committed
178

gerd's avatar
gerd committed
179 180 181 182 183 184 185
- Klasse wfdocument???

  Problemlage:
   - Bei Wf-dokumenten keine Deklarationen ausgeben (ausser entities)
     ==> Knnten auch write-Optionen leisten
   - keine allow_arbitrary-PI ausgeben
   - berprfung des root-Elements separieren
gerd's avatar
gerd committed
186 187 188 189 190

------------------------------

- Pxp_lexing: fast_from_function programmieren, das direkt den lexbuf
  benutzt.
gerd's avatar
gerd committed
191

gerd's avatar
gerd committed
192
- Pxp_dtd.Entity: get_resolver
gerd's avatar
gerd committed
193

gerd's avatar
gerd committed
194 195 196 197 198
- Pxp_entity: method copy (relocate)

- Pxp_marshal.relocate_document: copy the entities, too

- Resolvers: get_base_uri
gerd's avatar
gerd committed
199
  NICHT NOTWENDIG, active_id des parent-resolvers tut es.
gerd's avatar
gerd committed
200 201 202 203 204 205 206 207

------------------------------

- Separate well-formed documents from validated documents
  + Generalize DTDs so that schemas can be implemented

- PXP 1.2: Adapter to Nethtml: Parses HTML and converts it to a PXP object
  tree.
gerd's avatar
gerd committed
208

gerd's avatar
gerd committed
209 210
  ==> module Pxp_html

gerd's avatar
gerd committed
211 212 213 214
- PXP 1.2: embedded XML (see below)

- PXP 1.2: XPATH

gerd's avatar
gerd committed
215 216
  ==> module Pxp_xpath definiert XPATH-Kernfunktionen

gerd's avatar
gerd committed
217 218
- PXP 1.2: Adapter to Netclient

gerd's avatar
gerd committed
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
Problems with Pxp_reader: there should be some notion of "relative URI"
vs. "absolute URI". Currently, processing of relative URIs works only
if the active resolver always accepts relative URIs. I.e. it works but
is error-prone.
Idea: open_in has new argument ~scheme:
  - Some "http":    The URI is absolute
  - Some "":        The URI is empty, or Private, or Anonymous
  - None:           The URI is relative
'combine' would interpret the rejection of a relative URI as an error.

Pxp_reader: Perhaps a Redirection exception could be useful.
See netclient.

Pxp_document: The representation of the children list needs to be
improved. Perhaps a balanced tree would work well that allows accesses
by index.

gerd's avatar
gerd committed
236 237 238
----------------------------------------------------------------------

- E-XML:
gerd's avatar
gerd committed
239

gerd's avatar
gerd committed
240 241 242
  <dtd< dtd material >>

  <element< xml material >>  --> transformiert in eine FUNKTION, die mit
gerd's avatar
gerd committed
243
	create_xxx den Term zusammenbaut. Mittels $-Notation lt sich angeben,
gerd's avatar
gerd committed
244 245 246 247 248 249 250
        welche (benannten) Argumente die Funktion hat.

  <data< text material >>

  spec, dtd: aus dem Environment

  ${name:string}: Ein String wird in das Attribut/Textknoten eingefgt
gerd's avatar
gerd committed
251
  {string <ocaml-name>}
gerd's avatar
gerd committed
252 253 254

  ${name:att_value}: Das Attribut wird auf den att_value gesetzt.
    NUR so: attribut="${name:att_value}"
gerd's avatar
gerd committed
255
  {att_value <ocaml-name>}
gerd's avatar
gerd committed
256 257

  ${name:node}: Ein einzelner Knoten
gerd's avatar
gerd committed
258
  {node <ocaml-name>}
gerd's avatar
gerd committed
259 260

  ${name:nodelist}: Eine liste von Knoten
gerd's avatar
gerd committed
261
  {nodes <ocaml-name>}
gerd's avatar
gerd committed
262 263 264 265

  Beispiel:

  let m = <element< <a href="abc">The hyperlink to ${dest:string}</a> >>
gerd's avatar
gerd committed
266
  let m = <element< <a href="abc">The hyperlink to {string dest}</a> >>
gerd's avatar
gerd committed
267

gerd's avatar
gerd committed
268
  Ergibt: m : string -> 'ext node
gerd's avatar
gerd committed
269
          m : dest:string -> 'ext node
gerd's avatar
gerd committed
270 271

  Die Leerzeichen vor <a> und nach </a> werden ignoriert
gerd's avatar
gerd committed
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289

  spec, dtd: feste ocaml-Bezeichner


  <xml< <element>...</element> >>
  <xml< <?pi ...?> >>
  <xml< <!-- ... --> >>
  <xml< data >>           (Leerzeichen am Anfang und Ende ignoriert)

  Der XML-Ausdruck wird im well-formed-Modus gelesen. Daher wird kein
  ignorable whitespace erkannt.

  <declaredtd< DTD >>  ??? (later)
    - Entity-Definitionen benutzen
    - Validierung des Ausdrucks ??? Geht evtl. nicht
    - Ignorable whitespace

  Namespaces?