1

私の XML データベースでは、"commentary" という名前の要素に次の 3 つの要素を含める必要があります。

  1. プレーンテキスト。
  2. いくつかの xhtml タグ
  3. 一部の TEI タグ (TEI=text encoding initiave)

例:

<commentary>
<TEI:persName>King Henry iv</TEI:persName> was an <xhtml:b>important</xhtml:b> person.
</commentary>

まず、XML スキーマでこれを宣言するにはどうすればよいですか? (申し訳ありませんが、XML スキーマで特定の XHTML タグを許可するというスレッドを見つけましたが、役に立ちませんでした。)

それから (もっと複雑だと思います) xslt (output:html) に次のことをさせたいです:

「コメント」のすべてのコンテンツを「p」要素に入れ、すべての xhtml タグを取り、それらのプレフィックスを削除して「p」に入れます。すべての TEI タグを削除しますが、その内容は保持します。

したがって、期待される結果は次のようになります。

<p>
King Henry iv was an <b>important</b> person.
</p>
4

2 に答える 2

2

これは、わずかに変更された xml で機能する XSLT です。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:TEI="urn:tei" 
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    exclude-result-prefixes="msxsl xhtml TEI"
>
    <xsl:output method="html" indent="yes"/>

  <xsl:template match="/">
    <html>
      <body>
      <xsl:apply-templates />
      </body>
    </html>
  </xsl:template>

    <xsl:template match="commentary">
      <p>
        <xsl:apply-templates />
      </p>
    </xsl:template>

  <!-- remove namepace, keep name -->
  <xsl:template match="xhtml:*">
    <xsl:element name="{local-name()}">
      <xsl:value-of select="."/>
    </xsl:element>
  </xsl:template>

  <!-- surpress nodes in a namespace -->
  <xsl:template match="TEI:*">
    <xsl:value-of select="."/>
  </xsl:template>

</xsl:stylesheet>

入力 XML:

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:TEI="urn:tei" xmlns:xhtml="http://www.w3.org/1999/xhtml" >
  <commentary>
    <TEI:persName>King Henry iv</TEI:persName> was an <xhtml:b>important</xhtml:b> person.
  </commentary>
</root>

これは、上記の xml に基づいて VS2010 が生成したスキーマです。

<xs:schema xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:TEI="urn:tei" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="urn:tei" />
  <xs:import namespace="http://www.w3.org/1999/xhtml" />
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="commentary">
          <xs:complexType mixed="true">
            <xs:sequence>
              <xs:element ref="TEI:persName" />
              <xs:element ref="xhtml:b" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

TEI スキーマ

<xs:schema xmlns:tns="urn:tei" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:tei" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="persName" type="xs:string" />
</xs:schema>
于 2013-11-05T20:49:05.927 に答える