Domanda

Io, ovviamente, non può determinare se un frammento di HTML è valida senza sapere ciò che il resto degli sguardi documento come (come minimo, avrei bisogno di un doctype al fine di conoscere quali regole sto convalidando contro). Ma dato il seguente frammento di HTML5:

<article><header></article>My header</header><p>My text</p></article>

I può certamente determinare che si tratta di non valida senza vedere il resto del documento. Quindi, c'è una cosa come "provvisoriamente valida" HTML, o "valido che preveda che si inserisce in un certo luogo in un documento valido"?

C'è qualcosa di più il seguente pseudocodice?

def is_valid_fragment(fragment):
 tmp = "<!doctype html><html><head><title></title></head><body>" + fragment + "</body></html>"
 return my_HTML5_validator.is_valid_html5_document(tmp)
È stato utile?

Soluzione

Si può certamente parlare di un XML documento Weing ben formate , e si può costruire un documento da qualsiasi singolo elemento e dei suoi figli. Si potrebbe quindi parlare singolarmente-radicati XHTML5 frammenti essere ben formato. Si potrebbe fare con un frammento di moltiplicare radicata (come <img/><img/>) da trattare con esso come una sequenza di documenti, o avvolgendolo in qualche elemento contenitore sintetico - dal momento che stiamo parlando solo di ben formati, che sarebbe a posto

Tuttavia, HTML5 consente ancora l'autochiusura tag SGML, come <hr> e così via, la cui auto-closingness può essere determinato solo dal ricorso al doctype. Per esempio, <div><hr></div> va bene, ma non è <div><tr></div>. Se si trattasse di nodi DOM piuttosto che di testo come input, questo sarebbe un argomento d'interesse, ma se hai testo, avresti bisogno di un parser che conosce abbastanza HTML per essere in grado di far fronte a tali elementi. Al di là di questo, però, alcune regole molto semplici, sollevato direttamente da XML, sarebbe sufficiente per gestire ben formati.

Se si voleva andare al di là di ben formati e sguardo ad alcuni aspetti della validità , penso che si può ancora farlo a livello di frammento singolarmente radicata con XML. Come le specifiche dice:

  

Un documento XML è valido se ha una dichiarazione di tipo di documento associato e se i conforme del documento con i vincoli in esso espressi.

Un DTD può nominare ogni elemento come la radice, e la meccanica quindi si prenderà cura di verificare la relazione tra questo elemento e dei suoi figli, ei loro figli e così via, e le varie altre vincoli che compongono la validità.

Anche in questo caso, è possibile trasferire questa idea direttamente in HTML. Non so come si tratta con i frammenti si moltiplicano radicate, però. E tenere a mente che alcuni vincoli intero documento (come gli ID essere unico) potrebbero tenere all'interno del frammento, ma non in un documento altrimenti valida una volta che il frammento è stato inserito in esso.

Altri suggerimenti

Si potrebbe verificare se è ben formato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top