Можно ли прочитать Relax NG xml в XSLT? - PullRequest
0 голосов
/ 22 марта 2012

Я хочу знать, возможно ли преобразовать Relax NG XML с помощью XSLT. Пожалуйста, дайте мне учебник.

Мне не удается сопоставить грамматический тег в схеме RelaxNG ниже с <xsl:template match="grammar">

<grammar>

  <start>
    <element name="html">
      <zeroOrMore>
        <ref name="section"/>
      </zeroOrMore>
    </element>
  </start>

  <define name="section">
    <element name="div">
      <attribute name="class"><value>section</value></attribute>
      <zeroOrMore>
        <element name="para">
          <text/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="subsection"/>
      </zeroOrMore>
   </element>
  </define>



</grammar>

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Relax NG - это язык для выражения грамматики XML. W3C XML Schema также является таким языком. XSLT, однако, является языком преобразования XML в другой формат данных. Другими словами, они охватывают разные основания. Вы действительно хотите конвертировать Relax NG в XSLT?

На домашней странице Relax NG .

вы найдете довольно много XSLT, которые можно использовать для оптимизации, преобразования и т. Д. Вашей схемы Relax NG, DTD или XML друг к другу или из нее.

Просто догадываюсь: вы, возможно, действительно захотите найти инструмент для проверки существующего XML с помощью его схемы Relax NG. Вы можете сделать это с помощью любого из валидаторов .

РЕДАКТИРОВАТЬ, основываясь на вашем последнем комментарии. Причина, по которой ваш xsl:template не попал, скорее всего, потому что вы не указали пространство имен RelaxNG. Вы не показывали ни одного своего кода, но попытайтесь применить что-то вроде следующего к вашей таблице стилей (обратите внимание, что префикс пространства имен не имеет значения и не должен присутствовать в исходном XML-документе):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ng="http://relaxng.org/ns/structure/1.0">

    <xsl:template match="ng:grammar">
        <xsl:text>Grammar found!</xsl:text>
    </xsl:template>
</xsl:stylesheet>
1 голос
/ 22 марта 2012

Вы имеете в виду, могу ли я скомпилировать схему Relax NG в таблицу стилей XSLT, которая выполняет проверку, подразумеваемую схемой?

Ответ - да, теоретически вы можете, если у вас есть хорошее пониманиетеория информатики: (а) как преобразовать грамматику БНФ в автомат с конечным состоянием, и (б) как реализовать автомат с конечным состоянием на функциональном языке программирования.

Тем не менее, я подозреваю, чтоесли бы это было то, что вы хотели сделать, то вы бы не задавали вопрос так, как вы.

...