Le FAQ del protocollo Google Wave affermano che [HTML] "non ha proprietà desiderabili" e che "HTML rende OT (Operational Transforms) difficile se non impossibile" [1]. Perché è così? Quali problemi sorgono se HTML viene trattato semplicemente come testo semplice e quindi applicato OT?La trasformazione operativa funziona su documenti strutturati come HTML se viene semplicemente trattata come testo normale?
risposta
Non ho una risposta completa, ma io sono interessato a vedere più lavoro fatto per rendere esistenti open source librerie di trasformazione operative lavorano con il testo ricco, quindi mi contribuire ciò Lo so.
L'importante differenza tra HTML e lo schema Wave sembra essere il modo in cui viene formattata la formattazione del testo: una gerarchia di tag nidificati per le annotazioni HTML rispetto a quelle fuori banda (nel footer del documento) con intervalli per Wave XML . Le annotazioni fuori banda sono probabilmente un modo più naturale per contrassegnare la formattazione del testo poiché consentono di sovrapporre i formati (non annidati). Esso permette qualcosa di simile (in pseudo-markup), che non sarebbe XML valido usando la rappresentazione nidificato:
(b) This is bold (i) while this range is both bold and italic (/b) and this last bit is just italic (/i)
correlate, qui è la relevant issue nel progetto ShareJS. Forse possono implementare il supporto del testo avanzato adottando parte dello schema Wave XML.
Presumo qui comprendi le basi di OT. Il principale problema nel fare OT su HTML come testo semplice è quello di unire tag html. Come semplice esempio, dire che abbiamo avuto un documento come segue:
Hello world
Alice decide allora che il mondo dovrebbe essere in grassetto:
Hello <b>world</b>
Questo può essere rappresentato con un'operazione di doppio inserto in OT, schematicamente :
Edit A: Keep 6 : Insert "<b>" : Keep 5 : Insert "</b>"
Se Bob ha deciso che 'mondo' dovrebbe essere in corsivo prima di vedere di modifica di Alice, aggiungeva l'operazione
Edit B: Keep 6 : Insert "<i>" : Keep 5 : Insert "</i>"
Se il server ha ricevuto la modifica di Bob dopo quella di Alice, sarebbe necessario trasformare B contro A per diventare B '.
Le istruzioni Keep sono invariate tramite la trasformazione, ma Inserisci "" trasformato su Inserisci "" può diventare Keep 3: Insert "" o Insert "": Keep 3. Generalmente il server verrà configurato per inserire la modifica successiva dopo la prima modifica.
Edit B': Keep 6 : Keep 3 : Insert "<i>" : Keep 5 : Keep 3 : Insert "</i>"
Qui il problema diventa ovvio. L'applicazione di A allora B' alla stringa originale dà l'html non valido:
Hello <b><i>world</b></i>
Teoricamente questo potrebbe essere risolto variando inserti pre e post, ma questo sarebbe ottenere peloso per gli esempi più complessi, potenzialmente coinvolge una scansione documento completo per ogni trasformazione
Come notato nell'altra risposta, questo pasticcio può essere evitato usando annotazioni fuori banda + testo normale.Un altro approccio che ho visto solo finora in pubblicazioni accademiche è quello di trattare la struttura XML come un albero con le operazioni di OT per il nodo aggiunta, l'eliminazione, ad esempio:
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.100.74
Immagino che il problema fondamentale qui sia che con inserimenti simultanei, il risultato finale può sempre essere semanticamente scorretto, ma con il caso di XML/HTML, il risultato finale può essere sintatticamente errato. L'uso delle annotazioni non fa nulla per alleviare l'incoerenza semantica, ma assicura che la trasformazione produrrà XML/HTML valido e come tale può sempre essere ben rappresentato. Grazie. – Nakedible
Assolutamente giusto – jazmit
ci sono approaches in OT che supportano SGML (superset di XML), ma non ci sono implementazioni. Pertanto, non è impossibile! Però, sono d'accordo, OT non è l'approccio migliore per abilitare XML. Questo perché OT è stato progettato per strutture dati lineari. Ma HTML/XML è molto più complesso: ha attributi ed è costruito come un albero. Il fatto che sia un albero è risolvibile, ma gli attributi - che sono realizzati come un array associativo ordinato - non sono supportati da OT. Semplicemente perché gli array associativi non sono supportati da OT (al momento). L'approccio sopra in realtà raccomanda di trattare gli attributi come una stringa: E.g. "id = 'myid' value = 'mystuff'" Ma puoi facilmente interrompere l'intera sintassi della tua 'attributes-string', quando un utente elimina tutti gli attributi, e un altro inserisce un "carattere direttamente dopo" mystuff ". . potrebbe risolvere in qualche tag div che assomiglia a questo <div ">
, che non è la sintassi valida
Forse questo ti interessa:
CEFX è un progetto che mira a supportare XML - è morto a mia conoscenza, ma che utilizza. un approccio OT Per qualche motivo non è possibile modificare gli elementi xml solo stringa.
L'SDK Drive di Google supporta strutture di dati simili a grafi, ma è proprietario e nobile sai come funziona
Sto sviluppando un framework che supporta strutture di dati arbitrarie. Attualmente sono supportati testo, JSON, XML e HTML. Ha un approccio diverso: verificarlo: Yatta!
BTW: Ciò che il protocollo Wave e Eric Drechsel descritto è noto come Annotazioni in OT. È comunemente sfruttato per supportare il rich text.
- 1. Implementazione trasformazione operativa (non javascript)
- 2. HTML vs Testo normale come corpo nell'email
- 3. lexer/parser per documenti di testo (non) strutturati
- 4. Qt: Come aprire il file HTML come testo normale?
- 5. come convertire il testo HTML in testo normale?
- 6. Come inserire testo normale?
- 7. Come funziona la trasformazione prospettica in PIL?
- 8. membro variabile stringa viene trattata come Tupla in Python
- 9. codici convertire HTML in testo normale
- 10. HTML reso a testo normale usando Python
- 11. Quando utilizzare runat = "server" su normale HTML
- 12. La sincronizzazione può essere trattata come un aspetto in AOP
- 13. Come usare CDATA nei documenti html?
- 14. Come funziona la copia incolla del testo formattato?
- 15. Dollar ($) firma la stringa di password trattata come variabile
- 16. Come verificare se UILabel ha attribuito testo o testo normale a livello di programmazione?
- 17. Testo non strutturato a dati strutturati
- 18. Password di testo normale su HTTPS
- 19. Perché la trasformazione del testo nei CSS non mantiene la trasformazione (maiuscola) quando viene inviata nel modulo?
- 20. Come sapere se la tastiera visualizzata è Split o normale?
- 21. Perché su Safari la trasformazione translate non funziona correttamente?
- 22. Come posso generare documenti HTML usando `godoc`?
- 23. La trasformazione di Gulp-inject non funziona
- 24. Come suddividere i documenti HTML in pagine per ebook?
- 25. WCF Discovery semplicemente non funziona
- 26. Scattare foto "semplicemente" non funziona
- 27. Come analizzare titoli di prodotto (non strutturati) in dati strutturati?
- 28. Come gestire la risposta del server di testo normale?
- 29. Come implementare la trasformazione di Hough?
- 30. Tipo MIME per soddisfare HTML, email, immagini e testo normale?
+1 per la [discussione ShareJS] (https://github.com/josephg/ShareJS/issues/1)! – mb21