Skip to topic | Skip to bottom
Home

Tesi
Tesi.DppGrammaticar1.5 - 22 Apr 2006 - 15:31 - FabioVitalitopic end

Start of topic | Skip to actions

Grammatica DTD++

TIPI SEMPLICI

<!ENTITY # nome "(tipoBase)">              
<!ENTITY # nome "tipoBase">
<!ELEMENT nomeElemento (tipoBase)>
<!ELEMENT nomeElemento tipoBase>
<!ATTLIST nomeElemento listaAttributi>
  • tipoBase: predefinito o definito dall'utente e sempre racchiuso tra '#' e ';'
  • listaAttributi: attributeGroup sempre racchiuso tra '##' e ';' o nome Attributo (tipoBase) default o nome Attributo tipoBase default

Derivazione per restrizione

<!ENTITY # nome "(tipoBase{}[]//()\\)">              
<!ENTITY # nome "tipoBase{}[]//()\\">
<!ELEMENT nomeElemento (tipoBase{}[]//()\\)>
<!ELEMENT nomeElemento tipoBase{}[]//()\\>
<!ATTLIST nomeElemento listaAttributi>   

  • listaAttributi: attributeGroup sempre racchiuso tra '##' e ';' o nome Attributo (tipoBase{}[]//()\\) default o nome Attributo tipoBase{}[]//()\\ default
  • Facet:
    • {lunghezza}: length, minLength, maxLength, totalDigits, fractionDigits
    • [range]: maxInclusive, maxExclusive, minInclusive, minExclusive
    • /pattern/: espressione regolare
    • (enumerazione): insieme di valori
    • \whitespace\: r, c, p

Derivazione per lista

<!ENTITY # nome "(tipoBase+{}[]//()\\)">              
<!ENTITY # nome "tipoBase+{}[]//()\\">
<!ELEMENT nomeElemento (tipoBase+{}[]//()\\)>
<!ELEMENT nomeElemento tipoBase+{}[]//()\\>
<!ATTLIST nomeElemento listaAttributi>   

  • listaAttributi: attributeGroup sempre racchiuso tra '##' e ';' o nome Attributo (tipoBase+{}[]//()\\) default o nome Attributo tipoBase+{}[]//()\\ default

Derivazione per unione

<!ENTITY # nome "(tipoBase{}[]//()\\) | (tipoBase{}[]//()\\) |...">              
<!ENTITY # nome "tipoBase{}[]//()\\ | tipoBase{}[]//()\\ | ....">
<!ELEMENT nomeElemento ((tipoBase{}[]//()\\) | (tipoBase{}[]//()\\) | ...) >
<!ELEMENT nomeElemento tipoBase{}[]//()\\ | tipoBase{}[]//()\\ | ....>
<!ATTLIST nomeElemento listaAttributi>   

  • listaAttributi: attributeGroup sempre racchiuso tra '##' e ';' o nome Attributo (tipoBase+{}[]//()\\) | (tipoBase{}[]//()\\) | ... default o nome Attributo tipoBase+{}[]//()\\ | tipoBase{}[]//()\\ | .... default

TIPI COMPLESSI

<!ENTITY @ nome "contentModel" "listaAttributi">      
<!ENTITY @ nome "" "listaAttributi">         
<!ENTITY @ nome "contentModel" "">   
<!ENTITY @ nome "contentModel">

<!ELEMENT nomeElemento (@tipo;)>
<!ELEMENT nomeElemento @tipo;>         
<!ELEMENT nomeElemento contentModel>
<!ROOT nomeElemento contentModel>    

Derivazione per estensione

<!ENTITY @ nome "tipoBase,contentModel" "listaAttributi">   
<!ELEMENT nomeElemento (tipoBase,contentModel)>       
  • tipoBase: tipo complesso sempre racchiuso tra '@' e ';'

Derivazione per restrizione

<!ENTITY @ nome tipoBase "contentModel" "listaAttributi">   

Group

<!ENTITY @@ nome "contentModel">   

AttributeGroup

<!ENTITY ## nome "listaAttributi">  

SubstitutionGroup

<!ELEMENT nomeSubstitutionGroup nomeElemento>

<!ELEMENT nomeSubstitutionGroup nomeElemento tipo>
  • tipo: stesso tipo o un sottotipo dell'head element

Namespace

<!TARGETNS prefisso "URI">

ContentModel:

contiene elementi e Group

Content model misto:

contiene #PCDATA
<!ELEMENT nomeElemento (#PCDATA contentModel)>

and:

<!ELEMENT nomeElemento (elemento & elemento1 &...)>

vincoli di occorrenza:

  • [minOccurs,maxOccurs]
  • +
  • *
  • ?

Content Any:

<!ENTITY @ nome "ANY[,]{}" "listaAttributi">  
<!ELEMENT nomeElemento ANY[,]{}>
  • {}: * ##any * ##other * ##local * ##targetNamespace * valore

Elementi locali:

<!ENTITY @ nome (nomeElemento)>  
<!ELEMENT nome.nomeElemento tipoBase>

Tipi anonimi

Uso di ref

<!ELEMENT nomeElemento tipoBase>
<!ENTITY @ nome "($nomeElemento)">

<!ELEMENT nomeElemento tipoBase>
<!ELEMENT nomeElemento1 ($nomeElemento)>


to top


You are here: Tesi > DppOldBugs > DppGrammatica

to top

Copyright © 1999-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Fabio's Wiki? Send feedback