Mercurial > emacs
changeset 86378:5d15069189ff
Fixups for nxml per Romain Francoise email.
author | Mark A. Hershberger <mah@everybody.org> |
---|---|
date | Fri, 23 Nov 2007 19:38:49 +0000 |
parents | a6cfd62b2902 |
children | 2ac1a9b70580 |
files | doc/emacs/ChangeLog doc/emacs/nxml-mode.texi doc/misc/ChangeLog doc/misc/Makefile.in doc/misc/makefile.w32-in doc/misc/nxml-mode.texi etc/ChangeLog etc/NXML-NEWS lisp/nxml/Makefile lisp/nxml/NEWS lisp/nxml/README |
diffstat | 11 files changed, 1066 insertions(+), 1222 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/emacs/ChangeLog Fri Nov 23 19:24:04 2007 +0000 +++ b/doc/emacs/ChangeLog Fri Nov 23 19:38:49 2007 +0000 @@ -1,3 +1,7 @@ +2007-11-23 Mark A. Hershberger <mah@everybody.org> + + * nxml-mode.texi: Move to ../misc. + 2007-11-23 Thien-Thi Nguyen <ttn@gnuvola.org> * files.texi (Why Version Control?): Fix typo.
--- a/doc/emacs/nxml-mode.texi Fri Nov 23 19:24:04 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,834 +0,0 @@ -\input texinfo @c -*- texinfo -*- -@c %**start of header -@setfilename nxml-mode.info -@settitle nXML Mode -@c %**end of header - -@dircategory Emacs -@direntry -* nXML Mode: (nxml-mode.info). -@end direntry - -@node Top -@top nXML Mode - -This manual documents nxml-mode, an Emacs major mode for editing -XML with RELAX NG support. This manual is not yet complete. - -@menu -* Completion:: -* Inserting end-tags:: -* Paragraphs:: -* Outlining:: -* Locating a schema:: -* DTDs:: -* Limitations:: -@end menu - -@node Completion -@chapter Completion - -Apart from real-time validation, the most important feature that -nxml-mode provides for assisting in document creation is "completion". -Completion assists the user in inserting characters at point, based on -knowledge of the schema and on the contents of the buffer before -point. - -The traditional GNU Emacs key combination for completion in a -buffer is @kbd{M-@key{TAB}}. However, many window systems -and window managers use this key combination themselves (typically for -switching between windows) and do not pass it to applications. It's -hard to find key combinations in GNU Emacs that are both easy to type -and not taken by something else. @kbd{C-@key{RET}} (i.e. -pressing the Enter or Return key, while the Ctrl key is held down) is -available. It won't be available on a traditional terminal (because -it is indistinguishable from Return), but it will work with a window -system. Therefore we adopt the following solution by default: use -@kbd{C-@key{RET}} when there's a window system and -@kbd{M-@key{TAB}} when there's not. In the following, I -will assume that a window system is being used and will therefore -refer to @kbd{C-@key{RET}}. - -Completion works by examining the symbol preceding point. This -is the symbol to be completed. The symbol to be completed may be the -empty. Completion considers what symbols starting with the symbol to -be completed would be valid replacements for the symbol to be -completed, given the schema and the contents of the buffer before -point. These symbols are the possible completions. An example may -make this clearer. Suppose the buffer looks like this (where @point{} -indicates point): - -@example -<html xmlns="http://www.w3.org/1999/xhtml"> -<h@point{} -@end example - -@noindent -and the schema is XHTML. In this context, the symbol to be completed -is @samp{h}. The possible completions consist of just -@samp{head}. Another example, is - -@example -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<@point{} -@end example - -@noindent -In this case, the symbol to be completed is empty, and the possible -completions are @samp{base}, @samp{isindex}, -@samp{link}, @samp{meta}, @samp{script}, -@samp{style}, @samp{title}. Another example is: - -@example -<html xmlns="@point{} -@end example - -@noindent -In this case, the symbol to be completed is empty, and the possible -completions are just @samp{http://www.w3.org/1999/xhtml}. - -When you type @kbd{C-@key{RET}}, what happens depends -on what the set of possible completions are. - -@itemize @bullet -@item -If the set of completions is empty, nothing -happens. -@item -If there is one possible completion, then that completion is -inserted, together with any following characters that are -required. For example, in this case: - -@example -<html xmlns="http://www.w3.org/1999/xhtml"> -<@point{} -@end example - -@noindent -@kbd{C-@key{RET}} will yield - -@example -<html xmlns="http://www.w3.org/1999/xhtml"> -<head@point{} -@end example -@item -If there is more than one possible completion, but all -possible completions share a common non-empty prefix, then that prefix -is inserted. For example, suppose the buffer is: - -@example -<html x@point{} -@end example - -@noindent -The symbol to be completed is @samp{x}. The possible completions -are @samp{xmlns} and @samp{xml:lang}. These share a -common prefix of @samp{xml}. Thus, @kbd{C-@key{RET}} -will yield: - -@example -<html xml@point{} -@end example - -@noindent -Typically, you would do @kbd{C-@key{RET}} again, which would -have the result described in the next item. -@item -If there is more than one possible completion, but the -possible completions do not share a non-empty prefix, then Emacs will -prompt you to input the symbol in the minibuffer, initializing the -minibuffer with the symbol to be completed, and popping up a buffer -showing the possible completions. You can now input the symbol to be -inserted. The symbol you input will be inserted in the buffer instead -of the symbol to be completed. Emacs will then insert any required -characters after the symbol. For example, if it contains: - -@example -<html xml@point{} -@end example - -@noindent -Emacs will prompt you in the minibuffer with - -@example -Attribute: xml@point{} -@end example - -@noindent -and the buffer showing possible completions will contain - -@example -Possible completions are: -xml:lang xmlns -@end example - -@noindent -If you input @kbd{xmlns}, the result will be: - -@example -<html xmlns="@point{} -@end example - -@noindent -(If you do @kbd{C-@key{RET}} again, the namespace URI will -be inserted. Should that happen automatically?) -@end itemize - -@node Inserting end-tags -@chapter Inserting end-tags - -The main redundancy in XML syntax is end-tags. nxml-mode provides -several ways to make it easier to enter end-tags. You can use all of -these without a schema. - -You can use @kbd{C-@key{RET}} after @samp{</} -to complete the rest of the end-tag. - -@kbd{C-c C-f} inserts an end-tag for the element containing -point. This command is useful when you want to input the start-tag, -then input the content and finally input the end-tag. The @samp{f} -is mnemonic for finish. - -If you want to keep tags balanced and input the end-tag at the -same time as the start-tag, before inputting the content, then you can -use @kbd{C-c C-i}. This inserts a @samp{>}, then inserts -the end-tag and leaves point before the end-tag. @kbd{C-c C-b} -is similar but more convenient for block-level elements: it puts the -start-tag, point and the end-tag on successive lines, appropriately -indented. The @samp{i} is mnemonic for inline and the -@samp{b} is mnemonic for block. - -Finally, you can customize nxml-mode so that @kbd{/} -automatically inserts the rest of the end-tag when it occurs after -@samp{<}, by doing - -@display -@kbd{M-x customize-variable @key{RET} nxml-slash-auto-complete-flag @key{RET}} -@end display - -@noindent -and then following the instructions in the displayed buffer. - -@node Paragraphs -@chapter Paragraphs - -Emacs has several commands that operate on paragraphs, most -notably @kbd{M-q}. nXML mode redefines these to work in a way -that is useful for XML. The exact rules that are used to find the -beginning and end of a paragraph are complicated; they are designed -mainly to ensure that @kbd{M-q} does the right thing. - -A paragraph consists of one or more complete, consecutive lines. -A group of lines is not considered a paragraph unless it contains some -non-whitespace characters between tags or inside comments. A blank -line separates paragraphs. A single tag on a line by itself also -separates paragraphs. More precisely, if one tag together with any -leading and trailing whitespace completely occupy one or more lines, -then those lines will not be included in any paragraph. - -A start-tag at the beginning of the line (possibly indented) may -be treated as starting a paragraph. Similarly, an end-tag at the end -of the line may be treated as ending a paragraph. The following rules -are used to determine whether such a tag is in fact treated as a -paragraph boundary: - -@itemize @bullet -@item -If the schema does not allow text at that point, then it -is a paragraph boundary. -@item -If the end-tag corresponding to the start-tag is not at -the end of its line, or the start-tag corresponding to the end-tag is -not at the beginning of its line, then it is not a paragraph -boundary. For example, in - -@example -<p>This is a paragraph with an -<emph>emphasized</emph> phrase. -@end example - -@noindent -the @samp{<emph>} start-tag would not be considered as -starting a paragraph, because its corresponding end-tag is not at the -end of the line. -@item -If there is text that is a sibling in element tree, then -it is not a paragraph boundary. For example, in - -@example -<p>This is a paragraph with an -<emph>emphasized phrase that takes one source line</emph> -@end example - -@noindent -the @samp{<emph>} start-tag would not be considered as -starting a paragraph, even though its end-tag is at the end of its -line, because there the text @samp{This is a paragraph with an} -is a sibling of the @samp{emph} element. -@item -Otherwise, it is a paragraph boundary. -@end itemize - -@node Outlining -@chapter Outlining - -nXML mode allows you to display all or part of a buffer as an -outline, in a similar way to Emacs' outline mode. An outline in nXML -mode is based on recognizing two kinds of element: sections and -headings. There is one heading for every section and one section for -every heading. A section contains its heading as or within its first -child element. A section also contains its subordinate sections (its -subsections). The text content of a section consists of anything in a -section that is neither a subsection nor a heading. - -Note that this is a different model from that used by XHTML. -nXML mode's outline support will not be useful for XHTML unless you -adopt a convention of adding a @code{div} to enclose each -section, rather than having sections implicitly delimited by different -@code{h@var{n}} elements. This limitation may be removed -in a future version. - -The variable @code{nxml-section-element-name-regexp} gives -a regexp for the local names (i.e. the part of the name following any -prefix) of section elements. The variable -@code{nxml-heading-element-name-regexp} gives a regexp for the -local names of heading elements. For an element to be recognized -as a section - -@itemize @bullet -@item -its start-tag must occur at the beginning of a line -(possibly indented); -@item -its local name must match -@code{nxml-section-element-name-regexp}; -@item -either its first child element or a descendant of that -first child element must have a local name that matches -@code{nxml-heading-element-name-regexp}; the first such element -is treated as the section's heading. -@end itemize - -@noindent -You can customize these variables using @kbd{M-x -customize-variable}. - -There are three possible outline states for a section: - -@itemize @bullet -@item -normal, showing everything, including its heading, text -content and subsections; each subsection is displayed according to the -state of that subsection; -@item -showing just its heading, with both its text content and -its subsections hidden; all subsections are hidden regardless of their -state; -@item -showing its heading and its subsections, with its text -content hidden; each subsection is displayed according to the state of -that subsection. -@end itemize - -In the last two states, where the text content is hidden, the -heading is displayed specially, in an abbreviated form. An element -like this: - -@example -<section> -<title>Food</title> -<para>There are many kinds of food.</para> -</section> -@end example - -@noindent -would be displayed on a single line like this: - -@example -<-section>Food...</> -@end example - -@noindent -If there are hidden subsections, then a @code{+} will be used -instead of a @code{-} like this: - -@example -<+section>Food...</> -@end example - -@noindent -If there are non-hidden subsections, then the section will instead be -displayed like this: - -@example -<-section>Food... - <-section>Delicious Food...</> - <-section>Distasteful Food...</> -</-section> -@end example - -@noindent -The heading is always displayed with an indent that corresponds to its -depth in the outline, even it is not actually indented in the buffer. -The variable @code{nxml-outline-child-indent} controls how much -a subheading is indented with respect to its parent heading when the -heading is being displayed specially. - -Commands to change the outline state of sections are bound to -key sequences that start with @kbd{C-c C-o} (@kbd{o} is -mnemonic for outline). The third and final key has been chosen to be -consistent with outline mode. In the following descriptions -current section means the section containing point, or, more precisely, -the innermost section containing the character immediately following -point. - -@itemize @bullet -@item -@kbd{C-c C-o C-a} shows all sections in the buffer -normally. -@item -@kbd{C-c C-o C-t} hides the text content -of all sections in the buffer. -@item -@kbd{C-c C-o C-c} hides the text content -of the current section. -@item -@kbd{C-c C-o C-e} shows the text content -of the current section. -@item -@kbd{C-c C-o C-d} hides the text content -and subsections of the current section. -@item -@kbd{C-c C-o C-s} shows the current section -and all its direct and indirect subsections normally. -@item -@kbd{C-c C-o C-k} shows the headings of the -direct and indirect subsections of the current section. -@item -@kbd{C-c C-o C-l} hides the text content of the -current section and of its direct and indirect -subsections. -@item -@kbd{C-c C-o C-i} shows the headings of the -direct subsections of the current section. -@item -@kbd{C-c C-o C-o} hides as much as possible without -hiding the current section's text content; the headings of ancestor -sections of the current section and their child section sections will -not be hidden. -@end itemize - -When a heading is displayed specially, you can use -@key{RET} in that heading to show the text content of the section -in the same way as @kbd{C-c C-o C-e}. - -You can also use the mouse to change the outline state: -@kbd{S-mouse-2} hides the text content of a section in the same -way as@kbd{C-c C-o C-c}; @kbd{mouse-2} on a specially -displayed heading shows the text content of the section in the same -way as @kbd{C-c C-o C-e}; @kbd{mouse-1} on a specially -displayed start-tag toggles the display of subheadings on and -off. - -The outline state for each section is stored with the first -character of the section (as a text property). Every command that -changes the outline state of any section updates the display of the -buffer so that each section is displayed correctly according to its -outline state. If the section structure is subsequently changed, then -it is possible for the display to no longer correctly reflect the -stored outline state. @kbd{C-c C-o C-r} can be used to refresh -the display so it is correct again. - -@node Locating a schema -@chapter Locating a schema - -nXML mode has a configurable set of rules to locate a schema for -the file being edited. The rules are contained in one or more schema -locating files, which are XML documents. - -The variable @samp{rng-schema-locating-files} specifies -the list of the file-names of schema locating files that nXML mode -should use. The order of the list is significant: when file -@var{x} occurs in the list before file @var{y} then rules -from file @var{x} have precedence over rules from file -@var{y}. A filename specified in -@samp{rng-schema-locating-files} may be relative. If so, it will -be resolved relative to the document for which a schema is being -located. It is not an error if relative file-names in -@samp{rng-schema-locating-files} do not not exist. You can use -@kbd{M-x customize-variable @key{RET} rng-schema-locating-files -@key{RET}} to customize the list of schema locating -files. - -By default, @samp{rng-schema-locating-files} list has two -members: @samp{schemas.xml}, and -@samp{@var{dist-dir}/schema/schemas.xml} where -@samp{@var{dist-dir}} is the directory containing the nXML -distribution. The first member will cause nXML mode to use a file -@samp{schemas.xml} in the same directory as the document being -edited if such a file exist. The second member contains rules for the -schemas that are included with the nXML distribution. - -@menu -* Commands for locating a schema:: -* Schema locating files:: -@end menu - -@node Commands for locating a schema -@section Commands for locating a schema - -The command @kbd{C-c C-s C-w} will tell you what schema -is currently being used. - -The rules for locating a schema are applied automatically when -you visit a file in nXML mode. However, if you have just created a new -file and the schema cannot be inferred from the file-name, then this -will not locate the right schema. In this case, you should insert the -start-tag of the root element and then use the command @kbd{C-c -C-a}, which reapplies the rules based on the current content of -the document. It is usually not necessary to insert the complete -start-tag; often just @samp{<@var{name}} is -enough. - -If you want to use a schema that has not yet been added to the -schema locating files, you can use the command @kbd{C-c C-s C-f} -to manually select the file contaiing the schema for the document in -current buffer. Emacs will read the file-name of the schema from the -minibuffer. After reading the file-name, Emacs will ask whether you -wish to add a rule to a schema locating file that persistently -associates the document with the selected schema. The rule will be -added to the first file in the list specified -@samp{rng-schema-locating-files}; it will create the file if -necessary, but will not create a directory. If the variable -@samp{rng-schema-locating-files} has not been customized, this -means that the rule will be added to the file @samp{schemas.xml} -in the same directory as the document being edited. - -The command @kbd{C-c C-s C-t} allows you to select a schema by -specifying an identifier for the type of the document. The schema -locating files determine the available type identifiers and what -schema is used for each type identifier. This is useful when it is -impossible to infer the right schema from either the file-name or the -content of the document, even though the schema is already in the -schema locating file. A situation in which this can occur is when -there are multiple variants of a schema where all valid documents have -the same document element. For example, XHTML has Strict and -Transitional variants. In a situation like this, a schema locating file -can define a type identifier for each variant. As with @kbd{C-c -C-s C-f}, Emacs will ask whether you wish to add a rule to a schema -locating file that persistently associates the document with the -specified type identifier. - -The command @kbd{C-c C-s C-l} adds a rule to a schema -locating file that persistently associates the document with -the schema that is currently being used. - -@node Schema locating files -@section Schema locating files - -Each schema locating file specifies a list of rules. The rules -from each file are appended in order. To locate a schema each rule is -applied in turn until a rule matches. The first matching rule is then -used to determine the schema. - -Schema locating files are designed to be useful for other -applications that need to locate a schema for a document. In fact, -there is nothing specific to locating schemas in the design; it could -equally well be used for locating a stylesheet. - -@menu -* Schema locating file syntax basics:: -* Using the document's URI to locate a schema:: -* Using the document element to locate a schema:: -* Using type identifiers in schema locating files:: -* Using multiple schema locating files:: -@end menu - -@node Schema locating file syntax basics -@subsection Schema locating file syntax basics - -There is a schema for schema locating files in the file -@samp{locate.rnc} in the schema directory. Schema locating -files must be valid with respect to this schema. - -The document element of a schema locating file must be -@samp{locatingRules} and the namespace URI must be -@samp{http://thaiopensource.com/ns/locating-rules/1.0}. The -children of the document element specify rules. The order of the -children is the same as the order of the rules. Here's a complete -example of a schema locating file: - -@example -<?xml version="1.0"?> -<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> - <namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml.rnc"/> - <documentElement localName="book" uri="docbook.rnc"/> -</locatingRules> -@end example - -@noindent -This says to use the schema @samp{xhtml.rnc} for a document with -namespace @samp{http://www.w3.org/1999/xhtml}, and to use the -schema @samp{docbook.rnc} for a document whose local name is -@samp{book}. If the document element had both a namespace URI -of @samp{http://www.w3.org/1999/xhtml} and a local name of -@samp{book}, then the matching rule that comes first will be -used and so the schema @samp{xhtml.rnc} would be used. There is -no precedence between different types of rule; the first matching rule -of any type is used. - -As usual with XML-related technologies, resources are identified -by URIs. The @samp{uri} attribute identifies the schema by -specifying the URI. The URI may be relative. If so, it is resolved -relative to the URI of the schema locating file that contains -attribute. This means that if the value of @samp{uri} attribute -does not contain a @samp{/}, then it will refer to a filename in -the same directory as the schema locating file. - -@node Using the document's URI to locate a schema -@subsection Using the document's URI to locate a schema - -A @samp{uri} rule locates a schema based on the URI of the -document. The @samp{uri} attribute specifies the URI of the -schema. The @samp{resource} attribute can be used to specify -the schema for a particular document. For example, - -@example -<uri resource="spec.xml" uri="docbook.rnc"/> -@end example - -@noindent -specifies that that the schema for @samp{spec.xml} is -@samp{docbook.rnc}. - -The @samp{pattern} attribute can be used instead of the -@samp{resource} attribute to specify the schema for any document -whose URI matches a pattern. The pattern has the same syntax as an -absolute or relative URI except that the path component of the URI can -use a @samp{*} character to stand for zero or more characters -within a path segment (i.e. any character other @samp{/}). -Typically, the URI pattern looks like a relative URI, but, whereas a -relative URI in the @samp{resource} attribute is resolved into a -particular absolute URI using the base URI of the schema locating -file, a relative URI pattern matches if it matches some number of -complete path segments of the document's URI ending with the last path -segment of the document's URI. For example, - -@example -<uri pattern="*.xsl" uri="xslt.rnc"/> -@end example - -@noindent -specifies that the schema for documents with a URI whose path ends -with @samp{.xsl} is @samp{xslt.rnc}. - -A @samp{transformURI} rule locates a schema by -transforming the URI of the document. The @samp{fromPattern} -attribute specifies a URI pattern with the same meaning as the -@samp{pattern} attribute of the @samp{uri} element. The -@samp{toPattern} attribute is a URI pattern that is used to -generate the URI of the schema. Each @samp{*} in the -@samp{toPattern} is replaced by the string that matched the -corresponding @samp{*} in the @samp{fromPattern}. The -resulting string is appended to the initial part of the document's URI -that was not explicitly matched by the @samp{fromPattern}. The -rule matches only if the transformed URI identifies an existing -resource. For example, the rule - -@example -<transformURI fromPattern="*.xml" toPattern="*.rnc"/> -@end example - -@noindent -would transform the URI @samp{file:///home/jjc/docs/spec.xml} -into the URI @samp{file:///home/jjc/docs/spec.rnc}. Thus, this -rule specifies that to locate a schema for a document -@samp{@var{foo}.xml}, Emacs should test whether a file -@samp{@var{foo}.rnc} exists in the same directory as -@samp{@var{foo}.xml}, and, if so, should use it as the -schema. - -@node Using the document element to locate a schema -@subsection Using the document element to locate a schema - -A @samp{documentElement} rule locates a schema based on -the local name and prefix of the document element. For example, a rule - -@example -<documentElement prefix="xsl" localName="stylesheet" uri="xslt.rnc"/> -@end example - -@noindent -specifies that when the name of the document element is -@samp{xsl:stylesheet}, then @samp{xslt.rnc} should be used -as the schema. Either the @samp{prefix} or -@samp{localName} attribute may be omitted to allow any prefix or -local name. - -A @samp{namespace} rule locates a schema based on the -namespace URI of the document element. For example, a rule - -@example -<namespace ns="http://www.w3.org/1999/XSL/Transform" uri="xslt.rnc"/> -@end example - -@noindent -specifies that when the namespace URI of the document is -@samp{http://www.w3.org/1999/XSL/Transform}, then -@samp{xslt.rnc} should be used as the schema. - -@node Using type identifiers in schema locating files -@subsection Using type identifiers in schema locating files - -Type identifiers allow a level of indirection in locating the -schema for a document. Instead of associating the document directly -with a schema URI, the document is associated with a type identifier, -which is in turn associated with a schema URI. nXML mode does not -constrain the format of type identifiers. They can be simply strings -without any formal structure or they can be public identifiers or -URIs. Note that these type identifiers have nothing to do with the -DOCTYPE declaration. When comparing type identifiers, whitespace is -normalized in the same way as with the @samp{xsd:token} -datatype: leading and trailing whitespace is stripped; other sequences -of whitespace are normalized to a single space character. - -Each of the rules described in previous sections that uses a -@samp{uri} attribute to specify a schema, can instead use a -@samp{typeId} attribute to specify a type identifier. The type -identifier can be associated with a URI using a @samp{typeId} -element. For example, - -@example -<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> - <namespace ns="http://www.w3.org/1999/xhtml" typeId="XHTML"/> - <typeId id="XHTML" typeId="XHTML Strict"/> - <typeId id="XHTML Strict" uri="xhtml-strict.rnc"/> - <typeId id="XHTML Transitional" uri="xhtml-transitional.rnc"/> -</locatingRules> -@end example - -@noindent -declares three type identifiers @samp{XHTML} (representing the -default variant of XHTML to be used), @samp{XHTML Strict} and -@samp{XHTML Transitional}. Such a schema locating file would -use @samp{xhtml-strict.rnc} for a document whose namespace is -@samp{http://www.w3.org/1999/xhtml}. But it is considerably -more flexible than a schema locating file that simply specified - -@example -<namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml-strict.rnc"/> -@end example - -@noindent -A user can easily use @kbd{C-c C-s C-t} to select between XHTML -Strict and XHTML Transitional. Also, a user can easily add a catalog - -@example -<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> - <typeId id="XHTML" typeId="XHTML Transitional"/> -</locatingRules> -@end example - -@noindent -that makes the default variant of XHTML be XHTML Transitional. - -@node Using multiple schema locating files -@subsection Using multiple schema locating files - -The @samp{include} element includes rules from another -schema locating file. The behavior is exactly as if the rules from -that file were included in place of the @samp{include} element. -Relative URIs are resolved into absolute URIs before the inclusion is -performed. For example, - -@example -<include rules="../rules.xml"/> -@end example - -@noindent -includes the rules from @samp{rules.xml}. - -The process of locating a schema takes as input a list of schema -locating files. The rules in all these files and in the files they -include are resolved into a single list of rules, which are applied -strictly in order. Sometimes this order is not what is needed. -For example, suppose you have two schema locating files, a private -file - -@example -<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> - <namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml.rnc"/> -</locatingRules> -@end example - -@noindent -followed by a public file - -@example -<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> - <transformURI pathSuffix=".xml" replacePathSuffix=".rnc"/> - <namespace ns="http://www.w3.org/1999/XSL/Transform" typeId="XSLT"/> -</locatingRules> -@end example - -@noindent -The effect of these two files is that the XHTML @samp{namespace} -rule takes precedence over the @samp{transformURI} rule, which -is almost certainly not what is needed. This can be solved by adding -an @samp{applyFollowingRules} to the private file. - -@example -<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> - <applyFollowingRules ruleType="transformURI"/> - <namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml.rnc"/> -</locatingRules> -@end example - -@node DTDs -@chapter DTDs - -nxml-mode is designed to support the creation of standalone XML -documents that do not depend on a DTD. Although it is common practice -to insert a DOCTYPE declaration referencing an external DTD, this has -undesirable side-effects. It means that the document is no longer -self-contained. It also means that different XML parsers may interpret -the document in different ways, since the XML Recommendation does not -require XML parsers to read the DTD. With DTDs, it was impractical to -get validation without using an external DTD or reference to an -parameter entity. With RELAX NG and other schema languages, you can -simulataneously get the benefits of validation and standalone XML -documents. Therefore, I recommend that you do not reference an -external DOCTYPE in your XML documents. - -One problem is entities for characters. Typically, as well as -providing validation, DTDs also provide a set of character entities -for documents to use. Schemas cannot provide this functionality, -because schema validation happens after XML parsing. The recommended -solution is to either use the Unicode characters directly, or, if this -is impractical, use character references. nXML mode supports this by -providing commands for entering characters and character references -using the Unicode names, and can display the glyph corresponding to a -character reference. - -@node Limitations -@chapter Limitations - -nXML mode has some limitations: - -@itemize @bullet -@item -DTD support is limited. Internal parsed general entities declared -in the internal subset are supported provided they do not contain -elements. Other usage of DTDs is ignored. -@item -The restrictions on RELAX NG schemas in section 7 of the RELAX NG -specification are not enforced. -@item -Unicode support has problems. This stems mostly from the fact that -the XML (and RELAX NG) character model is based squarely on Unicode, -whereas the Emacs character model is not. Emacs 22 is slated to have -full Unicode support, which should improve the situation here. -@end itemize - -@bye
--- a/doc/misc/ChangeLog Fri Nov 23 19:24:04 2007 +0000 +++ b/doc/misc/ChangeLog Fri Nov 23 19:38:49 2007 +0000 @@ -1,3 +1,14 @@ +2007-11-23 Mark A. Hershberger <mah@everybody.org> + + * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add nxml-mode. + ($(infodir)/nxml-mode): New rule. + + * makefile.w32-in (INFO_TARGETS, DVI_TARGETS): Add nxml-mode. + ($(infodir)/nxml-mode): New rule. + (clean): Add nxml-mode*. + + * nxml-mode.texi: New file with nxml manual. + 2007-11-18 Michael Albinus <michael.albinus@gmx.de> * tramp.texi (Filename completion): Simplify explanation of
--- a/doc/misc/Makefile.in Fri Nov 23 19:24:04 2007 +0000 +++ b/doc/misc/Makefile.in Fri Nov 23 19:38:49 2007 +0000 @@ -60,6 +60,7 @@ $(infodir)/message \ $(infodir)/mh-e \ $(infodir)/newsticker \ + $(infodir)/nxml-mode \ $(infodir)/org \ $(infodir)/pcl-cvs \ $(infodir)/pgg \ @@ -100,6 +101,7 @@ message.dvi \ mh-e.dvi \ newsticker.dvi \ + nxml-mode.dvi \ org.dvi \ pcl-cvs.dvi \ pgg.dvi \ @@ -278,6 +280,12 @@ newsticker.dvi: newsticker.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/newsticker.texi +nxml-mode : $(infodir)/nxml-mode +$(infodir)/nxml-mode: nxml-mode.texi + cd $(srcdir); $(MAKEINFO) nxml-mode.texi +nxml-mode.dvi: nxml-mode.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/nxml-mode.texi + org : $(infodir)/org $(infodir)/org: org.texi cd $(srcdir); $(MAKEINFO) org.texi
--- a/doc/misc/makefile.w32-in Fri Nov 23 19:24:04 2007 +0000 +++ b/doc/misc/makefile.w32-in Fri Nov 23 19:38:49 2007 +0000 @@ -43,7 +43,7 @@ $(infodir)/url $(infodir)/speedbar $(infodir)/tramp \ $(infodir)/ses $(infodir)/smtpmail $(infodir)/flymake \ $(infodir)/newsticker $(infodir)/rcirc $(infodir)/erc \ - $(infodir)/remember + $(infodir)/remember $(infodir)/nxml-mode DVI_TARGETS = calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \ ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \ gnus.dvi message.dvi sieve.dvi pgg.dvi mh-e.dvi \ @@ -51,7 +51,7 @@ ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \ pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.dvi \ speedbar.dvi tramp.dvi ses.dvi smtpmail.dvi flymake.dvi \ - newsticker.dvi rcirc.dvi erc.dvi remember.dvi + newsticker.dvi rcirc.dvi erc.dvi remember.dvi nxml-mode.dvi INFOSOURCES = info.texi # The following rule does not work with all versions of `make'. @@ -271,6 +271,11 @@ newsticker.dvi: newsticker.texi $(ENVADD) $(TEXI2DVI) $(srcdir)/newsticker.texi +$(infodir)/nxml-mode: nxml-mode.texi + $(MAKEINFO) nxml-mode.texi +nxml-mod.dvi: nxml-mode.texi + $(ENVADD) $(TEXI2DVI) $(srcdir)/nxml-mode.texi + $(infodir)/rcirc: rcirc.texi $(MAKEINFO) rcirc.texi rcirc.dvi: rcirc.texi @@ -304,7 +309,7 @@ $(infodir)/flymake* $(infodir)/newsticker* \ $(infodir)/sieve* $(infodir)/pgg* \ $(infodir)/erc* $(infodir)/rcirc* \ - $(infodir)/remember* + $(infodir)/remember* $(infodir)/nxml-mode* distclean: clean
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/misc/nxml-mode.texi Fri Nov 23 19:38:49 2007 +0000 @@ -0,0 +1,834 @@ +\input texinfo @c -*- texinfo -*- +@c %**start of header +@setfilename ../../info/nxml-mode +@settitle nXML Mode +@c %**end of header + +@dircategory Emacs +@direntry +* nXML Mode: (nxml-mode.info). +@end direntry + +@node Top +@top nXML Mode + +This manual documents nxml-mode, an Emacs major mode for editing +XML with RELAX NG support. This manual is not yet complete. + +@menu +* Completion:: +* Inserting end-tags:: +* Paragraphs:: +* Outlining:: +* Locating a schema:: +* DTDs:: +* Limitations:: +@end menu + +@node Completion +@chapter Completion + +Apart from real-time validation, the most important feature that +nxml-mode provides for assisting in document creation is "completion". +Completion assists the user in inserting characters at point, based on +knowledge of the schema and on the contents of the buffer before +point. + +The traditional GNU Emacs key combination for completion in a +buffer is @kbd{M-@key{TAB}}. However, many window systems +and window managers use this key combination themselves (typically for +switching between windows) and do not pass it to applications. It's +hard to find key combinations in GNU Emacs that are both easy to type +and not taken by something else. @kbd{C-@key{RET}} (i.e. +pressing the Enter or Return key, while the Ctrl key is held down) is +available. It won't be available on a traditional terminal (because +it is indistinguishable from Return), but it will work with a window +system. Therefore we adopt the following solution by default: use +@kbd{C-@key{RET}} when there's a window system and +@kbd{M-@key{TAB}} when there's not. In the following, I +will assume that a window system is being used and will therefore +refer to @kbd{C-@key{RET}}. + +Completion works by examining the symbol preceding point. This +is the symbol to be completed. The symbol to be completed may be the +empty. Completion considers what symbols starting with the symbol to +be completed would be valid replacements for the symbol to be +completed, given the schema and the contents of the buffer before +point. These symbols are the possible completions. An example may +make this clearer. Suppose the buffer looks like this (where @point{} +indicates point): + +@example +<html xmlns="http://www.w3.org/1999/xhtml"> +<h@point{} +@end example + +@noindent +and the schema is XHTML. In this context, the symbol to be completed +is @samp{h}. The possible completions consist of just +@samp{head}. Another example, is + +@example +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<@point{} +@end example + +@noindent +In this case, the symbol to be completed is empty, and the possible +completions are @samp{base}, @samp{isindex}, +@samp{link}, @samp{meta}, @samp{script}, +@samp{style}, @samp{title}. Another example is: + +@example +<html xmlns="@point{} +@end example + +@noindent +In this case, the symbol to be completed is empty, and the possible +completions are just @samp{http://www.w3.org/1999/xhtml}. + +When you type @kbd{C-@key{RET}}, what happens depends +on what the set of possible completions are. + +@itemize @bullet +@item +If the set of completions is empty, nothing +happens. +@item +If there is one possible completion, then that completion is +inserted, together with any following characters that are +required. For example, in this case: + +@example +<html xmlns="http://www.w3.org/1999/xhtml"> +<@point{} +@end example + +@noindent +@kbd{C-@key{RET}} will yield + +@example +<html xmlns="http://www.w3.org/1999/xhtml"> +<head@point{} +@end example +@item +If there is more than one possible completion, but all +possible completions share a common non-empty prefix, then that prefix +is inserted. For example, suppose the buffer is: + +@example +<html x@point{} +@end example + +@noindent +The symbol to be completed is @samp{x}. The possible completions +are @samp{xmlns} and @samp{xml:lang}. These share a +common prefix of @samp{xml}. Thus, @kbd{C-@key{RET}} +will yield: + +@example +<html xml@point{} +@end example + +@noindent +Typically, you would do @kbd{C-@key{RET}} again, which would +have the result described in the next item. +@item +If there is more than one possible completion, but the +possible completions do not share a non-empty prefix, then Emacs will +prompt you to input the symbol in the minibuffer, initializing the +minibuffer with the symbol to be completed, and popping up a buffer +showing the possible completions. You can now input the symbol to be +inserted. The symbol you input will be inserted in the buffer instead +of the symbol to be completed. Emacs will then insert any required +characters after the symbol. For example, if it contains: + +@example +<html xml@point{} +@end example + +@noindent +Emacs will prompt you in the minibuffer with + +@example +Attribute: xml@point{} +@end example + +@noindent +and the buffer showing possible completions will contain + +@example +Possible completions are: +xml:lang xmlns +@end example + +@noindent +If you input @kbd{xmlns}, the result will be: + +@example +<html xmlns="@point{} +@end example + +@noindent +(If you do @kbd{C-@key{RET}} again, the namespace URI will +be inserted. Should that happen automatically?) +@end itemize + +@node Inserting end-tags +@chapter Inserting end-tags + +The main redundancy in XML syntax is end-tags. nxml-mode provides +several ways to make it easier to enter end-tags. You can use all of +these without a schema. + +You can use @kbd{C-@key{RET}} after @samp{</} +to complete the rest of the end-tag. + +@kbd{C-c C-f} inserts an end-tag for the element containing +point. This command is useful when you want to input the start-tag, +then input the content and finally input the end-tag. The @samp{f} +is mnemonic for finish. + +If you want to keep tags balanced and input the end-tag at the +same time as the start-tag, before inputting the content, then you can +use @kbd{C-c C-i}. This inserts a @samp{>}, then inserts +the end-tag and leaves point before the end-tag. @kbd{C-c C-b} +is similar but more convenient for block-level elements: it puts the +start-tag, point and the end-tag on successive lines, appropriately +indented. The @samp{i} is mnemonic for inline and the +@samp{b} is mnemonic for block. + +Finally, you can customize nxml-mode so that @kbd{/} +automatically inserts the rest of the end-tag when it occurs after +@samp{<}, by doing + +@display +@kbd{M-x customize-variable @key{RET} nxml-slash-auto-complete-flag @key{RET}} +@end display + +@noindent +and then following the instructions in the displayed buffer. + +@node Paragraphs +@chapter Paragraphs + +Emacs has several commands that operate on paragraphs, most +notably @kbd{M-q}. nXML mode redefines these to work in a way +that is useful for XML. The exact rules that are used to find the +beginning and end of a paragraph are complicated; they are designed +mainly to ensure that @kbd{M-q} does the right thing. + +A paragraph consists of one or more complete, consecutive lines. +A group of lines is not considered a paragraph unless it contains some +non-whitespace characters between tags or inside comments. A blank +line separates paragraphs. A single tag on a line by itself also +separates paragraphs. More precisely, if one tag together with any +leading and trailing whitespace completely occupy one or more lines, +then those lines will not be included in any paragraph. + +A start-tag at the beginning of the line (possibly indented) may +be treated as starting a paragraph. Similarly, an end-tag at the end +of the line may be treated as ending a paragraph. The following rules +are used to determine whether such a tag is in fact treated as a +paragraph boundary: + +@itemize @bullet +@item +If the schema does not allow text at that point, then it +is a paragraph boundary. +@item +If the end-tag corresponding to the start-tag is not at +the end of its line, or the start-tag corresponding to the end-tag is +not at the beginning of its line, then it is not a paragraph +boundary. For example, in + +@example +<p>This is a paragraph with an +<emph>emphasized</emph> phrase. +@end example + +@noindent +the @samp{<emph>} start-tag would not be considered as +starting a paragraph, because its corresponding end-tag is not at the +end of the line. +@item +If there is text that is a sibling in element tree, then +it is not a paragraph boundary. For example, in + +@example +<p>This is a paragraph with an +<emph>emphasized phrase that takes one source line</emph> +@end example + +@noindent +the @samp{<emph>} start-tag would not be considered as +starting a paragraph, even though its end-tag is at the end of its +line, because there the text @samp{This is a paragraph with an} +is a sibling of the @samp{emph} element. +@item +Otherwise, it is a paragraph boundary. +@end itemize + +@node Outlining +@chapter Outlining + +nXML mode allows you to display all or part of a buffer as an +outline, in a similar way to Emacs' outline mode. An outline in nXML +mode is based on recognizing two kinds of element: sections and +headings. There is one heading for every section and one section for +every heading. A section contains its heading as or within its first +child element. A section also contains its subordinate sections (its +subsections). The text content of a section consists of anything in a +section that is neither a subsection nor a heading. + +Note that this is a different model from that used by XHTML. +nXML mode's outline support will not be useful for XHTML unless you +adopt a convention of adding a @code{div} to enclose each +section, rather than having sections implicitly delimited by different +@code{h@var{n}} elements. This limitation may be removed +in a future version. + +The variable @code{nxml-section-element-name-regexp} gives +a regexp for the local names (i.e. the part of the name following any +prefix) of section elements. The variable +@code{nxml-heading-element-name-regexp} gives a regexp for the +local names of heading elements. For an element to be recognized +as a section + +@itemize @bullet +@item +its start-tag must occur at the beginning of a line +(possibly indented); +@item +its local name must match +@code{nxml-section-element-name-regexp}; +@item +either its first child element or a descendant of that +first child element must have a local name that matches +@code{nxml-heading-element-name-regexp}; the first such element +is treated as the section's heading. +@end itemize + +@noindent +You can customize these variables using @kbd{M-x +customize-variable}. + +There are three possible outline states for a section: + +@itemize @bullet +@item +normal, showing everything, including its heading, text +content and subsections; each subsection is displayed according to the +state of that subsection; +@item +showing just its heading, with both its text content and +its subsections hidden; all subsections are hidden regardless of their +state; +@item +showing its heading and its subsections, with its text +content hidden; each subsection is displayed according to the state of +that subsection. +@end itemize + +In the last two states, where the text content is hidden, the +heading is displayed specially, in an abbreviated form. An element +like this: + +@example +<section> +<title>Food</title> +<para>There are many kinds of food.</para> +</section> +@end example + +@noindent +would be displayed on a single line like this: + +@example +<-section>Food...</> +@end example + +@noindent +If there are hidden subsections, then a @code{+} will be used +instead of a @code{-} like this: + +@example +<+section>Food...</> +@end example + +@noindent +If there are non-hidden subsections, then the section will instead be +displayed like this: + +@example +<-section>Food... + <-section>Delicious Food...</> + <-section>Distasteful Food...</> +</-section> +@end example + +@noindent +The heading is always displayed with an indent that corresponds to its +depth in the outline, even it is not actually indented in the buffer. +The variable @code{nxml-outline-child-indent} controls how much +a subheading is indented with respect to its parent heading when the +heading is being displayed specially. + +Commands to change the outline state of sections are bound to +key sequences that start with @kbd{C-c C-o} (@kbd{o} is +mnemonic for outline). The third and final key has been chosen to be +consistent with outline mode. In the following descriptions +current section means the section containing point, or, more precisely, +the innermost section containing the character immediately following +point. + +@itemize @bullet +@item +@kbd{C-c C-o C-a} shows all sections in the buffer +normally. +@item +@kbd{C-c C-o C-t} hides the text content +of all sections in the buffer. +@item +@kbd{C-c C-o C-c} hides the text content +of the current section. +@item +@kbd{C-c C-o C-e} shows the text content +of the current section. +@item +@kbd{C-c C-o C-d} hides the text content +and subsections of the current section. +@item +@kbd{C-c C-o C-s} shows the current section +and all its direct and indirect subsections normally. +@item +@kbd{C-c C-o C-k} shows the headings of the +direct and indirect subsections of the current section. +@item +@kbd{C-c C-o C-l} hides the text content of the +current section and of its direct and indirect +subsections. +@item +@kbd{C-c C-o C-i} shows the headings of the +direct subsections of the current section. +@item +@kbd{C-c C-o C-o} hides as much as possible without +hiding the current section's text content; the headings of ancestor +sections of the current section and their child section sections will +not be hidden. +@end itemize + +When a heading is displayed specially, you can use +@key{RET} in that heading to show the text content of the section +in the same way as @kbd{C-c C-o C-e}. + +You can also use the mouse to change the outline state: +@kbd{S-mouse-2} hides the text content of a section in the same +way as@kbd{C-c C-o C-c}; @kbd{mouse-2} on a specially +displayed heading shows the text content of the section in the same +way as @kbd{C-c C-o C-e}; @kbd{mouse-1} on a specially +displayed start-tag toggles the display of subheadings on and +off. + +The outline state for each section is stored with the first +character of the section (as a text property). Every command that +changes the outline state of any section updates the display of the +buffer so that each section is displayed correctly according to its +outline state. If the section structure is subsequently changed, then +it is possible for the display to no longer correctly reflect the +stored outline state. @kbd{C-c C-o C-r} can be used to refresh +the display so it is correct again. + +@node Locating a schema +@chapter Locating a schema + +nXML mode has a configurable set of rules to locate a schema for +the file being edited. The rules are contained in one or more schema +locating files, which are XML documents. + +The variable @samp{rng-schema-locating-files} specifies +the list of the file-names of schema locating files that nXML mode +should use. The order of the list is significant: when file +@var{x} occurs in the list before file @var{y} then rules +from file @var{x} have precedence over rules from file +@var{y}. A filename specified in +@samp{rng-schema-locating-files} may be relative. If so, it will +be resolved relative to the document for which a schema is being +located. It is not an error if relative file-names in +@samp{rng-schema-locating-files} do not not exist. You can use +@kbd{M-x customize-variable @key{RET} rng-schema-locating-files +@key{RET}} to customize the list of schema locating +files. + +By default, @samp{rng-schema-locating-files} list has two +members: @samp{schemas.xml}, and +@samp{@var{dist-dir}/schema/schemas.xml} where +@samp{@var{dist-dir}} is the directory containing the nXML +distribution. The first member will cause nXML mode to use a file +@samp{schemas.xml} in the same directory as the document being +edited if such a file exist. The second member contains rules for the +schemas that are included with the nXML distribution. + +@menu +* Commands for locating a schema:: +* Schema locating files:: +@end menu + +@node Commands for locating a schema +@section Commands for locating a schema + +The command @kbd{C-c C-s C-w} will tell you what schema +is currently being used. + +The rules for locating a schema are applied automatically when +you visit a file in nXML mode. However, if you have just created a new +file and the schema cannot be inferred from the file-name, then this +will not locate the right schema. In this case, you should insert the +start-tag of the root element and then use the command @kbd{C-c +C-a}, which reapplies the rules based on the current content of +the document. It is usually not necessary to insert the complete +start-tag; often just @samp{<@var{name}} is +enough. + +If you want to use a schema that has not yet been added to the +schema locating files, you can use the command @kbd{C-c C-s C-f} +to manually select the file contaiing the schema for the document in +current buffer. Emacs will read the file-name of the schema from the +minibuffer. After reading the file-name, Emacs will ask whether you +wish to add a rule to a schema locating file that persistently +associates the document with the selected schema. The rule will be +added to the first file in the list specified +@samp{rng-schema-locating-files}; it will create the file if +necessary, but will not create a directory. If the variable +@samp{rng-schema-locating-files} has not been customized, this +means that the rule will be added to the file @samp{schemas.xml} +in the same directory as the document being edited. + +The command @kbd{C-c C-s C-t} allows you to select a schema by +specifying an identifier for the type of the document. The schema +locating files determine the available type identifiers and what +schema is used for each type identifier. This is useful when it is +impossible to infer the right schema from either the file-name or the +content of the document, even though the schema is already in the +schema locating file. A situation in which this can occur is when +there are multiple variants of a schema where all valid documents have +the same document element. For example, XHTML has Strict and +Transitional variants. In a situation like this, a schema locating file +can define a type identifier for each variant. As with @kbd{C-c +C-s C-f}, Emacs will ask whether you wish to add a rule to a schema +locating file that persistently associates the document with the +specified type identifier. + +The command @kbd{C-c C-s C-l} adds a rule to a schema +locating file that persistently associates the document with +the schema that is currently being used. + +@node Schema locating files +@section Schema locating files + +Each schema locating file specifies a list of rules. The rules +from each file are appended in order. To locate a schema each rule is +applied in turn until a rule matches. The first matching rule is then +used to determine the schema. + +Schema locating files are designed to be useful for other +applications that need to locate a schema for a document. In fact, +there is nothing specific to locating schemas in the design; it could +equally well be used for locating a stylesheet. + +@menu +* Schema locating file syntax basics:: +* Using the document's URI to locate a schema:: +* Using the document element to locate a schema:: +* Using type identifiers in schema locating files:: +* Using multiple schema locating files:: +@end menu + +@node Schema locating file syntax basics +@subsection Schema locating file syntax basics + +There is a schema for schema locating files in the file +@samp{locate.rnc} in the schema directory. Schema locating +files must be valid with respect to this schema. + +The document element of a schema locating file must be +@samp{locatingRules} and the namespace URI must be +@samp{http://thaiopensource.com/ns/locating-rules/1.0}. The +children of the document element specify rules. The order of the +children is the same as the order of the rules. Here's a complete +example of a schema locating file: + +@example +<?xml version="1.0"?> +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml.rnc"/> + <documentElement localName="book" uri="docbook.rnc"/> +</locatingRules> +@end example + +@noindent +This says to use the schema @samp{xhtml.rnc} for a document with +namespace @samp{http://www.w3.org/1999/xhtml}, and to use the +schema @samp{docbook.rnc} for a document whose local name is +@samp{book}. If the document element had both a namespace URI +of @samp{http://www.w3.org/1999/xhtml} and a local name of +@samp{book}, then the matching rule that comes first will be +used and so the schema @samp{xhtml.rnc} would be used. There is +no precedence between different types of rule; the first matching rule +of any type is used. + +As usual with XML-related technologies, resources are identified +by URIs. The @samp{uri} attribute identifies the schema by +specifying the URI. The URI may be relative. If so, it is resolved +relative to the URI of the schema locating file that contains +attribute. This means that if the value of @samp{uri} attribute +does not contain a @samp{/}, then it will refer to a filename in +the same directory as the schema locating file. + +@node Using the document's URI to locate a schema +@subsection Using the document's URI to locate a schema + +A @samp{uri} rule locates a schema based on the URI of the +document. The @samp{uri} attribute specifies the URI of the +schema. The @samp{resource} attribute can be used to specify +the schema for a particular document. For example, + +@example +<uri resource="spec.xml" uri="docbook.rnc"/> +@end example + +@noindent +specifies that that the schema for @samp{spec.xml} is +@samp{docbook.rnc}. + +The @samp{pattern} attribute can be used instead of the +@samp{resource} attribute to specify the schema for any document +whose URI matches a pattern. The pattern has the same syntax as an +absolute or relative URI except that the path component of the URI can +use a @samp{*} character to stand for zero or more characters +within a path segment (i.e. any character other @samp{/}). +Typically, the URI pattern looks like a relative URI, but, whereas a +relative URI in the @samp{resource} attribute is resolved into a +particular absolute URI using the base URI of the schema locating +file, a relative URI pattern matches if it matches some number of +complete path segments of the document's URI ending with the last path +segment of the document's URI. For example, + +@example +<uri pattern="*.xsl" uri="xslt.rnc"/> +@end example + +@noindent +specifies that the schema for documents with a URI whose path ends +with @samp{.xsl} is @samp{xslt.rnc}. + +A @samp{transformURI} rule locates a schema by +transforming the URI of the document. The @samp{fromPattern} +attribute specifies a URI pattern with the same meaning as the +@samp{pattern} attribute of the @samp{uri} element. The +@samp{toPattern} attribute is a URI pattern that is used to +generate the URI of the schema. Each @samp{*} in the +@samp{toPattern} is replaced by the string that matched the +corresponding @samp{*} in the @samp{fromPattern}. The +resulting string is appended to the initial part of the document's URI +that was not explicitly matched by the @samp{fromPattern}. The +rule matches only if the transformed URI identifies an existing +resource. For example, the rule + +@example +<transformURI fromPattern="*.xml" toPattern="*.rnc"/> +@end example + +@noindent +would transform the URI @samp{file:///home/jjc/docs/spec.xml} +into the URI @samp{file:///home/jjc/docs/spec.rnc}. Thus, this +rule specifies that to locate a schema for a document +@samp{@var{foo}.xml}, Emacs should test whether a file +@samp{@var{foo}.rnc} exists in the same directory as +@samp{@var{foo}.xml}, and, if so, should use it as the +schema. + +@node Using the document element to locate a schema +@subsection Using the document element to locate a schema + +A @samp{documentElement} rule locates a schema based on +the local name and prefix of the document element. For example, a rule + +@example +<documentElement prefix="xsl" localName="stylesheet" uri="xslt.rnc"/> +@end example + +@noindent +specifies that when the name of the document element is +@samp{xsl:stylesheet}, then @samp{xslt.rnc} should be used +as the schema. Either the @samp{prefix} or +@samp{localName} attribute may be omitted to allow any prefix or +local name. + +A @samp{namespace} rule locates a schema based on the +namespace URI of the document element. For example, a rule + +@example +<namespace ns="http://www.w3.org/1999/XSL/Transform" uri="xslt.rnc"/> +@end example + +@noindent +specifies that when the namespace URI of the document is +@samp{http://www.w3.org/1999/XSL/Transform}, then +@samp{xslt.rnc} should be used as the schema. + +@node Using type identifiers in schema locating files +@subsection Using type identifiers in schema locating files + +Type identifiers allow a level of indirection in locating the +schema for a document. Instead of associating the document directly +with a schema URI, the document is associated with a type identifier, +which is in turn associated with a schema URI. nXML mode does not +constrain the format of type identifiers. They can be simply strings +without any formal structure or they can be public identifiers or +URIs. Note that these type identifiers have nothing to do with the +DOCTYPE declaration. When comparing type identifiers, whitespace is +normalized in the same way as with the @samp{xsd:token} +datatype: leading and trailing whitespace is stripped; other sequences +of whitespace are normalized to a single space character. + +Each of the rules described in previous sections that uses a +@samp{uri} attribute to specify a schema, can instead use a +@samp{typeId} attribute to specify a type identifier. The type +identifier can be associated with a URI using a @samp{typeId} +element. For example, + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <namespace ns="http://www.w3.org/1999/xhtml" typeId="XHTML"/> + <typeId id="XHTML" typeId="XHTML Strict"/> + <typeId id="XHTML Strict" uri="xhtml-strict.rnc"/> + <typeId id="XHTML Transitional" uri="xhtml-transitional.rnc"/> +</locatingRules> +@end example + +@noindent +declares three type identifiers @samp{XHTML} (representing the +default variant of XHTML to be used), @samp{XHTML Strict} and +@samp{XHTML Transitional}. Such a schema locating file would +use @samp{xhtml-strict.rnc} for a document whose namespace is +@samp{http://www.w3.org/1999/xhtml}. But it is considerably +more flexible than a schema locating file that simply specified + +@example +<namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml-strict.rnc"/> +@end example + +@noindent +A user can easily use @kbd{C-c C-s C-t} to select between XHTML +Strict and XHTML Transitional. Also, a user can easily add a catalog + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <typeId id="XHTML" typeId="XHTML Transitional"/> +</locatingRules> +@end example + +@noindent +that makes the default variant of XHTML be XHTML Transitional. + +@node Using multiple schema locating files +@subsection Using multiple schema locating files + +The @samp{include} element includes rules from another +schema locating file. The behavior is exactly as if the rules from +that file were included in place of the @samp{include} element. +Relative URIs are resolved into absolute URIs before the inclusion is +performed. For example, + +@example +<include rules="../rules.xml"/> +@end example + +@noindent +includes the rules from @samp{rules.xml}. + +The process of locating a schema takes as input a list of schema +locating files. The rules in all these files and in the files they +include are resolved into a single list of rules, which are applied +strictly in order. Sometimes this order is not what is needed. +For example, suppose you have two schema locating files, a private +file + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml.rnc"/> +</locatingRules> +@end example + +@noindent +followed by a public file + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <transformURI pathSuffix=".xml" replacePathSuffix=".rnc"/> + <namespace ns="http://www.w3.org/1999/XSL/Transform" typeId="XSLT"/> +</locatingRules> +@end example + +@noindent +The effect of these two files is that the XHTML @samp{namespace} +rule takes precedence over the @samp{transformURI} rule, which +is almost certainly not what is needed. This can be solved by adding +an @samp{applyFollowingRules} to the private file. + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <applyFollowingRules ruleType="transformURI"/> + <namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml.rnc"/> +</locatingRules> +@end example + +@node DTDs +@chapter DTDs + +nxml-mode is designed to support the creation of standalone XML +documents that do not depend on a DTD. Although it is common practice +to insert a DOCTYPE declaration referencing an external DTD, this has +undesirable side-effects. It means that the document is no longer +self-contained. It also means that different XML parsers may interpret +the document in different ways, since the XML Recommendation does not +require XML parsers to read the DTD. With DTDs, it was impractical to +get validation without using an external DTD or reference to an +parameter entity. With RELAX NG and other schema languages, you can +simulataneously get the benefits of validation and standalone XML +documents. Therefore, I recommend that you do not reference an +external DOCTYPE in your XML documents. + +One problem is entities for characters. Typically, as well as +providing validation, DTDs also provide a set of character entities +for documents to use. Schemas cannot provide this functionality, +because schema validation happens after XML parsing. The recommended +solution is to either use the Unicode characters directly, or, if this +is impractical, use character references. nXML mode supports this by +providing commands for entering characters and character references +using the Unicode names, and can display the glyph corresponding to a +character reference. + +@node Limitations +@chapter Limitations + +nXML mode has some limitations: + +@itemize @bullet +@item +DTD support is limited. Internal parsed general entities declared +in the internal subset are supported provided they do not contain +elements. Other usage of DTDs is ignored. +@item +The restrictions on RELAX NG schemas in section 7 of the RELAX NG +specification are not enforced. +@item +Unicode support has problems. This stems mostly from the fact that +the XML (and RELAX NG) character model is based squarely on Unicode, +whereas the Emacs character model is not. Emacs 22 is slated to have +full Unicode support, which should improve the situation here. +@end itemize + +@bye
--- a/etc/ChangeLog Fri Nov 23 19:24:04 2007 +0000 +++ b/etc/ChangeLog Fri Nov 23 19:38:49 2007 +0000 @@ -1,5 +1,7 @@ 2007-11-23 Mark A. Hershberger <mah@everybody.org> + * NXML-NEWS: New File. + * schema: Initial merge of nxml. 2007-11-22 Francesco Potort,Al(B <pot@gnu.org>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/NXML-NEWS Fri Nov 23 19:38:49 2007 +0000 @@ -0,0 +1,199 @@ +20041004 +-------- + +Support for outlining has been added. See the manual for more details. + +C-u C-c C-n goes to the first error. + +20040910 +-------- + +C-c RET splits the current element as in PSGML. + +20040908 +-------- + +Indentation has been rewritten. Indentation of attribute names and +values should work better. The default value of +`nxml-attribute-indent' has been changed to 4. + +Syntax highlighting with a dark background should now work. + +20040726 +-------- + +The attribute pathSuffix on the uri element in schema locating files +has been replaced by a more general pattern attribute. The +transformURI element now has required fromPattern and toPattern +attributes. + +The schema related bindings have been changed to use C-c C-s as a prefix +as follows: + + C-c C-s => C-c C-s C-f (f for file) + C-c C-a => C-c C-s C-a + C-c C-t => C-c C-s C-t + C-c C-l => C-c C-s C-l + C-c C-w => C-c C-s C-w + +There's now an XML menu on the menu-bar. + +20031031 +-------- + +C-c C-d "dynamically" chooses a tag to put around the word before +point, rather like M-/. + +The mechanism for locating the schema has changed completely. The new +mechanism is described in the manual. Any existing customizations of +`rng-auto-element-alist' or `rng-auto-file-name-alist' will no longer +be effective. + +C-c C-a is now bound to rng-auto-set-schema. + +20031018 +-------- + +Unicode names can be used to insert characters with the new command +C-c C-u. Normally, this inserts a character reference. With a prefix +arg (i.e. C-u C-c C-u), it inserts the character directly. You can +customize `nxml-enabled-unicode-blocks' to control what Unicode blocks +are used for completing names. + +Extra information is displayed for character references. The Unicode +name is displayed in a tooltip. A glyph for the referenced character +is displayed in a distinguished face following the character +reference; this can be disabled by customizing +`nxml-char-ref-display-glyph-flag'. The command +`nxml-toggle-char-ref-extra-display' dynamically toggles the display +of extra information for character references for a particular buffer. +This can be used if the display of extra information is causing +performance problems. nXML mode tries to figure out which glyphs can +be displayed. Unfortunately Emacs doesn't provide the primitives +necessary to do this properly, so nXML mode has to guess and will +sometimes guess wrong. The hook `nxml-glyph-set-hook' can be used to +change nXML mode's guess. + +New command C-c C-w says what schema is being used. + +C-c C-s now turns on validation if it is not already on. + +20030928 +-------- + +M-q has been implemented so that it works reasonably with XML. Other +paragraph-related commands (M-{, M-}, M-h) have also been implemented. + +New command M-x rng-auto-set-schema to set the schema based on the +buffer's current contents and file-name. This is called automatically +when rng-validate-mode is first enabled. + +There's now a C-M-d to go with C-M-u. C-M-d moves forward down into +the content of an element. C-M-n and C-M-p move to the next or +previous element. + +By default, the sexp commands (C-M-f, C-M-b, C-M-k, C-M-SPC) operate +on tags rather than elements. To restore the old behaviour, +customize nxml-sexp-element-flag. + +The file TUTORIAL has been replaced by nxml-mode.info; this is in info +format and can be read using Emacs. The source is maintained in a +simple, ad-hoc XML format. + +20030915 +-------- + +XML encodings should now work properly. When saving a buffer, +nxml-mode arranges to use the encoding declared in the XML +declaration. If there is no encoding declared, then nxml-mode will +use utf-8 or utf-16 according to the user options +`nxml-prefer-utf-16-to-utf-8-flag' and +`nxml-prefer-utf-16-little-to-big-endian-flag'. If the chosen encoding +cannot encode all the characters in the buffer, nxml-mode will +complain and give the user an opportunity to use an encoding that can. + +A new command C-c C-x inserts an XML declaration. + +The option `nxml-auto-insert-xml-declaration-flag' automatically +inserts an XML declaration in new files. + +The `nxml-default-buffer-file-coding-system' option allows a different +default buffer-file-coding-system for nXML mode buffers. This affects +what XML declaration is inserted. + +Encoding names in XML declarations are now validated by +rng-validate-mode. + +RDF/XML schema was updated to version in 05 September 2003 WD. + +20030912 +-------- + +The tutorial has a new section on inserting end-tags. + +By default </ no longer automatically inserts the rest of the end-tag. +You can do + + M-x customize-variable RET nxml-slash-auto-complete-flag RET + +and then follow the instructions displayed in the buffer to get the +old behaviour. + +Completion after </ will complete the rest of the end-tag. Completion +after < will include the end-tag in the possibilities if allowed by +the schema. + +You can use C-c C-i instead of > to close the start-tag of an +inline-level element. After inserting the >, it will insert the +end-tag and leave point before the end-tag. The `i' is supposed to be +mnemonic for `inline'. C-c C-b is similar, but for block elements: the +start-tag, point and the end-tag will all be on separate lines. + +The binding for inserting an end-tag has changed from C-c / to C-c C-f +to comply with Emacs guidelines about what keys major modes should +bind. The `f' is supposed to be mnemonic for `finish'. + +Completion always puts point after all the characters it inserts. It +doesn't insert a `>' after completing a start-tag name. + +Completion no longer completes CDATA section and comment delimiters. + +The nxml-start-auto-coding command enables auto-detection of a file's +encoding as specified in the XML Recommendation for files that use +nxml-mode; rng-auto.el calls this. + +20030906 +-------- + +Validation messages applicable to point are displayed automatically. + +Completion can deal with prefixes that haven't yet been declared. + +rng-preferred-prefix-alist variable added. + +Namespace URIs can be completed. + +xmlns and xmlns:* attributes can be completed. + +CDATA section and comment delimiters can be completed. + +Each kind of completion has its own history. + +Completion function moved to nxml-mode; uses a hook to allow +schema-sensitive completion. Completion function bound to C-return. +Also bound to M-TAB as before, unless +nxml-bind-meta-tab-to-complete-flag is nil. When there is a window +system, nxml-bind-meta-tab-to-complete-flag is nil by default, This +avoid problems with M-TAB, which is not passed through by several +window systems/managers. + +TUTORIAL file added. + +NEWS file added. + +Bug fixes. + +20030901 +-------- + +Initial release.
--- a/lisp/nxml/Makefile Fri Nov 23 19:24:04 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -EXTRA=README NEWS VERSION TODO COPYING Makefile rng-auto.el \ - nxml-mode.xml nxml-mode.rnc nxml-mode.texi nxml-mode.info dir \ - test.valid.xml test.invalid.xml - -SRC=nxml-rap.el nxml-outln.el nxml-mode.el nxml-parse.el nxml-enc.el \ - nxml-uchnm.el nxml-glyph.el nxml-maint.el nxml-util.el nxml-ns.el \ - rng-dt.el rng-valid.el rng-pttrn.el rng-xsd.el rng-cmpct.el \ - rng-match.el rng-nxml.el rng-util.el rng-loc.el rng-uri.el \ - rng-parse.el rng-maint.el xsd-regexp.el xmltok.el - -ELC=nxml-rap.elc nxml-outln.elc nxml-mode.elc nxml-parse.elc nxml-enc.elc \ - nxml-uchnm.elc nxml-glyph.elc nxml-maint.elc nxml-util.elc nxml-ns.elc \ - rng-dt.elc rng-valid.elc rng-pttrn.elc rng-xsd.elc rng-cmpct.elc \ - rng-match.elc rng-nxml.elc rng-util.elc rng-loc.elc rng-uri.elc \ - rng-parse.elc rng-maint.elc xsd-regexp.elc xmltok.elc - -FILESTOCLEAN=stamp-byte-compile $(ELC) VERSION TAGS \ - nxml-mode.texi nxml-mode.info dir - -EMACS=emacs -ETAGS=etags -MAKEINFO=makeinfo -INSTALL-INFO=install-info -PACKAGE=nxml-mode - -stamp-byte-compile: $(SRC) - -rm -f $(ELC) - $(EMACS) -batch -l rng-auto.el -f rng-byte-compile-load - touch $(@) - -all: stamp-byte-compile nxml-mode.info - -dir: nxml-mode.info - rm -f $@ - $(INSTALL-INFO) $< $@ - -info: nxml-mode.info - -nxml-mode.info: nxml-mode.texi - $(MAKEINFO) $< - -nxml-mode.texi: nxml-mode.xml - $(EMACS) -batch -l rng-auto.el -f rng-format-manual - -VERSION: stamp-byte-compile rng-auto.el - $(EMACS) -batch -l rng-auto.el -f rng-write-version - -TAGS: $(SRC) - $(ETAGS) $(SRC) - -dist: stamp-byte-compile $(EXTRA) - @version=`cat VERSION`; \ - set -e; \ - echo Making $(PACKAGE)-$$version.tar.gz; \ - rm -fr $(PACKAGE)-$$version; \ - mkdir $(PACKAGE)-$$version; \ - cd $(PACKAGE)-$$version; \ - for f in $(EXTRA) $(SRC) $(ELC); do \ - ln -s ../$$f .; \ - done; \ - mkdir schema; \ - cd schema; \ - for f in ../../schema/*.rnc ../../schema/*.xml; do \ - ln -s $$f .; \ - done; \ - cd ..; \ - mkdir char-name; \ - mkdir char-name/unicode; \ - cd char-name/unicode; \ - for f in ../../../char-name/unicode/*-*.el; do \ - ln -s $$f .; \ - done; \ - cd ../../..; \ - tar cfhz $(PACKAGE)-$$version.tar.gz $(PACKAGE)-$$version; \ - rm -fr $(PACKAGE)-$$version - -clean: - -rm -f $(FILESTOCLEAN) - -.PHONY: all clean info
--- a/lisp/nxml/NEWS Fri Nov 23 19:24:04 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -20041004 --------- - -Support for outlining has been added. See the manual for more details. - -C-u C-c C-n goes to the first error. - -20040910 --------- - -C-c RET splits the current element as in PSGML. - -20040908 --------- - -Indentation has been rewritten. Indentation of attribute names and -values should work better. The default value of -`nxml-attribute-indent' has been changed to 4. - -Syntax highlighting with a dark background should now work. - -20040726 --------- - -The attribute pathSuffix on the uri element in schema locating files -has been replaced by a more general pattern attribute. The -transformURI element now has required fromPattern and toPattern -attributes. - -The schema related bindings have been changed to use C-c C-s as a prefix -as follows: - - C-c C-s => C-c C-s C-f (f for file) - C-c C-a => C-c C-s C-a - C-c C-t => C-c C-s C-t - C-c C-l => C-c C-s C-l - C-c C-w => C-c C-s C-w - -There's now an XML menu on the menu-bar. - -20031031 --------- - -C-c C-d "dynamically" chooses a tag to put around the word before -point, rather like M-/. - -The mechanism for locating the schema has changed completely. The new -mechanism is described in the manual. Any existing customizations of -`rng-auto-element-alist' or `rng-auto-file-name-alist' will no longer -be effective. - -C-c C-a is now bound to rng-auto-set-schema. - -20031018 --------- - -Unicode names can be used to insert characters with the new command -C-c C-u. Normally, this inserts a character reference. With a prefix -arg (i.e. C-u C-c C-u), it inserts the character directly. You can -customize `nxml-enabled-unicode-blocks' to control what Unicode blocks -are used for completing names. - -Extra information is displayed for character references. The Unicode -name is displayed in a tooltip. A glyph for the referenced character -is displayed in a distinguished face following the character -reference; this can be disabled by customizing -`nxml-char-ref-display-glyph-flag'. The command -`nxml-toggle-char-ref-extra-display' dynamically toggles the display -of extra information for character references for a particular buffer. -This can be used if the display of extra information is causing -performance problems. nXML mode tries to figure out which glyphs can -be displayed. Unfortunately Emacs doesn't provide the primitives -necessary to do this properly, so nXML mode has to guess and will -sometimes guess wrong. The hook `nxml-glyph-set-hook' can be used to -change nXML mode's guess. - -New command C-c C-w says what schema is being used. - -C-c C-s now turns on validation if it is not already on. - -20030928 --------- - -M-q has been implemented so that it works reasonably with XML. Other -paragraph-related commands (M-{, M-}, M-h) have also been implemented. - -New command M-x rng-auto-set-schema to set the schema based on the -buffer's current contents and file-name. This is called automatically -when rng-validate-mode is first enabled. - -There's now a C-M-d to go with C-M-u. C-M-d moves forward down into -the content of an element. C-M-n and C-M-p move to the next or -previous element. - -By default, the sexp commands (C-M-f, C-M-b, C-M-k, C-M-SPC) operate -on tags rather than elements. To restore the old behaviour, -customize nxml-sexp-element-flag. - -The file TUTORIAL has been replaced by nxml-mode.info; this is in info -format and can be read using Emacs. The source is maintained in a -simple, ad-hoc XML format. - -20030915 --------- - -XML encodings should now work properly. When saving a buffer, -nxml-mode arranges to use the encoding declared in the XML -declaration. If there is no encoding declared, then nxml-mode will -use utf-8 or utf-16 according to the user options -`nxml-prefer-utf-16-to-utf-8-flag' and -`nxml-prefer-utf-16-little-to-big-endian-flag'. If the chosen encoding -cannot encode all the characters in the buffer, nxml-mode will -complain and give the user an opportunity to use an encoding that can. - -A new command C-c C-x inserts an XML declaration. - -The option `nxml-auto-insert-xml-declaration-flag' automatically -inserts an XML declaration in new files. - -The `nxml-default-buffer-file-coding-system' option allows a different -default buffer-file-coding-system for nXML mode buffers. This affects -what XML declaration is inserted. - -Encoding names in XML declarations are now validated by -rng-validate-mode. - -RDF/XML schema was updated to version in 05 September 2003 WD. - -20030912 --------- - -The tutorial has a new section on inserting end-tags. - -By default </ no longer automatically inserts the rest of the end-tag. -You can do - - M-x customize-variable RET nxml-slash-auto-complete-flag RET - -and then follow the instructions displayed in the buffer to get the -old behaviour. - -Completion after </ will complete the rest of the end-tag. Completion -after < will include the end-tag in the possibilities if allowed by -the schema. - -You can use C-c C-i instead of > to close the start-tag of an -inline-level element. After inserting the >, it will insert the -end-tag and leave point before the end-tag. The `i' is supposed to be -mnemonic for `inline'. C-c C-b is similar, but for block elements: the -start-tag, point and the end-tag will all be on separate lines. - -The binding for inserting an end-tag has changed from C-c / to C-c C-f -to comply with Emacs guidelines about what keys major modes should -bind. The `f' is supposed to be mnemonic for `finish'. - -Completion always puts point after all the characters it inserts. It -doesn't insert a `>' after completing a start-tag name. - -Completion no longer completes CDATA section and comment delimiters. - -The nxml-start-auto-coding command enables auto-detection of a file's -encoding as specified in the XML Recommendation for files that use -nxml-mode; rng-auto.el calls this. - -20030906 --------- - -Validation messages applicable to point are displayed automatically. - -Completion can deal with prefixes that haven't yet been declared. - -rng-preferred-prefix-alist variable added. - -Namespace URIs can be completed. - -xmlns and xmlns:* attributes can be completed. - -CDATA section and comment delimiters can be completed. - -Each kind of completion has its own history. - -Completion function moved to nxml-mode; uses a hook to allow -schema-sensitive completion. Completion function bound to C-return. -Also bound to M-TAB as before, unless -nxml-bind-meta-tab-to-complete-flag is nil. When there is a window -system, nxml-bind-meta-tab-to-complete-flag is nil by default, This -avoid problems with M-TAB, which is not passed through by several -window systems/managers. - -TUTORIAL file added. - -NEWS file added. - -Bug fixes. - -20030901 --------- - -Initial release.
--- a/lisp/nxml/README Fri Nov 23 19:24:04 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -This is a new major mode for GNU Emacs for editing XML documents. It -supports editing well-formed XML documents and also provides -schema-sensitive editing of XML documents using RELAX NG Compact -Syntax. - -To use this, you need GNU Emacs version 21.x, preferably 21.3. GNU -Emacs version 20 will not work properly, nor will XEmacs. - -To get started, do - - M-x load-file <RET> rng-auto.el <RET> - -This defines the necessary autoloads. Now, visit a file containing -an XML document, and do - - M-x nxml-mode - -Now do - - C-h m - -for information on how to use nxml-mode. - -The beginnings of a manual are in nxml-mode.info. You can read this -using - - C-u M-x info RET nxml-mode.info RET - -It's also installed as an entry at the end of the top-level info -directory. So you can read it with C-h i as usual. - -You can use test.valid.xml and test.invalid.xml as examples of valid -and invalid XML documents. - -To get things automatically loaded each time you start Emacs, add - - (load "~/nxml-mode-200YMMDD/rng-auto.el") - -to your .emacs, where ~/nxml-mode-200YMMDD is the directory containing -the .elc files. Note that rng-auto.el does not load all of the -nxml-mode code; it merely sets things up so that all the features of -nxml-mode will be autoloaded properly. You should not try to autoload -rng-auto.el itself. - -To use nxml-mode automatically for files with an extension of xml, -xsl, rng or xhtml, add - - (setq auto-mode-alist - (cons '("\\.\\(xml\\|xsl\\|rng\\|xhtml\\)\\'" . nxml-mode) - auto-mode-alist)) - -to your .emacs. - -If you edit XML using iso-8859-N encodings other than iso-8859-1 and -you are running Emacs 21.3 or later, then I recommend enabling -unify-8859-on-decoding-mode, by adding - - (unify-8859-on-decoding-mode) - -to you .emacs. - -To get validation and schema-sensitive editing, you need a RELAX NG -Compact Syntax (RNC) schema for you document. The schema directory -includes some schemas for popular document types. - -For more on RELAX NG, see - - http://relaxng.org - -For a tutorial on RELAX NG Compact Syntax, see - - http://relaxng.org/compact-tutorial.html - -For automatically creating RNC schemas, I recommend my Trang program: - - http://www.thaiopensource.com/relaxng/trang.html - -You can use this to - -- infer an RNC schema from an instance document; - -- convert a DTD to an RNC schema; - -- convert a RELAX NG XML syntax schema to an RNC schema. - -To convert a RELAX NG XML syntax (.rng) schema to a RNC schema, you -can also use the XSLT stylesheet from - - http://www.pantor.com/download.html - -To convert a W3C XML Schema to an RNC schema, you need first to -convert it to RELAX NG XML syntax using Sun's RELAX NG converter tool -rngconv (built on top of MSV). See - - https://msv.dev.java.net/ - -The file NEWS describes recent changes. - -Please use the list - - http://groups.yahoo.com/group/emacs-nxml-mode/ - -for bug reports, discussion. I will announce all new versions there. - -James Clark -http://www.jclark.com/contact.html