1

RELAX NG構造でxmlを検証しようとしています。

私は次のようなバリエーションを試しました:

<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
    <start>
        <element name="rss" version="2.0" xmlns:g="http://base.google.com/ns/1.0">
            <element name="channel">
                <element name="title">
                    <data type="token"/>
                </element>

                <element name="description">
                    <data type="token"/>
                </element>

                <element name="link">
                    <data type="anyURI"/>
                </element>

                <oneOrMore>
                    <element name="item">
                        <element name="g:id">
                            <data type="long"/>
                        </element>

                        <element name="title">
                            <data type="token"/>
                        </element>

最初の問題は、タグ "g:id" を解釈するときです。たとえば、rss要素にxmlns:g="http://base.google.com/ns/1.0"を入れて解決しました。

しかし、マニュアルでわかるように、rss 要素タグにもversion="2.0"を配置する必要があります。しかし、私が使用しようとすると

<element name="rss" version="2.0" xmlns:g="http://base.google.com/ns/1.0">

エラーが発生します:

PHP Warning:  DOMDocument::relaxNGValidate(): Unknown attribute version on element in ...

私が使用する場合

<element name="rss" xmlns:g="http://base.google.com/ns/1.0">

エラーはありませんが、マニュアルではversion="2.0"が必要です。

どうすればこれを解決できますか?

4

1 に答える 1

1

私は自分自身で解決策を見つけました

以下の例:

<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
    <start>
        <element name="rss" xmlns:g="http://base.google.com/ns/1.0">
            <attribute name="version">
                <data type="decimal"/>
            </attribute>
            <element name="channel">
                <element name="title">
                    <data type="token"/>
                </element>

                <element name="description">
                    <data type="token"/>
                </element>

                <element name="link">
                    <data type="anyURI"/>
                </element>

                <oneOrMore>
                    <element name="item">
                        <element name="g:id">
                            <data type="long"/>
                        </element>

                        <element name="title">
                            <data type="token"/>
                        </element>
于 2013-06-05T17:03:30.187 に答える