DTD - Guida rapida
La dichiarazione del tipo di documento XML, comunemente nota come DTD, è un modo per descrivere con precisione il linguaggio XML. I DTD verificano la validità della struttura e del vocabolario di un documento XML rispetto alle regole grammaticali del linguaggio XML appropriato.
Un documento XML può essere definito come:
Well-formed- Se il documento XML aderisce a tutte le regole XML generali come i tag devono essere nidificati correttamente, i tag di apertura e di chiusura devono essere bilanciati e i tag vuoti devono terminare con "/>", allora viene chiamato come ben formato .
O
Valid- Un documento XML che si dice valido quando non solo è ben formato , ma è anche conforme alla DTD disponibile che specifica quali tag utilizza, quali attributi questi tag possono contenere e quali tag possono essere presenti all'interno di altri tag, tra le altre proprietà .
Il diagramma seguente rappresenta che un DTD viene utilizzato per strutturare il documento XML -
Tipi
DTD può essere classificato sulla base della sua dichiarazione nel documento XML, come ad esempio:
DTD interno
DTD esterno
Quando una DTD viene dichiarata all'interno del file, viene chiamata Internal DTD e se è dichiarato in un file separato viene chiamato External DTD.
Impareremo di più su questi nel capitolo Sintassi DTD
Caratteristiche
Di seguito sono riportati alcuni punti importanti descritti da un DTD:
gli elementi che possono apparire in un documento XML.
l'ordine in cui possono apparire.
elementi facoltativi e obbligatori.
attributi dell'elemento e se sono facoltativi o obbligatori.
se gli attributi possono avere valori predefiniti.
Vantaggi dell'utilizzo di DTD
Documentation- È possibile definire il proprio formato per i file XML. Guardando questo documento un utente / sviluppatore può comprendere la struttura dei dati.
Validation - Fornisce un modo per verificare la validità dei file XML controllando se gli elementi vengono visualizzati nell'ordine corretto, gli elementi e gli attributi obbligatori sono a posto, gli elementi e gli attributi non sono stati inseriti in modo errato e così via.
Svantaggi dell'utilizzo di DTD
Non supporta gli spazi dei nomi. Lo spazio dei nomi è un meccanismo mediante il quale i nomi di elementi e attributi possono essere assegnati ai gruppi. Tuttavia, in una DTD gli spazi dei nomi devono essere definiti all'interno della DTD, il che viola lo scopo dell'utilizzo degli spazi dei nomi.
Supporta solo il tipo di dati stringa di testo.
Non è orientato agli oggetti. Pertanto, il concetto di eredità non può essere applicato ai DTD.
Possibilità limitate di esprimere la cardinalità degli elementi.
Un DTD XML può essere specificato all'interno del documento, oppure può essere conservato in un documento separato e quindi il documento può essere collegato al documento DTD per usarlo.
Sintassi
La sintassi di base di un DTD è la seguente:
<!DOCTYPE element DTD identifier
[
declaration1
declaration2
........
]>
Nella sintassi sopra -
DTD inizia con <! DOCTYPE delimitatore.
Un element dice al parser di analizzare il documento dall'elemento root specificato.
DTD identifierè un identificatore per la definizione del tipo di documento, che può essere il percorso di un file sul sistema o l'URL di un file su Internet. Se il DTD punta a un percorso esterno, viene chiamatoexternal subset.
Il square brackets [ ] racchiudere un elenco facoltativo di dichiarazioni di entità chiamate internal subset.
DTD interno
Una DTD viene definita DTD interna se gli elementi vengono dichiarati all'interno dei file XML. Per fare riferimento a esso come DTD interno, l' attributo autonomo nella dichiarazione XML deve essere impostato suyes. Ciò significa che la dichiarazione funziona indipendentemente dalla fonte esterna.
Sintassi
La sintassi del DTD interno è come mostrato:
<!DOCTYPE root-element [element-declarations]>
dove elemento-radice è il nome dell'elemento radice e dichiarazioni-elementi è dove dichiari gli elementi.
Esempio
Di seguito è riportato un semplice esempio di DTD interna:
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
Esaminiamo il codice sopra -
Start Declaration - Inizia la dichiarazione XML con la seguente dichiarazione.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
DTD- Subito dopo l'intestazione XML, segue la dichiarazione del tipo di documento , comunemente indicato come DOCTYPE -
<!DOCTYPE address [
La dichiarazione DOCTYPE ha un punto esclamativo (!) All'inizio del nome dell'elemento. Il DOCTYPE informa il parser che un DTD è associato a questo documento XML.
DTD Body - La dichiarazione DOCTYPE è seguita dal corpo del DTD, dove si dichiarano elementi, attributi, entità e notazioni -
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>
Qui vengono dichiarati diversi elementi che compongono il vocabolario del documento <name>. <! ELEMENT name (#PCDATA)> definisce il nome dell'elemento di tipo "#PCDATA". Qui #PCDATA significa dati di testo analizzabili.
End Declaration- Infine, la sezione di dichiarazione della DTD viene chiusa utilizzando una parentesi di chiusura e una parentesi angolare di chiusura (]>). Ciò termina efficacemente la definizione e, successivamente, il documento XML segue immediatamente.
Regole
La dichiarazione del tipo di documento deve apparire all'inizio del documento (preceduta solo dall'intestazione XML) - non è consentita in nessun altro punto all'interno del documento.
Analogamente alla dichiarazione DOCTYPE, le dichiarazioni degli elementi devono iniziare con un punto esclamativo.
Il nome nella dichiarazione del tipo di documento deve corrispondere al tipo di elemento dell'elemento radice.
DTD esterno
Nella DTD esterna gli elementi sono dichiarati al di fuori del file XML. Vi si accede specificando gli attributi di sistema che possono essere il file .dtd legale o un URL valido. Per fare riferimento ad esso come DTD esterno, l' attributo autonomo nella dichiarazione XML deve essere impostato comeno. Ciò significa che la dichiarazione include informazioni dalla fonte esterna.
Sintassi
Di seguito è riportata la sintassi per DTD esterno:
<!DOCTYPE root-element SYSTEM "file-name">
dove nome-file è il file con estensione .dtd .
Esempio
L'esempio seguente mostra l'utilizzo di DTD esterno:
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
Il contenuto del file DTD address.dtd sono come mostrato -
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
Tipi
È possibile fare riferimento a un DTD esterno utilizzando system identifiers o public identifiers.
System Identifiers
Un identificatore di sistema consente di specificare la posizione di un file esterno contenente le dichiarazioni DTD. La sintassi è la seguente:
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Come puoi vedere, contiene la parola chiave SYSTEM e un riferimento URI che punta alla posizione del documento.
Public Identifiers
Gli identificatori pubblici forniscono un meccanismo per individuare le risorse DTD e sono scritti come di seguito:
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Come puoi vedere, inizia con la parola chiave PUBLIC, seguita da un identificatore specializzato. Gli identificatori pubblici vengono utilizzati per identificare una voce in un catalogo. Gli identificatori pubblici possono seguire qualsiasi formato, tuttavia, un formato comunemente usato è chiamato identificatori pubblici formali o FPI.
Questo capitolo discuterà dei componenti XML dalla prospettiva DTD. Un DTD conterrà fondamentalmente le dichiarazioni dei seguenti componenti XML:
Element
Attributes
Entities
Elementi
Gli elementi XML possono essere definiti come blocchi di costruzione di un documento XML. Gli elementi possono comportarsi come un contenitore per contenere testo, elementi, attributi, oggetti multimediali o un insieme di tutti.
Ogni documento XML contiene uno o più elementi, i cui confini sono delimitati da tag di inizio e tag di fine o da elementi vuoti.
Esempio
Di seguito è riportato un semplice esempio di elementi XML
<name>
Tutorials Point
</name>
Come puoi vedere, abbiamo definito un tag <name>. C'è un testo tra i tag di inizio e fine di <name>. Gli elementi, se usati in un XML-DTD, devono essere dichiarati, cosa che sarà discussa in dettaglio nel capitolo Elementi della DTD .
Attributi
Gli attributi fanno parte degli elementi XML. Un elemento può avere un numero qualsiasi di attributi univoci. Gli attributi forniscono più informazioni sull'elemento XML o più precisamente definiscono una proprietà dell'elemento. Un attributo XML è sempre una coppia nome-valore .
Esempio
Di seguito è riportato un semplice esempio di attributi XML:
<img src = "flower.jpg"/>
Qui img è il nome dell'elemento mentre src è un nome di attributo e flower.jpg è un valore dato per l'attributo src .
Se gli attributi vengono utilizzati in una DTD XML, questi devono essere dichiarati e ciò sarà discusso in dettaglio nel capitolo Attributi DTD
Entità
Le entità sono segnaposto in XML. Questi possono essere dichiarati nel prologo del documento o in un DTD. Le entità possono essere principalmente classificate come:
Entità incorporate
Entità di carattere
Entità generali
Entità parametro
Ci sono cinque entità integrate che giocano in XML ben formato, sono:
e commerciale: & amp;
Virgolette singole: & apos;
Maggiore di: & gt;
Meno di: & lt;
Virgolette doppie: & quot;
Studieremo di più sulle dichiarazioni di entità in XML DTD in dettaglio nel capitolo DTD Entities
Gli elementi XML possono essere definiti come blocchi di costruzione di un documento XML. Gli elementi possono comportarsi come un contenitore per contenere testo, elementi, attributi, oggetti multimediali o un insieme di tutti.
Un elemento DTD viene dichiarato con una dichiarazione ELEMENT. Quando un file XML viene convalidato da DTD, il parser verifica inizialmente l'elemento radice e quindi gli elementi figlio vengono convalidati.
Sintassi
Tutte le dichiarazioni degli elementi DTD hanno questa forma generale:
<!ELEMENT elementname (content)>
La dichiarazione ELEMENT viene utilizzata per indicare al parser che stai per definire un elemento.
elementname è il nome dell'elemento (chiamato anche identificatore generico ) che stai definendo.
il contenuto definisce quale contenuto (se presente) può andare all'interno dell'elemento.
Tipi di contenuto degli elementi
Il contenuto della dichiarazione degli elementi in una DTD può essere classificato come segue:
Contenuto vuoto
Contenuto dell'elemento
Contenuto misto
Qualsiasi contenuto
Contenuto vuoto
Questo è un caso speciale di dichiarazione di elementi. Questa dichiarazione di elemento non contiene alcun contenuto. Questi vengono dichiarati con la parola chiaveEMPTY.
Syntax
Di seguito è riportata la sintassi per la dichiarazione di elementi vuoti:
<!ELEMENT elementname EMPTY >
Nella sintassi sopra -
ELEMENTè la dichiarazione dell'elemento della categoria EMPTY
elementname è il nome di un elemento vuoto.
Example
Di seguito è riportato un semplice esempio che dimostra la dichiarazione di elementi vuoti:
<?xml version = "1.0"?>
<!DOCTYPE hr[
<!ELEMENT address EMPTY>
]>
<address />
In questo esempio l' indirizzo è dichiarato come un elemento vuoto. Il markup per l' elemento address apparirà come <address />.
Contenuto elemento
Nella dichiarazione dell'elemento con contenuto dell'elemento, il contenuto sarebbe elementi consentiti tra parentesi. Possiamo anche includere più di un elemento.
Syntax
Di seguito è riportata una sintassi della dichiarazione dell'elemento con il contenuto dell'elemento:
<!ELEMENT elementname (child1, child2...)>
ELEMENT è il tag di dichiarazione dell'elemento
elementname è il nome dell'elemento.
child1, child2 .. sono gli elementi e ogni elemento deve avere una propria definizione all'interno della DTD.
Example
L'esempio seguente mostra un semplice esempio di dichiarazione di elementi con contenuto di elementi:
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
Nell'esempio precedente, l' indirizzo è l'elemento padre e nome , azienda e phone_no sono i suoi elementi figlio.
Elenco di operatori e regole di sintassi
La tabella seguente mostra l'elenco degli operatori e delle regole di sintassi che possono essere applicate nella definizione degli elementi figlio -
Operatore | Sintassi | Descrizione | Esempio |
---|---|---|---|
+ | <! ELEMENT nome-elemento (child1 +)> | Indica che l'elemento figlio può ricorrere una o più volte all'interno dell'elemento genitore. | <! ELEMENT indirizzo (nome +)> Il nome dell'elemento figlio può ricorrere una o più volte all'interno dell'indirizzo del nome dell'elemento . |
* | <! ELEMENT nome-elemento (child1 *)> | Indica che l'elemento figlio può ricorrere zero o più volte all'interno dell'elemento genitore. | <! ELEMENT indirizzo (nome *)> Il nome dell'elemento figlio può ricorrere zero o più volte all'interno dell'indirizzo del nome dell'elemento . |
? | <! ELEMENT nome-elemento (child1?)> | Indica che l'elemento figlio può verificarsi zero o una volta all'interno dell'elemento genitore. | <! ELEMENT indirizzo (nome?)> Il nome dell'elemento figlio può ricorrere zero o una volta all'interno dell'indirizzo del nome dell'elemento . |
, | <! ELEMENT nome-elemento (figlio1, figlio2)> | Fornisce una sequenza di elementi figlio separati da virgola che devono essere inclusi nel nome dell'elemento. | <! ELEMENT indirizzo (nome, azienda)> Sequenza di nome elementi figlio , azienda , che deve essere presente nello stesso ordine all'interno dell'indirizzo nome elemento . |
| | <! ELEMENT nome-elemento (child1 | child2)> | Permette di fare scelte nell'elemento figlio. | <! ELEMENT indirizzo (nome | azienda)> Ti permette di scegliere uno degli elementi figli, cioè il nome o la società , che deve trovarsi all'interno dell'indirizzo del nome dell'elemento . |
Regole
Dobbiamo seguire alcune regole se c'è più di un contenuto di elemento -
Sequences - Spesso gli elementi all'interno dei documenti DTD devono apparire in un ordine distinto. Se questo è il caso, definisci il contenuto utilizzando una sequenza.
La dichiarazione indica che l'elemento <address> deve avere esattamente tre elementi secondari - <name>, <company> e <phone> - e che devono essere visualizzati in questo ordine. Ad esempio:
<!ELEMENT address (name,company,phone)>
Choices- Supponi di dover consentire un elemento o un altro, ma non entrambi. In questi casi è necessario utilizzare il carattere barra verticale (|). La pipe funziona come un OR esclusivo. Ad esempio:
<!ELEMENT address (mobile | landline)>
Contenuto di elementi misti
Questa è la combinazione di (#PCDATA) e elementi figlio. PCDATA sta per dati carattere analizzati, ovvero testo che non è markup. All'interno di modelli di contenuto misto, il testo può apparire da solo o può essere intervallato da elementi. Le regole per i modelli di contenuto misto sono simili al contenuto dell'elemento come discusso nella sezione precedente.
Syntax
Di seguito è riportata una sintassi generica per il contenuto di elementi misti:
<!ELEMENT elementname (#PCDATA|child1|child2)*>
ELEMENT è il tag di dichiarazione dell'elemento.
elementname è il nome dell'elemento.
PCDATAè il testo che non è markup. #PCDATA deve essere il primo nella dichiarazione di contenuto misto.
child1, child2 .. sono gli elementi e ogni elemento deve avere una propria definizione all'interno della DTD.
L'operatore (*) deve seguire la dichiarazione di contenuto misto se sono inclusi elementi figli
Le dichiarazioni degli elementi (#PCDATA) e figli devono essere separate dall'operatore (|).
Example
Di seguito è riportato un semplice esempio che mostra la dichiarazione di elementi di contenuto misto in una DTD.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA|name)*>
<!ELEMENT name (#PCDATA)>
]>
<address>
Here's a bit of text mixed up with the child element.
<name>
Tanmay Patil
</name>
</address>
QUALSIASI contenuto dell'elemento
Puoi dichiarare un elemento utilizzando la parola chiave ANY nel contenuto. Viene spesso definito elemento di categoria mista. ANY è utile quando devi ancora decidere i contenuti consentiti dell'elemento.
Syntax
La seguente è la sintassi per dichiarare elementi con QUALSIASI contenuto:
<!ELEMENT elementname ANY>
Qui, la parola chiave ANY indica che il testo (PCDATA) e / o qualsiasi elemento dichiarato all'interno della DTD può essere utilizzato all'interno del contenuto dell'elemento <elementname>. Possono essere utilizzati in qualsiasi ordine un numero qualsiasi di volte. Tuttavia, la parola chiave ANY non consente di includere elementi non dichiarati nella DTD.
Example
Di seguito è riportato un semplice esempio che dimostra la dichiarazione dell'elemento con QUALSIASI contenuto:
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address ANY>
]>
<address>
Here's a bit of sample text
</address>
In questo capitolo discuteremo degli attributi DTD. Attribute fornisce più informazioni su un elemento o più precisamente definisce una proprietà di un elemento. Un attributo XML ha sempre la forma di una coppia nome-valore. Un elemento può avere un numero qualsiasi di attributi univoci.
La dichiarazione degli attributi è molto simile alle dichiarazioni degli elementi in molti modi tranne uno; invece di dichiarare il contenuto consentito per gli elementi, dichiari un elenco di attributi consentiti per ogni elemento. Questi elenchi sono chiamati dichiarazione ATTLIST.
Sintassi
La sintassi di base della dichiarazione degli attributi DTD è la seguente:
<!ATTLIST element-name attribute-name attribute-type attribute-value>
Nella sintassi sopra -
Gli attributi DTD iniziano con la parola chiave <! ATTLIST se l'elemento contiene l'attributo.
element-name specifica il nome dell'elemento a cui si applica l'attributo.
attribute-name specifica il nome dell'attributo che è incluso con il nome dell'elemento.
attribute-typedefinisce il tipo di attributi. Discuteremo di più su questo nelle sezioni seguenti.
attribute-valueassume un valore fisso che gli attributi devono definire. Discuteremo di più su questo nelle sezioni seguenti.
Esempio
Di seguito è riportato un semplice esempio per la dichiarazione degli attributi in DTD:
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #REQUIRED>
]>
<address>
<name id = "123">Tanmay Patil</name>
</address>
Esaminiamo il codice sopra -
Inizia con la dichiarazione XML con la seguente istruzione:
<?xml version = "1.0"?>
Immediatamente dopo l'intestazione XML c'è la dichiarazione del tipo di documento, comunemente indicato come DOCTYPE come mostrato di seguito -
Il DOCTYPE informa il parser che un DTD è associato a questo documento XML. La dichiarazione DOCTYPE ha un punto esclamativo (!) All'inizio del nome dell'elemento.
<!DOCTYPE address [
Di seguito è riportato il corpo del DTD. Qui abbiamo dichiarato elemento e attributo -
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
L' ID attributo per il nome dell'elemento è definito come indicato di seguito:
Qui il tipo di attributo è CDATA e il suo valore è #REQUIRED .
<!ATTLIST name id CDATA #REQUIRED>
Regole di dichiarazione degli attributi
Tutti gli attributi utilizzati in un documento XML devono essere dichiarati nella DTD (Document Type Definition) utilizzando una dichiarazione elenco attributi
Gli attributi possono apparire solo nei tag iniziali o vuoti.
La parola chiave ATTLIST deve essere in lettere maiuscole
Nessun nome di attributo duplicato sarà consentito all'interno dell'elenco di attributi per un dato elemento.
Tipi di attributi
Quando si dichiarano gli attributi, è possibile specificare come il processore deve gestire i dati che appaiono nel valore. Possiamo classificare i tipi di attributi in tre categorie principali:
Tipo di stringa
Tipi tokenizzati
Tipi enumerati
La tabella seguente fornisce un riepilogo dei diversi tipi di attributi:
Sr.No. | Tipo e descrizione |
---|---|
1 | CDATA CDATA sono dati di caratteri (testo e non markup). È un tipo di attributo stringa . |
2 | ID È un identificatore univoco dell'attributo. Non dovrebbe apparire più di una volta. È un tipo di attributo tokenizzato . |
3 | IDREF Viene utilizzato per fare riferimento a un ID di un altro elemento. Viene utilizzato per stabilire connessioni tra gli elementi. È un tipo di attributo tokenizzato . |
4 | IDREFS Viene utilizzato per fare riferimento a più ID. È un tipo di attributo tokenizzato . |
5 | ENTITY Rappresenta un'entità esterna nel documento. È un tipo di attributo tokenizzato . |
6 | ENTITIES Rappresenta un elenco di entità esterne nel documento. È un tipo di attributo tokenizzato . |
7 | NMTOKEN È simile a CDATA e il valore dell'attributo è costituito da un nome XML valido. È un tipo di attributo tokenizzato . |
8 | NMTOKENS È simile a CDATA e il valore dell'attributo consiste in un elenco di nomi XML validi. È un tipo di attributo tokenizzato . |
9 | NOTATION Un elemento farà riferimento a una notazione dichiarata nel documento DTD. È un tipo di attributo enumerato . |
10 | Enumeration Consente di definire un elenco specifico di valori in cui uno dei valori deve corrispondere. È un tipo di attributo enumerato . |
Dichiarazione del valore dell'attributo
All'interno di ogni dichiarazione di attributo, è necessario specificare come apparirà il valore nel documento. È possibile specificare se un attributo -
può avere un valore predefinito
può avere un valore fisso
è obbligatorio
è implicito
Valori standard
Contiene il valore predefinito. I valori possono essere racchiusi tra virgolette singole (') o doppie (").
Syntax
La seguente è la sintassi del valore:
<!ATTLIST element-name attribute-name attribute-type "default-value">
dove valore-predefinito è il valore dell'attributo definito.
Example
Di seguito è riportato un semplice esempio di dichiarazione di attributo con valore predefinito:
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA "0">
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
In questo esempio abbiamo un elemento nome con ID attributo il cui valore predefinito è 0 . Il valore predefinito è stato racchiuso tra virgolette doppie.
Valori FISSI
La parola chiave #FIXED seguita dal valore fisso viene utilizzata quando si desidera specificare che il valore dell'attributo è costante e non può essere modificato. Un uso comune degli attributi fissi è la specifica dei numeri di versione.
Syntax
Di seguito è riportata la sintassi dei valori fissi:
<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >
dove #FIXED è un valore di attributo definito.
Example
Di seguito è riportato un semplice esempio di dichiarazione di attributo con valore FISSO -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>
<address>
<company name = "tutorialspoint">we are a free online teaching faculty</company>
</address>
In questo esempio abbiamo utilizzato la parola chiave #FIXED dove indica che il valore "tutorialspoint" è l'unico valore per il nome dell'attributo dell'elemento <company>. Se proviamo a modificare il valore dell'attributo, viene visualizzato un errore.
Quello che segue è un DTD non valido -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>
<address>
<company name = "abc">we are a free online teaching faculty</company>
</address>
Valori RICHIESTI
Ogni volta che si desidera specificare che è richiesto un attributo, utilizzare la parola chiave #REQUIRED.
Syntax
Di seguito è riportata la sintassi di #REQUIRED -
<!ATTLIST element-name attribute-name attribute-type #REQUIRED>
dove #REQUIRED è un tipo di attributo definito.
Example
Di seguito è riportato un semplice esempio di dichiarazione dell'attributo DTD con la parola chiave #REQUIRED -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #REQUIRED>
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
In questo esempio abbiamo usato la parola chiave #REQUIRED per specificare che l'attributo id deve essere fornito per il nome dell'elemento nome
Valori IMPLICITI
Quando si dichiarano gli attributi, è sempre necessario specificare una dichiarazione di valore. Se l'attributo che stai dichiarando non ha un valore predefinito, non ha un valore fisso e non è richiesto, devi dichiarare che l'attributo è implicito . La parola chiave #IMPLIED viene utilizzata per specificare un attributo come implicito .
Syntax
Di seguito è riportata la sintassi di #IMPLIED -
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>
dove #IMPLIED è un tipo di attributo definito.
Example
Di seguito è riportato un semplice esempio di #IMPLIED
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #IMPLIED>
]>
<address>
<name />
</address>
In questo esempio abbiamo utilizzato la parola chiave #IMPLIED poiché non vogliamo specificare alcun attributo da includere nel nome dell'elemento . È opzionale.
Le entità vengono utilizzate per definire collegamenti a caratteri speciali all'interno dei documenti XML. Le entità possono essere principalmente di quattro tipi:
Entità incorporate
Entità di carattere
Entità generali
Entità parametro
Sintassi della dichiarazione di entità
In generale, le entità possono essere dichiarate internally o externally. Cerchiamo di capire ciascuno di questi e la loro sintassi come segue:
Entità interna
Se un'entità è dichiarata all'interno di una DTD, viene chiamata come entità interna.
Syntax
Di seguito è riportata la sintassi per la dichiarazione di entità interna:
<!ENTITY entity_name "entity_value">
Nella sintassi sopra -
entity_name è il nome dell'entità seguito dal suo valore tra virgolette doppie o virgolette singole.
entity_value contiene il valore per il nome dell'entità.
Il valore dell'entità dell'entità interna viene de-referenziato aggiungendo un prefisso & al nome dell'entità, ad esempio & nome_entità.
Example
Di seguito è riportato un semplice esempio di dichiarazione di entità interna:
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA)>
<!ENTITY name "Tanmay patil">
<!ENTITY company "TutorialsPoint">
<!ENTITY phone_no "(011) 123-4567">
]>
<address>
&name;
&company;
&phone_no;
</address>
Nell'esempio precedente, i rispettivi nomi di entità name , company e phone_no vengono sostituiti dai rispettivi valori nel documento XML. I valori dell'entità vengono de-referenziati aggiungendo il prefisso & al nome dell'entità.
Salva questo file come sample.xmle aprilo in qualsiasi browser, noterai che i valori di entità per nome , azienda , phone_no vengono rispettivamente sostituiti.
Entità esterna
Se un'entità è dichiarata al di fuori di una DTD, viene chiamata come entità esterna. È possibile fare riferimento a un'entità esterna utilizzando identificatori di sistema o identificatori pubblici.
Syntax
Di seguito è riportata la sintassi per la dichiarazione di entità esterna:
<!ENTITY name SYSTEM "URI/URL">
Nella sintassi sopra -
name è il nome dell'entità.
SYSTEM è la parola chiave.
URI/URL è l'indirizzo della fonte esterna racchiuso tra virgolette doppie o singole.
Types
È possibile fare riferimento a un DTD esterno utilizzando:
System Identifiers - Un identificatore di sistema consente di specificare la posizione di un file esterno contenente dichiarazioni DTD.
Come puoi vedere, contiene la parola chiave SYSTEM e un riferimento URI che punta alla posizione del documento. La sintassi è la seguente:
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Public Identifiers - Gli identificatori pubblici forniscono un meccanismo per individuare le risorse DTD e sono scritti come di seguito -
Come puoi vedere, inizia con la parola chiave PUBLIC, seguita da un identificatore specializzato. Gli identificatori pubblici vengono utilizzati per identificare una voce in un catalogo. Gli identificatori pubblici possono seguire qualsiasi formato; tuttavia, un formato comunemente utilizzato è chiamato identificatori pubblici formali o FPI.
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Example
Cerchiamo di capire l'entità esterna con il seguente esempio:
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>
Tanmay Patil
</name>
<company>
TutorialsPoint
</company>
<phone>
(011) 123-4567
</phone>
</address>
Di seguito è riportato il contenuto del file DTD address.dtd -
<!ELEMENT address (name, company, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
Entità incorporate
Tutti i parser XML devono supportare entità integrate. In generale, puoi usare questi riferimenti a entità ovunque. È inoltre possibile utilizzare testo normale all'interno del documento XML, ad esempio nel contenuto degli elementi e nei valori degli attributi.
Ci sono cinque entità integrate che svolgono il loro ruolo in XML ben formato, sono:
e commerciale: & amp;
Virgolette singole: & apos;
Maggiore di: & gt;
Meno di: & lt;
Virgolette doppie: & quot;
Esempio
L'esempio seguente mostra la dichiarazione di entità incorporata:
<?xml version = "1.0"?>
<note>
<description>I'm a technical writer & programmer</description>
<note>
Come puoi vedere qui, il & amp; il carattere è sostituito da & ogni volta che il processore lo incontra.
Entità di carattere
Le entità carattere sono usate per nominare alcune delle entità che sono rappresentazioni simboliche di informazioni, cioè i caratteri che sono difficili o impossibili da digitare possono essere sostituiti da entità carattere.
Esempio
L'esempio seguente mostra la dichiarazione di entità carattere -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
<!ELEMENT author (#PCDATA)>
<!ENTITY writer "Tanmay patil">
<!ENTITY copyright "©">
]>
<author>&writer;©right;</author>
Noterai qui che abbiamo usato ©come valore per il carattere del copyright. Salva questo file come sample.xml e aprilo nel tuo browser e vedrai che il copyright è sostituito dal carattere ©.
Entità generali
Le entità generali devono essere dichiarate all'interno della DTD prima di poter essere utilizzate all'interno di un documento XML. Invece di rappresentare un solo carattere, le entità generali possono rappresentare caratteri, paragrafi e persino interi documenti.
Sintassi
Per dichiarare un'entità generale, usa una dichiarazione di questa forma generale nel tuo DTD -
<!ENTITY ename "text">
Esempio
L'esempio seguente mostra la dichiarazione di entità generale:
<?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY source-text "tutorialspoint">
]>
<note>
&source-text;
</note>
Ogni volta che un parser XML incontra un riferimento a un'entità di testo di origine , fornirà il testo sostitutivo all'applicazione nel punto di riferimento.
Entità parametro
Lo scopo di un'entità parametro è consentire di creare sezioni riutilizzabili di testo sostitutivo.
Sintassi
Di seguito è riportata la sintassi per la dichiarazione dell'entità parametro:
<!ENTITY % ename "entity_value">
entity_value è qualsiasi carattere che non sia '&', '%' o '"'.
Esempio
L'esempio seguente mostra la dichiarazione dell'entità del parametro. Supponiamo di avere dichiarazioni di elementi come di seguito:
<!ELEMENT residence (name, street, pincode, city, phone)>
<!ELEMENT apartment (name, street, pincode, city, phone)>
<!ELEMENT office (name, street, pincode, city, phone)>
<!ELEMENT shop (name, street, pincode, city, phone)>
Supponiamo ora di voler aggiungere un ulteriore paese di eleement , quindi è necessario aggiungerlo a tutte e quattro le dichiarazioni. Quindi possiamo andare per un riferimento all'entità parametro. Ora usando il riferimento all'entità parametro, l'esempio precedente sarà:
<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">
Le entità parametro vengono dereferenziate allo stesso modo di un riferimento a entità generale, solo con un segno di percentuale invece di una e commerciale -
<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>
Quando il parser legge queste dichiarazioni, sostituisce il testo sostitutivo dell'entità per il riferimento all'entità.
Usiamo DTD per descrivere con precisione il documento XML. I DTD verificano la validità della struttura e del vocabolario di un documento XML rispetto alle regole grammaticali del linguaggio XML appropriato. Ora per verificare la validità del DTD, è possibile utilizzare le seguenti procedure:
Using XML DTD validation tools - È possibile utilizzare alcuni IDE come XML Spy (non gratuito) e XMLStarlet (opensource) può essere utilizzato per convalidare i file XML rispetto al documento DTD.
Using XML DTD on-line validators- W3C Markup Validation Service è progettato per convalidare i documenti Web. Usa il validatore online per verificare la validità del tuo XML DTD qui .
Write your own XML validators with XML DTD validation API - Le versioni più recenti di JDK (sopra 1.4) supportano l'API di convalida XML DTD. È possibile scrivere il proprio codice di convalida per verificare la validità della convalida DTD XML.