当前位置: 首页 > news >正文

昆明网站建设推荐谁好呢海外 网站 推广

昆明网站建设推荐谁好呢,海外 网站 推广,关于网站建设的案例分析,视觉传达设计就业前景Dare Obasanjo Microsoft Corporation 2002 年 5 月 20 日 本文是有望长期发表的系列文章的第一篇#xff0c;这些文章专门阐释由 Microsoft 支持的 W3C XML 技术的更微妙的内容。尽管 XML 的核心仍相当简单#xff0c;但是围绕它的技术已经变得日益复杂#xff0c;而且其中…Dare Obasanjo Microsoft Corporation 2002 年 5 月 20 日 本文是有望长期发表的系列文章的第一篇这些文章专门阐释由 Microsoft 支持的 W3C XML 技术的更微妙的内容。尽管 XML 的核心仍相当简单但是围绕它的技术已经变得日益复杂而且其中的一些技术需要相当多的专业知识才能掌握。本文以及随后的其他文章旨在将各种 W3C XML 建议中的信息提取为便于理解的信息供 XML 用户和开发人员使用。 在这一系列文章中第一篇是有关 XML— 命名空间常被误解的方面。XML 命名空间是 W3C 的大部分 XML 建议和工作草案包括 XPath、XML 架构、XSLT、XQuery、SOAP、RDF、DOM 和 XHTML中不可缺少的一方面。对于任何使用 XML 的人来说了解命名空间如何工作以及它们如何与依赖它们的许多其他 W3C 技术进行交互非常重要。 本文介绍 XML 命名空间的详细内容以及它们在支持命名空间的许多 XML 技术上的分支。 本页内容 XML 命名空间概述XPath、XSLT 和命名空间XML 命名空间警告命名空间的未来 XML 命名空间概述 随着 XML 在 Internet 上的使用日益广泛能够创建可组合和重用的标记词汇表方法类似于软件模块的组合和重用这一优势变得日益重要。如果已经存在一个定义完善的标记词汇表用于描述硬币集合、程序配置文件或快餐店的菜单则重用它会比从头设计一个更有意义。将多个现有的词汇表组合在一起以便创建“事物的整体比它各个部分的总和还大”的新词汇表也成为 XML 用户开始需要的一个功能。 但是在同一个文档中来自不同词汇表的同一个标记特别是 XML 元素和属性可能具有不同的语义这最终会产生问题。XML 的高度扩展性以及它在 Internet 上的广泛应用排除了只是将保留的元素或属性名称指定为此问题的解决方案。 W3C XML命名空间建议旨在创建一个机制以便 XML 文档中来自不同标记词汇表的元素和属性可以被明确标识和组合而无需处理所产生的问题。XML 命名空间建议提供了一种方法以便基于处理要求对 XML 文档中的各个项目进行分区而无需针对应当如何命名这些项目设置过多的限制。例如名为 template、output 和 stylesheet 的元素可以出现在 XSLT 样式表中而对于它们是转换指令还是转换的可能输出没有二义性。 XML 命名空间是一组由 统一资源标识符 (URI) 引用标识的名称这些名称在 XML 文档中用作元素名称和属性名称。 命名空间声明 图 1. 利用命名空间的 XML 代码片段 命名空间声明通常用于将命名空间 URI 映射到特定的前缀。前缀-命名空间映射的作用域包括命名空间声明作用的元素及其所有的子级。前缀为 xmlns: 的属性声明是命名空间声明。类似属性声明的值应当是作为命名空间名称的命名空间 URI。 在下面的示例 XML 文档中根元素包含一个将前缀 bk 映射到命名空间名称 urn:xmlns:25hoursaday-com:bookstore 的命名空间声明它的子元素包含一个 inventory 元素inventory 元素中包含一个将前缀 inv 映射到命名空间名称 urn:xmlns:25hoursaday-com:inventory-tracking 的命名空间声明。 bk:bookstore xmlns:bkurn:xmlns:25hoursaday-com:bookstore bk:book bk:titleLord of the Rings/bk:title bk:authorJ.R.R. Tolkien/bk:author inv:inventory statusin-stock isbn0345340426 xmlns:invurn:xmlns:25hoursaday-com:inventory-tracking / /bk:book /bk:bookstore在上例中urn:xmlns:25hoursaday-com:bookstore 命名空间名称的命名空间声明作用域是整个 bk:bookstore 元素而 urn:xmlns:25hoursaday-com:inventory-tracking 的命名空间声明作用域是 inv:inventory 元素。能够识别命名空间的处理器可以独立处理来自这两个命名空间的项目这会使其能够对 XML 文档执行多层处理。例如RDDL 文档是有效的 XHTML 文档这些文档不仅可以由 Web 浏览器呈现而且还包含使用 http://www.rddl.org 命名空间中元素的信息该命名空间可用于查找有关 XML 命名空间成员的机读资源。 应当注意的是按照定义前缀 xml 绑定到 XML 命名空间名称而且这个特殊的命名空间自动在每个格式规范的 XML 文档中对文档作用域预先进行声明。 默认命名空间 有关命名空间声明的上一节不是完整的因为它未考虑默认命名空间。默认命名空间声明是一个属性声明该属性声明的名称是 xmlns其值是作为命名空间名称的命名空间 URI。 默认命名空间声明指定其作用域中所有不带前缀的元素名称都来自声明的命名空间。下面的书店示例使用默认命名空间而不使用前缀-命名空间映射。 bookstore xmlnsurn:xmlns:25hoursaday-com:bookstore book titleLord of the Rings/title authorJ.R.R. Tolkien/author inv:inventory statusin-stock isbn0345340426 xmlns:invurn:xmlns:25hoursaday-com:inventory-tracking / /book /bookstore在上例中除 inv:inventory 元素以外的所有元素都属于 urn:xmlns:25hoursaday-com:bookstore 命名空间。默认命名空间的主要目的是缩短使用命名空间的 XML 文档。但是如果对于元素名称使用默认命名空间而不使用显式映射的前缀可能会导致混淆因为文档中的元素不是明显地属于命名空间的作用域。 此外与常规的命名空间声明不同的是默认命名空间声明可以通过将 xmlns 属性的值设置为空字符串来取消声明。应当避免取消对默认命名空间声明的声明因为这一做法可能导致在文档的一部分中具有属于某个命名空间且不带前缀的名称但是在另一部分中却没有。例如在下面的文档中只有 bookstore 元素来自 urn:xmlns:25hoursaday-com:bookstore而其他不带前缀的元素没有命名空间名称。 bookstore xmlnsurn:xmlns:25hoursaday-com:bookstore book xmlns titleLord of the Rings/title authorJ.R.R. Tolkien/author inv:inventory statusin-stock isbn0345340426 xmlns:invurn:xmlns:25hoursaday-com:inventory-tracking / /book /bookstore应当避免这一做法因为它对于 XML 文档的读者会产生非常容易混淆的情况。有关对命名空间声明取消声明的详细信息请参阅“命名空间的未来”一节。 限定名称和扩展名称 限定名称又称为 QName是一个名为本地名称的 XML 名称它的前面可以有另一个名为前缀的 XML 名称和一个冒号 (:)字符。用作前缀的 XML 名称和本地名称必须与产生的 NCName 相匹配这意味着它们不得包含冒号字符。限定名称的前缀必须已经通过作用域内的命名空间声明将前缀映射到命名空间 URI映射到命名空间 URI。限定名称可以用作属性名称也可以用作元素名称。 尽管 QName 是重要的助记指导可以帮助确定文档中的元素和属性是从哪个命名空间派生的但是它们对于能够识别 XML 的处理器无关紧要。例如下面的三个 XML 文档将被一系列 XML 技术当然包括 XML 架构验证程序以同样的方式处理。 xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema xs:complexType id123 namefooType/ /xs:schema xsd:schema xmlns:xsdhttp://www.w3.org/2001/XMLSchema xsd:complexType id123 namefooType/ /xsd:schema schema xmlnshttp://www.w3.org/2001/XMLSchema complexType id123 namefooType/ /schemaW3C XML 路径语言建议将扩展名称描述为命名空间名称和本地名称对。通用名称是由 James Clark 创造的一个替换术语可用来描述同一个概念。通用名称由命名空间名称用大括号括起来和本地名称组成。从通用名称的角度看命名空间对于人们的意义更大。下面是上面示例中的三个 XML 文档但是 QName 被替换为通用名称。请注意下面的语法不是有效的 XML 语法。 {http://www.w3.org/2001/XMLSchema}schema {http://www.w3.org/2001/XMLSchema}complexType id123 namefooType/ /{http://www.w3.org/2001/XMLSchema}schema {http://www.w3.org/2001/XMLSchema}schema {http://www.w3.org/2001/XMLSchema}complexType id123 namefooType/ /{http://www.w3.org/2001/XMLSchema}schema {http://www.w3.org/2001/XMLSchema}schema {http://www.w3.org/2001/XMLSchema}complexType id123 namefooType/ /{http://www.w3.org/2001/XMLSchema}schema对许多 XML 应用程序来说XML 文档中元素和属性的通用名称非常重要而用在特定 QName 中的前缀的值并不重要。XML 中的命名空间建议之所以没有使用扩展名称方法来指定命名空间主要是因为它很冗长。相反之所以提供前缀映射和默认命名空间是为了避免我们因不断键入命名空间 URI 而产生腕管综合症。 命名空间和属性 除非属性的名称有前缀否则命名空间声明不应用于属性。在下面显示的 XML 文档中title 属性属于 bk:book 元素且没有命名空间而 bk:title 属性将 urn:xmlns:25hoursaday-com:bookstore 作为其命名空间名称。请注意即使这两个属性具有相同的本地名称该文档的结构也是完整的。 bk:bookstore xmlns:bkurn:xmlns:25hoursaday-com:bookstore bk:book titleLord of the Rings, Book 3 bk:titleReturn of the King/ /bk:bookstore在下例中即使指定了一个默认命名空间title 属性仍然没有命名空间且属于 book 元素。换句话说属性不能继承默认命名空间。 bookstore xmlnsurn:xmlns:25hoursaday-com:bookstore book titleLord of the Rings, Book 3 / /bookstore命名空间 URI 按照 RFC 2396 中的规定命名空间名称是统一资源标识符 (URI)。URI 是统一资源定位器 (URL) 或统一资源名称 (URN)。URL 用于指定资源在 Internet 上的位置而 URN 应该是信息资源持久的、独立于位置的标识符。对于不同的命名空间名称来说只有当它们的每个字符区分大小写都相同时才被视为相同。之所以将 URI 用作命名空间名称主要是因为它们已经提供了一种用来指定全局唯一标识符的机制。 XML 命名空间建议声明命名空间名称只是充当唯一标识符而不必实际标识可从网络检索的资源。这就在 XML 文档的作者和用户之间产生了很大的混淆特别是由于人们已经普遍将基于 HTTP 的 URL 用作命名空间名称。因为许多应用程序都将这样的 URI 转换为超级链接但是当这些“链接”无法跳转到网页或其他可从网络检索的资源时会令许多用户感到恼火。我记得有一个用户将这比作在社交场合中得到了一个假电话号码。 为了避免使用户感到混淆一个解决方案就是使用不暗示资源具有网络可检索性的命名空间-命名架构。在编写供个人使用的 XML 文档时我使用 urn:xmlns: 方案来实现此目的并创建了一个类似于 urn:xmlns:25hoursaday-com 的命名空间名称。自建命名空间 URI 有一个问题那就是它们可能会由于全局不唯一而与 XML 中的名称建议相抵触。我通过将我的个人域名 http://www.25hoursaday.com 用作命名空间 URI 的一部分来满足这个全局唯一要求。 另一个解决方案是将可从网络检索的资源保留在作为命名空间名称的 URI如用 XSLT 和 RDDL 命名空间实现的 URI处。通常这样的 URI 实际上是 HTTP URL。通过使用 W3C 所建议的格式可以很好地对这样的 URL 进行命名如下所示 http://my.domain.example.org/product/[year/month][/area]有关将结构类似的命名空间名称用作版本控制机制的详细信息请参阅“命名空间和版本控制”一节。 有关命名空间的 DOM、XPath 和 XML 信息集 W3C 已经定义了许多可以为 XML 文档提供数据模型的技术。这些数据模型通常是一致的但是由于历史原因它们在处理各种边缘案例的方式上有时会有所不同。对 XML 命名空间和命名空间声明的处理就是边缘案例的一个示例在 W3C 建议中的三个主要数据模型中该案例会以不同的方式进行处理。这三个数据模型是 XPath 数据模型、文档对象模型 (DOM) 和 XML 信息集。 XML 信息集 (XML infoset) 是对 XML 文档中数据的抽象说明它可视为 XML 文档的主要数据模型。XPath 数据模型是类似于 XML 信息集的基于树的模型在查询 XML 文档时会遍历该模型。DOM 优先于 XPath 和 XML 信息集这两种数据模型但是它在许多方面也与这两个数据模型相似。DOM 和 XPath 数据模型可视为对 XML信息集的解释。 文档对象模型 (DOM) 中的命名空间 DOM Level 3 规范的 XML 命名空间部分将命名空间声明视为以 http://www.w3.org/2000/xmlns/ 作为其命名空间名称的常规属性节点并将 xmlns 视为它们的前缀或限定名称。 DOM 中的元素和属性有一个无法在创建之后进行修改的命名空间名称不管它们在文档中的位置是否发生改变。 XPath 数据模型中的命名空间 W3C XPath 建议不将命名空间声明视为属性节点而且不提供以该资格访问它们的权限。相反在 XPath 中XML 文档中的每个元素都有许多可使用 XPath 命名空间导航轴检索的命名空间节点。 在文档中每个元素的作用域内该元素对于每个命名空间声明都有一组唯一的命名空间节点。在该命名空间中命名空间节点对于每个元素都是唯一的。因此代表同一个命名空间声明的两个不同元素的命名空间节点是不同的。 XML 信息集中的命名空间 XML 信息集建议将命名空间声明视为属性信息项。 另外与 XPath 数据模型相似的是XML 文档信息集内的每个元素信息项对于该元素作用域内每个命名空间都有一个命名空间信息项目。 返回页首 XPath、XSLT 和命名空间 W3C XML 路径语言也称为 XPath用于对 XML 文档的某些部分进行寻址它可用在许多 W3C XML 技术包括 XSLT、XPointer、XML 架构和 DOM Level 3中。XPath 使用类似于文件系统和 URL 中使用的分层寻址机制来检索 XML 文档的某些部分。XPath 支持对字符串、数字和布尔值进行基本操作。 XPath 和命名空间 XPath 数据模型将 XML 文档视为节点如元素、属性和文本节点树。在节点树中每个节点的名称都由其本地名称和命名空间名称即它的通用名称或扩展名称组合而成。 对于没有命名空间的元素和属性节点执行 XPath 查询是相当简单的。下面的程序可用于从命令行查询 XML 文档并将用来阐释命名空间对 XPath 查询的影响。 using System.Xml.XPath; using System.Xml; using System; using System.IO; class XPathQuery{ public static string PrintError(Exception e, string errStr){ if(e null) return errStr; else return PrintError(e.InnerException, errStr e.Message ); } public static void Main(string[] args){ if((args.Length 0) || (args.Length % 2)! 0){ Console.WriteLine(Usage: xpathquery source query zero or more prefix and namespace pairs); return; } try{ //Load the file. XmlDocument doc new XmlDocument(); doc.Load(args[0]); //create prefix-namespace mappings (if any) XmlNamespaceManager nsMgr new XmlNamespaceManager(doc.NameTable); for(int i2; i args.Length; i 2) nsMgr.AddNamespace(args[i], args[i 1]); //Query the document XmlNodeList nodes doc.SelectNodes(args[1], nsMgr); //print output foreach(XmlNode node in nodes) Console.WriteLine(node.OuterXml \n\n); }catch(XmlException xmle){ Console.WriteLine(ERROR: XML Parse error occured because PrintError(xmle, null)); }catch(FileNotFoundException fnfe){ Console.WriteLine(ERROR: PrintError(fnfe, null)); }catch(XPathException xpath){ Console.WriteLine(ERROR: The following error occured while querying the document: PrintError(xpath, null)); }catch(Exception e){ Console.WriteLine(UNEXPECTED ERROR PrintError(e, null)); } } }假设下面的 XML 文档不声明任何命名空间则查询相当简单如以下代码后面的示例所示。 ?xml version1.0 encodingutf-8 ? bookstore book genreautobiography titleThe Autobiography of Benjamin Franklin/title author first-nameBenjamin/first-name last-nameFranklin/last-name /author price8.99/price /book book genrenovel titleThe Confidence Man/title author first-nameHerman/first-name last-nameMelville/last-name /author price11.99/price /book /bookstore示例 1 • xpathquery.exe bookstore.xml /bookstore/book/title 选择所有作为 book 元素其父级为 bookstore 元素子级的标题元素并返回如下结果 titleThe Autobiography of Benjamin Franklin/titletitleThe Confidence Man/title • xpathquery.exe bookstore.xml //genre 选择文档中的所有 genre 属性并返回如下结果 genreautobiographygenrenovel • xpathquery.exe bookstore.xml //title[(../author/first-name Herman)] 选择作者名为 Herman 的所有标题并返回如下结果 titleThe Confidence Man/title 但是在将命名空间添加到混合名称中之后事情不再那么简单。除了向某个 book 元素中添加了命名空间和一个属性以外下面的文件与原始文件相同。 bookstore xmlnsurn:xmlns:25hoursaday-com:bookstorebook genreautobiographytitleThe Autobiography of Benjamin Franklin/titleauthorfirst-nameBenjamin/first-namelast-nameFranklin/last-name/authorprice8.99/price/bookbk:book genrenovel bk:genrefictionxmlns:bkurn:xmlns:25hoursaday-com:bookstorebk:titleThe Confidence Man/bk:titlebk:authorbk:first-nameHerman/bk:first-namebk:last-nameMelville/bk:last-name/bk:authorbk:price11.99/bk:price/bk:book/bookstore 请注意默认命名空间位于整个 XML 文档的作用域内而将前缀 bk 映射到命名空间名称 urn:xmlns:25hoursaday-com:bookstore 的命名空间声明只位于第二个 book 元素的作用域内。 示例 2 • xpathquery.exe bookstore.xml /bookstore/book/title 选择所有作为 book 元素其父级为 bookstore 元素子级的标题元素这不返回任何结果。 • xpathquery.exe bookstore.xml //genre 选择文档中的所有 genre 属性并返回如下结果 genreautobiographygenrenovel • xpathquery.exe bookstore.xml //title[(../author/first-name Herman)] 选择作者名字为 Herman 的所有标题这不返回任何结果。 第一个查询之所以不返回任何结果是因为 XPath 查询中不带前缀的名称应用于没有命名空间的元素或属性。在没有命名空间的目标文档中没有 bookstore、book 或 title 元素。第二个查询返回没有命名空间的所有属性节点。尽管命名空间声明位于由该查询返回的这两个属性节点的作用域内但是由于命名空间声明不应用于没有前缀名称的属性所以它们没有命名空间。出于与第一个查询同样的原因第三个查询不返回任何结果。 可通过以下方法来执行能够识别命名空间的 XPath 查询提供一个到 XPath 引擎的前缀-命名空间映射然后在该查询中使用这些前缀。所提供的前缀不必与目标文档中的命名空间-前缀映射相同而且它们必须是非空前缀。 示例 3 • xpathquery.exe bookstore.xml /b:bookstore/b:book/b:title b urn:xmlns:25hoursaday-com:bookstore 选择所有作为 book 元素其父级为 bookstore 元素子级的标题元素并返回如下结果 title xmlnsurn:xmlns:25hoursaday-com:bookstoreThe Autobiography of Benjamin Franklin/titlebk:title xmlns:bkurn:xmlns:25hoursaday-com:bookstoreThe Confidence Man/bk:title • xpathquery.exe bookstore.xml //b:genre b urn:xmlns:25hoursaday-com:bookstore 选择文档中来自 urn:xmlns:25hoursaday-com:bookstore 命名空间的所有 genre 属性并返回如下结果 bk:genrefiction • xpathquery.exe bookstore.xml //bk:title[(../bk:author/bk:first-name Herman)] bk urn:xmlns:25hoursaday-com:bookstore 选择作者名为 Herman 的所有标题并返回如下结果 bk:title xmlns:bkurn:xmlns:25hoursaday-com:bookstoreThe Confidence Man/bk:title 注意 示例 3 与示例 1 和 2 相同但是它被重写为能够识别命名空间。 有关使用 XPath 的详细信息请阅读 Aaron Skonnard 的文章 Addressing Infosets with XPath 并查看 ZVON.org XPath tutorial 上的示例。 XSLT 和命名空间 W3C XSL 转换 (XSLT) 建议描述一种基于 XML 的语言用于将 XML 文档转换为其他 XML 文档。XSLT 转换又称为 XML 样式表它使用模式 (XPath) 来与目标文档的各个方面进行匹配。在与目标文档中的节点进行匹配时可以对那些指定成功匹配输出结果的模板进行实例化并使用这些模板来转换文档。 对命名空间的支持已紧密集成到 XSLT 中特别是由于 XPath 用于与源文档中的节点进行匹配。在 XSLT 内部的 XPath 表达式中使用命名空间比使用 DOM 方便得多。 随后的示例包含 • 一个用于从命令行执行转换的程序。 • 一个 XSLT 样式表当它在来自 urn:xmlns:25hoursaday-com:bookstore 命名空间的 bookstore 文档中运行时打印源 XML 文档中来自 urn:xmlns:25hoursaday-com:bookstore 的所有 title 元素。 • 得到的输出结果。 程序 Imports System.Xml.Xsl Imports System.Xml Imports System Imports System.IO Class Transformer Public Shared Function PrintError(e As Exception, errStr As String) As String If e Is Nothing Then Return errStr Else Return PrintError(e.InnerException, errStr e.Message) End If End Function PrintError Entry point which delegates to C-style main Private Function Public Overloads Shared Sub Main() Run(System.Environment.GetCommandLineArgs()) End Sub Main Overloads Public Shared Sub Run(args() As String) If args.Length 2 Then Console.WriteLine(Usage: xslt source stylesheet) Return End If Try Create the XslTransform object. Dim xslt As New XslTransform() Load the stylesheet. xslt.Load(args(1)) Transform the file. Dim doc As New XmlDocument() doc.Load(args(0)) xslt.Transform(doc, Nothing, Console.Out) Catch xmle As XmlException Console.WriteLine((ERROR: XML Parse error occured because PrintError(xmle, Nothing))) Catch fnfe As FileNotFoundException Console.WriteLine((ERROR: PrintError(fnfe, Nothing))) Catch xslte As XsltException Console.WriteLine((ERROR: The following error occured while transforming the document: PrintError(xslte, Nothing))) Catch e As Exception Console.WriteLine((UNEXPECTED ERROR PrintError(e, Nothing))) End Try End Sub End Class TransformerXSLT 样式表 xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xmlns:burn:xmlns:25hoursaday-com:bookstore xsl:template matchb:bookstore book-titles xsl:apply-templates selectb:book/b:title/ /book-titles /xsl:template xsl:template matchb:title xsl:copy-of select. / /xsl:template /xsl:stylesheet输出 ?xml version1.0 ? book-titles xmlns:msxslurn:schemas-microsoft-com:xslt xmlns:exturn:my_extensions xmlns:burn:xmlns:25hoursaday-com:bookstore title xmlnsurn:xmlns:25hoursaday-com:bookstoreThe Autobiography of Benjamin Franklin/title bk:title xmlnsurn:xmlns:25hoursaday-com:bookstore xmlns:bkurn:xmlns:25hoursaday-com:bookstoreThe Confidence Man/bk:title /book-titles请注意该样式表中的命名空间声明结束于输出 XML 文档的根节点上。另请注意XSLT 命名空间未包括在输出 XML 文档中。 从 XSLT 转换的输出结果生成 XSLT 样式表有些麻烦这是由于处理器必须能够从实际的样式表指令确定输出元素。我发现可以通过两种方法来解决此问题我将通过显示一些样式表来阐释这两种方法这些样式表生成下面的 XMLT 样式表作为输出结果。 xslt:stylesheet version1.0 xmlns:xslthttp://www.w3.org/1999/XSL/Transform xslt:output methodtext/ xslt:template match/xslt:textHELLO WORLD/xslt:text/xslt:template /xslt:stylesheet第一种方法涉及到创建一个包含要创建的样式表的变量然后结合使用 value-of 和 disable-output-escaping 属性来创建该样式表。 xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xsl:output methodxml encodingutf-8/ xsl:variable namestylesheet lt;xslt:stylesheet version1.0 xmlns:xslthttp://www.w3.org/1999/XSL/Transformgt; lt;xslt:output methodtext/gt; lt;xslt:template match/gt;lt;xslt:textgt;HELLO WORLDlt;/xslt:textgt;lt;/xslt:templategt; lt;/xslt:stylesheetgt; /xsl:variable xsl:template match/ xsl:value-of select$stylesheet disable-output-escapingyes / /xsl:template /xsl:stylesheet如果所创建的样式表可以方便地进行分区以便放在变量中则第一种方法非常有效。尽管此方法快速方便但是它还会归入杂项 类别这在面临需要灵活性的任何情况时往往会变得难以处理。例如如果在创建新样式表时涉及到创建许多动态文本并且与样式表指令交叉在一起则相对于上面提到的杂项以下方法会更适合。 xslt:stylesheet version1.0 xmlns:xslthttp://www.w3.org/1999/XSL/Transform xmlns:aliashttp://www.w3.org/1999/XSL/Transform-alias xslt:output methodxml encodingutf-8/ xslt:namespace-alias stylesheet-prefixalias result-prefixxslt/ xslt:template match/ alias:stylesheet version1.0 alias:output methodtext/ alias:template match/alias:textHELLO WORLD/alias:text/alias:template /alias:stylesheet /xslt:template /xslt:stylesheet上面的文档使用 namespace-alias 指令将 alias 前缀及其所绑定到的命名空间名称替换为 xslt 前缀及其所绑定到的命名空间名称。 命名空间还用于指定扩展 XSLT 的机制。可以创建执行方式与 XSLT 函数相同的、带有命名空间前缀的函数。同样某些命名空间中的元素可被视为对 XSLT 的扩展并且可以像执行转换指令如 template、copy、value-of 等那样执行。下面是 Hello World 程序的示例该程序使用基于命名空间的扩展函数来打印签名问候语。 stylesheet version1.0 xmlnshttp://www.w3.org/1999/XSL/Transform xmlns:msxslurn:schemas-microsoft-com:xslt xmlns:newfuncurn:my-newfunc output methodtext/ template match/ value-of selectnewfunc:SayHello() / /template msxsl:script languageJavaScript implements-prefixnewfunc function SayHello() { return Hello World; } /msxsl:script /stylesheet返回页首 XML 命名空间警告 与任何有用的工具一样XML 中的命名空间可能会被错误地使用而且它还具有许多微妙之处可能会产生问题如果用户没有意识到这些微妙处。本节重点介绍 XML 命名空间的用户通常会在哪些方面遇到问题或面临误解。 版本控制和命名空间 在实际中主要有两种机制来创建不同版本的 XML 实例文档。一种方法是像在 XSLT 中那样使用根元素的 version 属性另一种方法是将元素的命名空间名称用作版本控制机制。目前基于命名空间的版本控制非常普遍对于 W3C 尤其如此。W3C 已经将该机制用于各种 XML 技术包括 SOAP、XHTML、XML 架构和 RDF。对于那些使用命名空间控制版本的文档其命名空间 URI 通常采用如下格式 http://my.domain.example.org/product/[year/month][/area]通过修改后续版本中的命名空间名称来控制 XML 文档的版本有一个主要问题那就是这意味着处理这些文档的、能够识别 XML 命名空间的应用程序将不再处理这些文档并且将必须进行升级。这主要有益于版本不经常更改的文档格式但是如果在更改版本时会修改元素和属性的语义则会要求所有的处理器不再处理新版本以防对它们产生错误理解。 另一方面在许多情况下让 XML 文档的版本控制机制基于根元素的 version 属性就足够了。version 属性主要有益于文档结构的更改可以向后兼容的情况。在以下情况下使用 version 属性都是非常明智的选择 • 元素和属性的语义将不会被修改。 • 对文档进行更改时涉及到添加元素和属性但是很少涉及到删除它们。 • 应用程序与各种版本的处理软件之间的互操作性是必需的。 这两种版本控制方法不是互斥的它们可同时使用。例如XSLT 既使用根元素的 version 属性又使用版本控制的命名空间 URI。version 属性用于对 XML 文档格式进行递增式向后兼容的更改而修改命名空间名称是为了对文档的语义进行重大的更改。 文档类型 正如在几个有关各种 XML 相关邮件列表的哲学争论中讨论的那样术语文档类型 容易引起误解。在许多情况下根元素的命名空间名称可用于确定如何处理文档然而这很难成为一个一般性规则并且如此声明会违反 XML 命名空间的精神因为它们在设计上完全是为了让开发人员能够混合和匹配 XML 词汇表。 Rick Jelliffe 有关 XML-DEV 的帖子简明扼要它抓住了为什么认为根命名空间的 URI 等同于文档类型概念这一问题的本质。这个帖子的本质是一个 XML 文档可以有许多不同的类型包括它的文档类型由它的文档类型定义 (DTD) 指定、它的 MIME 媒体类型、它的架构定义由 xsi:schemaLocation 属性指定、它的文件扩展名以及它的根元素的命名空间名称。因此在许多情况下根据用户从哪个角度来检查文档一个文档将很有可能有许多不同的类型。 RDDL 文档示例请注意它的根元素来自 XHTML 命名空间和批注的映射架构它们的根元素来自 W3C XML 架构命名空间是 XML 文档的两个示例在这些示例中如果只是查看根元素的命名空间 URI就会曲解实际文档类型。 一言以蔽之不能通过查看文档根元素的命名空间 URI 来最终确定文档的类型。一定要进行思考否则是非常愚蠢的。 返回页首 命名空间的未来 在 XML 领域中有许多开发都侧重于处理围绕 XML 命名空间开发而产生的一些问题。首先当前的 W3C XML 命名空间建议的草案没有为取消对已映射到前缀的命名空间的声明提供机制。W3C XML 命名空间 v1.1 工作草案将提供一种机制来取消对实例文档中前缀-命名空间映射的声明以纠正这种疏忽。 对于在试图取消引用命名空间 URI 的内容时应当返回什么内容存在着争论这导致在 XML 领域中引起富有争议的辩论并且还成为 W3C 的 Technical Architecture Group 目前争论的焦点。当前版本的 XML 命名空间建议不要求命名空间 URI 实际上是可解析的因为命名空间 URI 应当只是一个用作唯一标识符的命名空间名称而不是资源在 Internet 上的位置。 Tim BrayXML 语言和 XML 命名空间建议最初的编辑之一已经撰写了一篇详尽的论文论述有关命名空间 URI 和命名空间文档的问题可以或者也许不可以从 URI 中检索到这些文档。此文包含在创建资源目录描述语言 (RDDL) 时涉及到的许多推理。RDDL 设计用于创建命名空间文档。 Dare Obasanjo 是 Microsoft 的 WebData 组的成员该小组在 .NET 框架的 System.Xml 和 System.Data 命名空间、Microsoft XML 核心服务 (MSXML) 和 Microsoft 数据访问组件 (MDAC) 中开发组件。 有关本文的任何问题或评论欢迎张贴到 GotDotNet 上的 Extreme XML 留言板。 转到原英文页面 转载于:https://www.cnblogs.com/genson/archive/2007/03/16/677575.html
http://wiki.neutronadmin.com/news/131142/

相关文章:

  • 国外html响应式网站模板用网站做自我介绍ppt
  • 做网站用什么服务器好做得不好的知名企业网站
  • 网站运营培训学校如何建立和设计公司网站作文
  • 网站开发时间seo优化包括哪些内容
  • 漳州最专业的网站建设公司建国外网站买完域名后怎么做
  • 清水河网站建设wordpress主题站
  • 网站建设大小python wordpress采集器
  • 网站视觉优化的意义网站建设公司包括哪些
  • 云南百度智能建站免费制作h5的小程序
  • 网站建设流程域名申请网站建设万户网络
  • 网站开发 打标签中国空间站最新动态
  • 昆山品牌网站建设拼多多关键词排名查询工具
  • 建南沙做网站公司有什么网站建设类岗位
  • 阿里云网站更换域名网站设计工具更好的做网站
  • 做爰午夜福利全过程视频网站厦门网站建设哪家好
  • 哪个公司的网站做得好织梦调用网站类型
  • 沈阳工程建设信息网站教务处网站建设要求
  • 网站建设基地关闭WordPress自动文章摘要
  • 有没有教做帽子的网站wordpress文章链接带问号
  • 1核1g可以做几个网站服务好质量好的app开发
  • seo优化就业前景seo搜索引擎优化培训班
  • 北京高端网站开发防恶意点击软件
  • 柳州哪里有网站建设夏都西宁吧
  • 网站空间提供网站如何提升用户体验
  • 域名备案时网站名称外包公司有前途吗
  • 手机网站编程合肥网站设计制作
  • 庄河城乡建设管理局网站宁德做网站
  • 网站地图怎么做的安徽元鼎建设工程网站
  • 河北省建设机械协会网站织梦软件网站模板下载地址
  • 网站 需求分析营销型企业网站包括哪些类型