3

これを検証しようとします (XSD : http://www.imsglobal.org/xsd/imsrdceo_rootv1p0.xsd ):

<?xml version="1.0" encoding="utf-8"?>
<rdceo xmlns="http://www.imsglobal.org/xsd/imsrdceo_rootv1p0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imsrdceo_rootv1p0 http://www.imsglobal.org/xsd/imsrdceo_rootv1p0.xsd http://www.w3.org/XML/1998/namespace http://www.w3.org/2001/xml.xsd">
    <identifier>5040d336776eb</identifier>
    <title>
        <langstring xml:lang="en">titre</langstring>
    </title>
</rdceo>

しかし、それは言います(さまざまなサイトと私のPHPコードで):

属性「xml:lang」は許可されていません

これが私のPHPコードです。

<?php

class RDCEOObjectiveBuilder {

    public  $id,
            $title,
            $description;

    public function build() {
        $dom = new DOMDocument('1.0', 'utf-8');

        $root = $dom->createElementNS(
            'http://www.imsglobal.org/xsd/imsrdceo_rootv1p0',
            'rdceo'
        );
        $root->setAttributeNS(
            'http://www.w3.org/2000/xmlns/' ,
            'xmlns:xsi',
            'http://www.w3.org/2001/XMLSchema-instance'
        );
        $root->setAttributeNS(
            'http://www.w3.org/2001/XMLSchema-instance',
            'xsi:schemaLocation',
            'http://www.imsglobal.org/xsd/imsrdceo_rootv1p0 http://www.imsglobal.org/xsd/imsrdceo_rootv1p0.xsd http://www.w3.org/XML/1998/namespace http://www.w3.org/2001/xml.xsd'
        );

        $id = $dom->createElementNS('http://www.imsglobal.org/xsd/imsrdceo_rootv1p0', 'identifier', $this->id);

        $title = $dom->createElementNS('http://www.imsglobal.org/xsd/imsrdceo_rootv1p0', 'title');
        $title_lang = $dom->createElementNS('http://www.imsglobal.org/xsd/imsrdceo_rootv1p0', 'langstring', $this->title);
        $title_lang->appendChild(new DOMAttr('xml:lang', 'en'));
        $title->appendChild($title_lang);

        $root->appendChild($id);
        $root->appendChild($title);
        $dom->appendChild($root);

        $dom->schemaValidate('imsrdceo_rootv1p0.xsd');
        $dom->formatOutput = true;
        return $dom->saveXML();
    }
}

$test = new RDCEOObjectiveBuilder();
$test->id = uniqid();
$test->title = 'titre';
echo $test->build();
?>

が許可されない理由がわかりません... http://www.imsglobal.org/competencies/ (xsd を作成した人) のxml:langすべての例で、彼らは使用していますxml:lang

例: http://www.imsglobal.org/competencies/Examples/MadeUp_Examplev1.xml

なぜか教えてくれますか ?どうもありがとう !

4

2 に答える 2

3

要素langstringは次のように定義されます。

<xs:anyAttribute namespace="##other" processContents="strict"/>

これは、スキーマにその属性の属性宣言がある場合にのみ、別の名前空間からの属性を許可することを意味します。これらは XML 名前空間のスキーマをインポートしないため、スキーマに xml:lang を含めるアクションを実行しない限り、スキーマに xml:lang の宣言はありません。私はあなたが使用している PHP インターフェイスに詳しくないので、それを実現するための最良の方法を教えることはできませんが、1 つの方法は、imsglobal スキーマと XML 名前空間のスキーマの両方をインポートするスキーマ ドキュメント D を定義することです。 、インスタンスを検証するスキーマとして D を使用します。

もう 1 つの方法は、引用された例が行う方法です。インスタンス ドキュメントの xsi:schemaLocation 属性から XML 名前空間を参照します。

于 2012-08-31T19:01:36.040 に答える
1

ここで重要なことは、langstring要素で xs:anyAttribute を使用することです。これはstrictである処理句であり、どのように動作するxml:langはずです。

strict、XML プロセッサが必要な名前空間のスキーマを取得し、それらの名前空間の属性を検証する必要があることを意味します。

つまり、適切な XML スキーマ プロセッサには、私が基本スキーマと呼ぶもののサポートが組み込まれているはずです。xml:lang を記述するxml.xsdはその 1 つにすぎません。

私の場合、QTAssistantを使用すると、XML は正常に検証されます。

スキーマの場所がなくても、他のプロセッサ (スキーマの作成者) がhttp://www.w3.org/XML/1998/namespaceにxsd:import を含めていれば、他のプロセッサの助けになったと言えます。、さらには、i18n の対象となるコンテンツの xml:land 属性を明示的に参照することさえあります。

しかし、彼らはそうしませんでした...今できることは、自分とxml.xsdの両方をインポートする別のXSDを作成して使用することであり、問​​題ありません。注意すべきことではありませんが、 http://www.w3.org/2001/03/xml.xsdスキーマの場所にインポートしないでください。そのリンクは調整されており、タイムアウトが発生します。ローカル コピーを作成してから、そのコピーに移動します。このようなもの:

<?xml version="1.0" encoding="utf-8" ?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:import schemaLocation="..." namespace="http://www.imsglobal.org/xsd/imsrdceo_rootv1p0"/>
    <xsd:import schemaLocation="..." namespace="http://www.w3.org/XML/1998/namespace"/>
</xsd:schema>

rdceo の QTAssistant ダイアグラム

于 2012-08-31T19:05:10.410 に答える