<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      翻譯:taowen

      3. 基于語法的語言 (RELAX NG)

      We have seen that a schema can be described as a set of rules formalized using a language such as Schematron of XSLT (other languages such as Prolog are probably good candidates too). The fact that this is possible isn't a proof that it's easy and people have developed other classes of more specific schema languages describing the structure of the documents rather than the rules to apply to validate them.

      我們已經可以看到 schema 能夠描述為一套使用像脫胎于 XSLT 的 Schematron (其他像 Prolog 這樣的語言也是很好的候選者)這樣的形式化的規(guī)則。這是可能的事實并不是一個簡單的證明,而且人們還開發(fā)了其他更專門的 schema 語言來描述文檔的結構而不是驗證它們的規(guī)則。

      RELAX NG is the main example of such languages qualified of "grammar based" since they describe documents in the manner of a BNF adapted to describing XML trees.

      RELAX NG 是這樣的 "基于語法的" 語言中的主要代表,因為它們以適合描述 XML 樹的 BNF 的方法描述文檔。

      Although its syntax is very different from XPath, RELAX NG is all about named patterns allowed in the structure.

      雖然它的語法不同于 XPath,但是 RELAX NG 完全是與在結構中允許的命名 pattern 有關。

      3.1. 入門

      The description of our simplified library could be:

      我們的簡化庫可以描述為這樣:

       <?xml version="1.0" encoding="UTF-8"?>
      <grammar xmlns="http://relaxng.org/ns/structure/1.0">
      <start>
      <element name="library">
      <zeroOrMore>
      <element name="book">
      <attribute name="id"/>
      </element>
      </zeroOrMore>
      </element>
      </start>
      </grammar>

      This schema reads almost as plain English and describes: 'a grammar starting with a document element named "library" containing zero or more elements named "book" with an attribute named "id"' and his equivalent to our XSLT closed schema accepting only "/library", "/library/book" and "/library/book/@id" --except that the restriction on ids being unique is not captured (yet) in our RELAX NG schema.

      這個 schema 讀起來幾乎和英語一樣,而且描述了:'一個語法,它由名字為 "library" 的文檔元素開始,包含零個或者多個名字為 "book" ,有一個名字為 "id" 的屬性的元素',而且它相當于我們只接受 "/library", "/library/book" 和 "/library/book/@id" 的 XSLT 封閉 schema —— 除了在我們的 RELAX NG schema 中還沒有添加 id 必須是唯一的限制。

      3.2. 非 XML 語法

      The XML syntax of this schema is still quite verbose and James Clark has proposed an equivalent yet more concise non XML syntax. Using this syntax, our schema would become:

      這個 schema 的 XML 語法仍然非常冗長而且 James Clark 以及提議了一種 XML 語法的對等物,而且更精確。使用這種語法,我們的 schema 變成:

       grammar {
      start = element library{
      element book {attribute id {text}} *
      }
      }

      This syntax has roughly the same meaning, except that a) it's non XML b) some DTD goodies are used: here the "*" means "zero or more" and we will see more of these goodies in more complete examples later on.

      這種語法基本上有相同的含義,除了 a) 它是非 XML 的 b) 一些 DTD 的優(yōu)點被用上了:這里 "*" 意味著 "零個或者多個" 并且我們將在后面的更復雜的例子中看到更多這樣的好處。

      3.3. 標識符

      We are still behind what we had implemented with our XSLT or Schematron schemas which did test the uniqueness of the book identifiers. Although it is generally impossible to implement with a grammar based XML schema language all the constraints which can be expressed as rules, this example has been chosen so that we can find a way to define a nearly equivalent constraint with RELAX NG.

      我們仍然躲在我們用 XSLT 或者 Schematron 實現(xiàn)的防火墻的背后,它會測試 book 標識符的唯一性的。雖然總體上來說以基于語法的 XML schema 語言不可能實現(xiàn)所有能夠用規(guī)則表達的約束,但是這個例子還是被選出來讓我們能夠在 RELAX NG 中找到一種定義近似等價的約束的辦法。

      This is achievable through a set of features defined to achieve a certain level of compatibility with the XML DTD and the ability of RELAX NG to interface with datatype systems.

      這是通過一套定義出來用于實現(xiàn)某種程度與 XML DTD 兼容的特性以及 RELAX NG 用于和數(shù)據(jù)類型系統(tǒng)交互的功能來達到的。

      The datatype system to use in this case is "http://relaxng.org/ns/compatibility/datatypes/1.0" and the datatype to use is "ID" since our "id" attributes can be considered as DTD ID attributes (they are globally unique all over a document and they match the XML "NMTOKEN" production).

      本例中要使用的數(shù)據(jù)類型系統(tǒng)是 "http://relaxng.org/ns/compatibility/datatypes/1.0" ,要用的數(shù)據(jù)類型是 "ID" 因為我們的 "id" 屬性能夠被認為是 DTD ID 屬性(它們在整個文檔全局唯一的而且它們匹配了 XML "NMTOKEN")。

      The amended schema to express this new constraint becomes:

      修改為能表達這種新的約束的 schema 變成:

       <?xml version="1.0" encoding="UTF-8"?>
      <grammar xmlns="http://relaxng.org/ns/structure/1.0"
      datatypeLibrary="http://relaxng.org/ns/compatibility/datatypes/1.0">
      <start>
      <element name="library">
      <zeroOrMore>
      <element name="book">
      <attribute name="id">
      <data type="ID"/>
      </attribute>
      </element>
      </zeroOrMore>
      </element>
      </start>
      </grammar>

      The syntax is still straightforward: the attribute is now specified as holding data of type "ID" per the datatype library "http://relaxng.org/ns/compatibility/datatypes/1.0" defined through the datatypeLibrary attribute of an ancestor of the "data" element.

      語法仍然是清晰的:屬性現(xiàn)在被限制為保存數(shù)據(jù)類型庫 "http://relaxng.org/ns/compatibility/datatypes/1.0" 中的 "ID" 數(shù)據(jù)類型的數(shù)據(jù)。而數(shù)據(jù)類型庫的選擇是由父元素 "data" 的 datatypeLibrary 屬性定義的。

      The non XML syntax uses a namespace prefix declaration (also available in the XML syntax) and becomes:

      非 XML 語法使用名字空間做前綴的聲明 (也可一在 XML 語法中使用),變成:

       datatypes dtd = "http://relaxng.org/ns/compatibility/datatypes/1.0"
      grammar {
      start = element library{
      element book {attribute id {dtd:ID}} *
      }
      }

      We will see later on that these datatypes are not without side effects: they are provided to provide compatibility with DTDs and emulate DTDs to the point of affecting the flexibility of RELAX NG.

      我們將在后面看到這些數(shù)據(jù)類型并不是沒有副作用的:提供它們給你是為了提供對 DTD 的兼容,但是對 DTD 的這種模仿也影響了 RELAX NG 的靈活性。

      3.4. Patterns

      All over our brief experience with RELAX NG, we've been manipulating patterns and it's worth coming back on this concept which is really fundamental.

      我們使用 RELAX NG 的短短經歷之中,我們已經熟練地使用了 pattern 并且它值得我們回過頭來看看這些真正是基礎性的概念。

      The basic think to note is that when we write something such as "element library{element book {attribute id {dtd:ID}} *}", we are not giving definitions of what the elements "library", "book" and the attribute "id" are but defining a pattern of nodes which may appear in the documents.

      對于這個注釋的基本思考是當我們寫諸如 "element library{element book {attribute id {dtd:ID}} *}" 這樣的東西的時候,我們沒有給出元素 "library","book" 以及屬性 "id" 是什么而是定義了可能出現(xiàn)在文檔中的一種節(jié)點。

      In this respect, we are here much closer to the schemas which we have written with XSLT or Schematron than to the schemas we will write later on with W3C XML Schema and the meaning of the pattern defined above is "accept here an element node library with children element nodes book having an id attribute having data of type ID".

      就這點來說,我們和已經用 XSLT 或者 Schematron 編寫的 schema 靠得更近了,勝過了我們將要在后面用 W3C XML Schema 編寫的 schema。而且上面定義的 pattern 是 "允許這兒有一個 library 元素有子元素 book,book 有一個屬性類型為 ID 的 id 屬性"。

      The nodes manipulated in this pattern are always anonymous, which means that we cannot make a reference to these nodes elsewhere in the schema. What's possible, though, is to define global named patterns (aka named templates in a XSLT transformation) and to refer to these patterns in other patterns.

      在這個 pattern 中操作的節(jié)點總是匿名的,這就意味著我們不能在 schema 的其他地方對這些節(jié)點進行引用。雖然,我們能夠定義全局命名 pattern(類似于 XSLT 轉換中的命名模板)并且在其他 pattern 中引用這些 pattern。

      The syntax to define a named pattern holding the set of book elements would be:

      定義保存一批 book 元素的命名 pattern 的語法將是:

        <define name="bookElements">
      <zeroOrMore>
      <element name="book">
      <attribute name="id">
      <data type="ID"/>
      </attribute>
      </element>
      </zeroOrMore>
      </define>

      or (non XML):

      或者(非 XML 形式):

        bookElements = element book {attribute id {dtd:ID}} *

      And a reference to this pattern would be:

      而且一個對這 pattern 的參考將是:

        <start>
      <element name="library">
      <ref name="bookElements"/>
      </element>
      </start>

      or (non XML):

      或者(非 XML 形式):

        start = element library{ bookElements }

      Note that there is no restriction on the "content" located in named patterns. We have chosen here to include a set of zero or more book elements but could also have created patterns to include a single book element or the id attributes. In every case, named patterns are containers and even when a name pattern contains a single element, it's a pattern containing a single element rather than a definition of this element.

      注意對于 "content" 在命名模板中的位置沒有任何限制。我們選擇在這兒包含零個或者多個 book 元素但是也也能創(chuàng)建了包含一個 book 元素或者 id 屬性的 pattern。無論在哪一種情況中,命名模板都是容器而且即使當命名模板只包含一個元素的時候,那都是一個 pattern 包含了一個元素而不是一個對這個元素的定義。

      3.5. 更多特性

      It's now time to add some more elements to explore more features from RELAX NG... let's describe the "author" element:

      現(xiàn)在是添加更多元素來從 RELAX NG 中探詢更多特性的時候了……讓我們描述一下 "author" 元素:

        <author id="Charles-M.-Schulz">
      <name>
      Charles M. Schulz
      </name>
      <nickName>
      SPARKY
      </nickName>
      <born>
      1922-11-26
      </born>
      <dead>
      2000-02-12
      </dead>
      </author>

      Since the definition of the id attribute is common to several elements, we can isolate it in a pattern:

      因為 id 屬性的定義對于好幾個元素都是要用的,我們可以把它單獨分離到一個 pattern 中:

        <define name="idAttribute">
      <attribute name="id">
      <data type="ID" datatypeLibrary="http://relaxng.org/ns/compatibility/datatypes/1.0"/>
      </attribute>
      </define>

      or:

      或者:

       idAttribute = attribute id {dtd:ID}

      This description of the author element is straightforward using the few features which we've already seen:

      這個對 author 元素的描述是直接了當?shù)模褂昧艘恍┪覀円呀浛吹降奶匦裕?/p>

          <element name="author">
      <ref name="idAttribute"/>
      <element name="name">
      <text/>
      </element>
      <element name="nickName">
      <text/>
      </element>
      <element name="born">
      <text/>
      </element>
      <element name="dead">
      <text/>
      </element>
      </element>

      or:

      或者:

        element author {
      idAttribute,
      element name {text},
      element nickName {text},
      element born {text},
      element dead {text}
      }

      Note that we have defined all the sub-elements as "text" meaning that they can hold any text node. We could also use a datatype library such as the W3C XML Schema datatype library which we can define as the default type library since we've define the datatype library used for the id attribute in the type definition itself.

      注意我們已經定義了所有子元素為 "text" 意味著它們能夠包含任何文本節(jié)點。我們也能使用諸如 W3C XML Schema 數(shù)據(jù)類型庫這樣的東西,因為我們已經在類型定義本身中給 id 屬性定義了數(shù)據(jù)類型庫。

      The definition involves then choosing the right type for each of the element. Here for instance, we've been lucky enough to have date expressed in the ISO 8601 date format supported by W3C XML Schema and can use this type in our schema. For string types, we need to distinguish between "token" and "string" depending on the behavior we want to space normalization (token applies full space normalization and trimming while string applies none). Depending on these choices, our definition might become:

      其中的定義然后給每個元素選擇正確的類型。例如這兒,我們很幸運日期已經在 W3C XML Schema 支持的 ISO 8601 日期格式中表達了。對于字符串類型,我們需要區(qū)別 "token" 以及 "string",根據(jù)我們對空白的不同處理需要(token 完全的施加空白標準化,在字符串賦給的時候進行 trim 操作)。根據(jù)這些選擇,我們的定義可能變?yōu)椋?/p>

          <element name="author">
      <ref name="idAttribute"/>
      <element name="name">
      <data type="token"/>
      </element>
      <element name="nickName">
      <data type="token"/>
      </element>
      <element name="born">
      <data type="date"/>
      </element>
      <element name="dead">
      <data type="date"/>
      </element>
      </element>

      or:

      或者:

        element author {
      idAttribute,
      element name {xs:token},
      element nickName {xs:token},
      element born {xs:date},
      element dead {xs:date}
      }

      3.6. 完整的 schema

      Writing the full schema for the complete example is pretty much repeating the same process:

      給整個的例子編寫完整的 schema 是一個相當重復的過程:

       <?xml version="1.0" encoding="UTF-8"?>
      <grammar xmlns="http://relaxng.org/ns/structure/1.0"
      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
      <start>
      <element name="library">
      <oneOrMore>
      <choice>
      <ref name="bookElement"/>
      <ref name="authorElement"/>
      <ref name="characterElement"/>
      </choice>
      </oneOrMore>
      </element>
      </start>
        <define name="idAttribute">
      <attribute name="id">
      <data type="ID" datatypeLibrary="http://relaxng.org/ns/compatibility/datatypes/1.0"/>
      </attribute>
      </define>
        <define name="idrefAttribute">
      <attribute name="id">
      <data type="IDREF" datatypeLibrary="http://relaxng.org/ns/compatibility/datatypes/1.0"/>
      </attribute>
      </define>
        <define name="bookElement">
      <element name="book">
      <ref name="idAttribute"/>
      <element name="isbn">
      <data type="token"/>
      </element>
      <element name="title">
      <data type="token"/>
      </element>
      <zeroOrMore>
      <element name="author-ref">
      <ref name="idrefAttribute"/>
      </element>
      </zeroOrMore>
      <zeroOrMore>
      <element name="character-ref">
      <ref name="idrefAttribute"/>
      </element>
      </zeroOrMore>
      </element>
      </define>
        <define name="authorElement">
      <element name="author">
      <ref name="idAttribute"/>
      <element name="name">
      <data type="token"/>
      </element>
      <element name="nickName">
      <data type="token"/>
      </element>
      <element name="born">
      <data type="date"/>
      </element>
      <element name="dead">
      <data type="date"/>
      </element>
      </element>
      </define>
        <define name="characterElement">
      <element name="character">
      <ref name="idAttribute"/>
      <element name="name">
      <data type="token"/>
      </element>
      <element name="since">
      <data type="date"/>
      </element>
      <element name="qualification">
      <data type="string"/>
      </element>
      </element>
      </define>
      </grammar>

      or:

      或者:

       datatypes dtd = "http://relaxng.org/ns/compatibility/datatypes/1.0"
      datatypes xs = "http://www.w3.org/2001/XMLSchema-datatypes"
      grammar {
      start = element library{ (bookElement|authorElement|characterElement)+ }
      idAttribute = attribute id {dtd:ID}
      idrefAttribute = attribute id {dtd:IDREF}
      bookElement = element book {
      idAttribute,
      element isbn {xs:token},
      element title {xs:token},
      element author-ref{idrefAttribute} *,
      element character-ref{idrefAttribute} *
      }
      authorElement = element author {
      idAttribute,
      element name {xs:token},
      element nickName {xs:token},
      element born {xs:date},
      element dead {xs:date}
      }
      characterElement = element character {
      idAttribute,
      element name {xs:token},
      element since {xs:date},
      element qualification {xs:string}
      }
      }

      Note the usage to define the "library" element of the "choice" element (XML syntax) represented in the non XML syntax by the "|" operator. The meaning of this compositor is to allow one possibility only within a list. Here, the choice may have "zeroOrMore" (or "*" in the non XML syntax) occurrences which means that the choice may be repeated indefinitely.

      注意定義 "choice" 元素中的 "library" 元素的用法(XML 語法)以非 XML 語法表達起來使用 "|" 操作符。這個符號的意思是只允許在列表中出現(xiàn)一次。這兒,choice 可能出現(xiàn) "zeroOrMore" (或者是 "*" 在非 XML 語法中)次,這意味著 choice 被無限重復。

      3.7. 在順序不那么重要的時候

      There are cases when the relative order between elements doesn't matter for the application. For instance, one may wonder what's the point of constraining the order of the sub-elements of "author" and impose to write:

      有這樣的情況,元素之間的相關順序對于程序來說無關緊要。例如,你可能對約束 "author" 子元素的順序感到奇怪,并且為什么要:

        <author id="Charles-M.-Schulz">
      <name>
      Charles M. Schulz
      </name>
      <nickName>
      SPARKY
      </nickName>
      <born>
      1992-11-26
      </born>
      <dead>
      2000-02-12
      </dead>
      </author>

      rather than

      而不是

        <author id="Charles-M.-Schulz">
      <name>
      Charles M. Schulz
      </name>
      <dead>
      2000-02-12
      </dead>
      <born>
      1992-11-26
      </born>
      <nickName>
      SPARKY
      </nickName>
      </author>

      After all, the elements have names and it's not much more complex to write applications which will retrieve the information they need whatever the order of the sub-elements is. So, why should we bother document writers with respecting a fixed order?

      畢竟,元素們都有名字而且不管子元素的順序獲取它們所需信息的程序也不是非常復雜。因此,為什么我們要勞煩文檔的作者說明一個固定的順序呢?

      RELAX NG allows such definitions without any restriction through the use of "interleave" elements (XML syntax) or "&" operator (non XML syntax) and the updated definition of the author element to remove the restriction on the order of the sub-elements would be:

      RELAX NG 允許這樣的定義而且沒有任何約束通過使用 "interleave" 元素(XML 語法)或者是 "&" 操作符(非 XML 語法)。更新后的 author 元素的定義移除了對子元素的順序之后將是:

          <element name="author">
      <ref name="idAttribute"/>
      <interleave>
      <element name="name">
      <data type="token"/>
      </element>
      <element name="nickName">
      <data type="token"/>
      </element>
      <element name="born">
      <data type="date"/>
      </element>
      <element name="dead">
      <data type="date"/>
      </element>
      </interleave>
      </element>

      or:

      或者:

        element author {
      idAttribute&
      element name {xs:token}&
      element nickName {xs:token}&
      element born {xs:date}&
      element dead {xs:date}
      }

      Note that this does apply even when the number of occurrences of some of the sub-elements is greater than one such as for our "book" element:

      注意,這在某些子元素出現(xiàn)的次數(shù)大于一次例如我們的 "book" 元素的時候也能使用:

        bookElement = element book {
      idAttribute&
      element isbn {xs:token}&
      element title {xs:token}&
      element author-ref{idrefAttribute} *&
      element character-ref{idrefAttribute} *
      }

      3.8. 開放 我們的 schema

      If we come back to our highly simplified example with only "library" and "book" elements, we have achieved a pretty good equivalence with the closed schemas previously developed with XSLT and Schematron and you may wonder if we can open our schema to allow arbitrary text and element nodes within our book element like we had been able to do.

      如果我們回到我們高度簡化的只有 "library" 和 "book"元素的例子中來,我們已經實現(xiàn)了和前面用 XSLT 以及 Schematron 開發(fā)的封閉 schema 幾乎完全相同的對等物。而且你可能想要知道是否我們能開放我們的 schema 讓任意的文本和元素節(jié)點都能出現(xiàn)在我們的 book 元素中像我們前面能夠做到的那樣。

      The first step to do so is to define an open pattern for accepting any element. There is no predefined pattern to do so with RELAX NG, but this is not a big deal with all what we've seen so far and a new goodies which is the "anyName" element implementing name wildcards (or "*" in the non XML syntax):

      這么做的第一步是給接受任何元素定義一個開放的 pattern。在 RELAX NG 中沒有預先定義好的這樣的 pattern,但是用我們已經看到的東西這不是什么難事。一個好東西名字為 "anyName" 的元素實現(xiàn)了名字通配符(或者是非 XML 語法中的 "*"):

        <define name="anyElement">
      <element>
      <anyName/>
      <zeroOrMore>
      <choice>
      <attribute>
      <anyName/>
      </attribute>
      <text/>
      <ref name="anyElement"/>
      </choice>
      </zeroOrMore>
      </element>
      </define>

      or:

      或者:

        anyElement = element * {(attribute * {text}|text|anyElement)*}

      The other thing to note is that recursive patterns are allowed when the recursion happens within an element like it's the case here.

      另外一個要注意的事情是遞歸 pattern 在遞歸發(fā)生在像這樣的元素之中的時候是允許的:

      The surprise comes when we try to use this named pattern in our book element:

      當我們嘗試在我們的 book 元素中使用整個命名 pattern,意外來了:

            <element name="book">
      <attribute name="id">
      <data type="ID"/>
      </attribute>
      <zeroOrMore>
      <choice>
      <ref name="anyElement"/>
      <text/>
      </choice>
      </zeroOrMore>
      </element>

      or:

      或者:

       element book {attribute id {dtd:ID}, anyElement*}

      The schema is then detected as invalid with the following error:

      shema 然后被檢測到無效,有以下錯誤:

       Error at URL ...
      line number 5, column number 22:
      conflicting ID-types for attribute "id" of element "book"

      We've been hit by a side effect of the DTD compatibility library used for our id attribute and to make sure that this is not a limitation of the RELAX NG language itself, we can just change the definition of these attributes to be plain text:

      我們被用于我們的 id 屬性的 DTD 兼容性庫給打擊了,并且為了確信整個不是 RELAX NG 語言本身的限制,我們可以把這些屬性的定義變成普通的文本:

            <element name="book">
      <attribute name="id">
      <text/>
      </attribute>
      <zeroOrMore>
      <choice>
      <ref name="anyElement"/>
      <text/>
      </choice>
      </zeroOrMore>
      </element>

      or:

      或者:

        element book {attribute id {text}, anyElement*}

      And our schemas become valid.

      這樣我們的 schema 變成有效的了。

      What's happening here is that to emulate the behavior of a DTD, RELAX NG imposes that if an ID attribute is defined somewhere a in a element, the same ID attribute must be defined in all the other definitions of this element and this is not the case in the definition of our "anyElement" pattern which may -through the wildcard- include a "book" element which does not include a mandatory id attribute with the type dtd:ID...

      這里發(fā)生的事情是這樣的:為了模擬 DTD 的行為,RELAX NG 強行認為 ID 屬性定義在某處的元素之中,同一個 ID 屬性必須定義在整個元素的所有其他定義之中。而這我們的 "anyElement"pattern" 不同,它通過通配符包含了一個 "book" 元素,而 "book" 元素并不包括一個必須的類型為 dtd:ID 的 id 屬性……

      To workaround this issue, we may either avoid using the ID type as shown above or if we want to use this type, exclude or handle separately the case of a book element included as a sub-element of the top level book. This exclusion can be done through the "except" and "name" elements (or "-" operator in the non XML syntax):

      我了不發(fā)生這樣的情況,我們要么避免像上面顯示的那樣避免使用 ID 類型,要么如果我們想要使用這種類型,排斥或者單獨處理 book 元素作為頂層 book 的子元素被包含的這種情況。這種排除可以通過 "except" 和 "name" 元素(或者以非 XML 語法的 "-" 操作符)來完成:

        <define name="anyElement">
      <element>
      <anyName>
      <except>
      <name>book</name>
      </except>
      </anyName>
      <zeroOrMore>
      <choice>
      <attribute>
      <anyName/>
      </attribute>
      <text/>
      <ref name="anyElement"/>
      </choice>
      </zeroOrMore>
      </element>
      </define>

      or:

      或者:

       anyElement = element * - book {(attribute * {text}|text|anyElement)*}

      3.9. 其他特性

      RELAX NG has some other nice features which we will not cover here and are detailed on the very good tutorial available on their web site (http://relaxng.org), such as:

      RELAX NG 有一些其他很好的特性,我們在這兒不能都提到,在它們的網站 (http://relaxng.org) 上有關于具體信息的一些非常好的教程,例如:

      • Schema composition and pattern redefinitions.
      • Namespace support
      • Annotations
      • List of values
      posted on 2004-05-24 18:51  taowen  閱讀(1236)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 老熟女重囗味hdxx69| 日本东京热一区二区三区| 国产成人精品亚洲日本在线观看| 无码人妻丰满熟妇区bbbbxxxx | 久久精品国产福利一区二区| 亚洲日韩一区二区| 久久亚洲精品无码播放| 国产精品无码一区二区桃花视频| 99RE6在线观看国产精品| 日韩中文日韩中文字幕亚| 久久亚洲AV成人网站玖玖| 国产女同疯狂作爱系列| 久久精品亚洲精品国产区| 国产午夜福利视频第三区| 免费人成视频在线视频电影| 宁国市| 亚洲人精品午夜射精日韩| 亚洲欧美国产日韩天堂区| 亚洲一区二区三区18禁| 国产一区二区三区色噜噜| 99网友自拍视频在线| 高清国产美女一级a毛片在线| 成人啪精品视频网站午夜| 视频一区二区三区四区不卡| 亚洲中文字幕在线二页| 中文国产不卡一区二区| 天堂一区二区三区av| 国产成人精品亚洲精品日日| 久久精品成人免费看| 蜜芽久久人人超碰爱香蕉| 中文字幕一区有码视三区| 啊┅┅快┅┅用力啊岳网站| 人妻少妇偷人作爱av| 国产日韩av免费无码一区二区三区| 狠狠爱五月丁香亚洲综| 宁蒗| 开心久久综合激情五月天 | 九九热精品在线观看 | 国产精品美女久久久| 亚洲色av天天天天天天| 国产一区二区三区我不卡|