Odpowiedzi:
standalone
Deklaracja jest sposobem mówienia parser ignorować żadnych deklaracji znaczników w DTD . DTD jest następnie używany wyłącznie do sprawdzania poprawności.
Jako przykład rozważ skromny <img>
tag. Jeśli spojrzysz na XHTML 1.0 DTD , zobaczysz deklarację znaczników informującą parser, że <img>
tagi muszą być PUSTE oraz posiadać src
i posiadać alt
atrybuty. Gdy przeglądarka przegląda dokument XHTML 1.0 i znajduje <img>
znacznik, powinna zauważyć, że DTD wymaga src
i alt
atrybuty, i dodaje je, jeśli nie są obecne. Sam również zamknie <img>
tag, ponieważ ma być PUSTY. To właśnie specyfikacja XML oznacza „deklaracje znaczników mogą wpływać na treść dokumentu”. Następnie możesz użyć standalone
deklaracji, aby powiedzieć parserowi, aby zignorował te reguły.
To, czy parser faktycznie to robi, jest kolejnym pytaniem, ale powinien to zrobić zgodny z normami parser sprawdzający poprawność (jak przeglądarka).
Zauważ, że jeśli nie określisz DTD, wówczas samodzielna deklaracja „nie ma znaczenia”, więc nie ma powodu, aby z niej korzystać, chyba że podasz również DTD.
standalone=yes
deklaracji znaczników nie są ignorowane, zamiast tego powodują, że dokument jest nieprawidłowy XML. Czy miałbyś coś przeciwko, jeśli zmienię to w odpowiedź?
yes
i no
, gdzie no
jest wartością domyślną.standalone="yes"
oznacza, że procesor XML musi używać DTD tylko do sprawdzania poprawności. W tym przypadku będzie to nie być wykorzystywane do:
standalone="yes"
może dodać ograniczenia ważności, jeśli dokument używa zewnętrznego DTD. Gdy dokument zawiera rzeczy, które wymagałyby modyfikacji XML, takie jak domyślne wartości atrybutów, i standalone="yes"
jest używany, wówczas dokument jest nieprawidłowy .standalone="yes"
może pomóc zoptymalizować wydajność przetwarzania dokumentów.Źródło: Autonomiczny pseudo-atrybut jest istotny tylko wtedy, gdy użyto DTD
standalone
opisuje, czy bieżący dokument XML zależy od zewnętrznej deklaracji znaczników.
W3C opisuje swój cel w „Extensible Markup Language (XML) 1.0 (Fifth Edition)”:
Deklaracje znaczników mogą wpływać na treść dokumentu przekazywanego z procesora XML do aplikacji; przykładami są domyślne wartości atrybutów i deklaracje encji. Autonomiczna deklaracja dokumentu, która może pojawić się jako składnik deklaracji XML, sygnalizuje, czy istnieją takie deklaracje, które pojawiają się na zewnątrz encji dokumentu lub encji parametrów. [Definicja: Zewnętrzna deklaracja znaczników jest zdefiniowana jako deklaracja znaczników występująca w podzbiorze zewnętrznym lub w encji parametrycznej (zewnętrznej lub wewnętrznej, ta ostatnia jest uwzględniona, ponieważ procesory nie sprawdzające poprawności nie są wymagane do ich odczytania).]
Celem standalone=yes
deklaracji jest zagwarantowanie, że informacje zawarte w dokumencie mogą być wiernie odzyskane tylko na podstawie wewnętrznego DTD, tzn. Dokument może być „samodzielny” bez żadnych zewnętrznych odniesień. Sprawdzanie poprawności samodzielnego dokumentu zapewnia, że procesory nie sprawdzające poprawności będą miały wszystkie informacje dostępne do prawidłowego parsowania dokumentu.
Deklaracja autonomiczna nie ma żadnego sensu, jeśli dokument nie ma zewnętrznego DTD, a wewnętrzny DTD nie ma odwołań do encji parametrów, ponieważ dokumenty te są już domyślnie autonomiczne.
Poniżej przedstawiono rzeczywiste efekty używania standalone=yes
.
Zmusza procesory do zgłaszania błędu podczas analizowania dokumentów z zewnętrznym DTD lub odwołaniami do encji parametrycznych, jeśli dokument zawiera odniesienia do encji niezadeklarowanych w wewnętrznym DTD (z wyjątkiem tekstu zastępczego encji parametrycznych, ponieważ procesory nie walidujące nie muszą parsuj to); amp
, lt
, gt
, apos
, I quot
są jedynymi wyjątkami
Podczas analizowania dokumentu, który nie został zadeklarowany jako samodzielny, nie sprawdzający poprawności procesor może przestać analizować wewnętrzny DTD, gdy tylko napotka odniesienie do encji parametru. Zadeklarowanie dokumentu jako samodzielnego zmusza nie-walidujące procesory do analizowania deklaracji znaczników w wewnętrznym DTD, nawet po zignorowaniu jednego lub więcej odwołań do encji parametrycznych.
Zmusza procesory sprawdzające do zgłaszania błędu, jeśli w dokumencie znaleziono którekolwiek z poniższych stwierdzeń, a ich odpowiednie deklaracje znajdują się w zewnętrznym DTD lub w tekście zastępującym encję parametru:
amp
, lt
, gt
, apos
i quot
)Procesor niezweryfikujący może rozważyć pobranie zewnętrznego DTD i rozszerzenie wszystkich odniesień do encji parametrycznych dla dokumentów, które nie są samodzielne, nawet jeśli nie jest to do tego zobowiązane, tj. Ustawienie standalone=yes
może teoretycznie poprawić wydajność procesorów nie sprawdzających poprawności (alert spoilera: prawdopodobnie nie będzie to miało znaczenia).
Inne odpowiedzi tutaj są niekompletne lub niepoprawne, główne nieporozumienie jest takie
Autonomiczna deklaracja jest sposobem na poinformowanie analizatora składni, aby zignorował wszelkie deklaracje znaczników w DTD. DTD jest następnie używany wyłącznie do sprawdzania poprawności.
standalone = „yes” oznacza, że procesor XML musi używać DTD tylko do sprawdzania poprawności.
Wręcz przeciwnie, zadeklarowanie dokumentu jako samodzielnego zmusi procesor nie sprawdzający poprawności do parsowania wewnętrznych deklaracji, które musi normalnie zignorować (tj. Te po odwołaniu do zignorowanej jednostki encji parametru). Procesory, które nie sprawdzają poprawności, muszą nadal korzystać z informacji z wewnętrznego DTD, aby podać domyślne wartości atrybutów i znormalizować atrybuty tokeny, ponieważ jest to niezależne od sprawdzania poprawności.