web-dev-qa-db-ja.com

xml:.xmlファイルで.xsdファイルを参照する方法

.xsdファイルで定義したとおり、ブラウザーでxmlファイルを表示したい。次の2つのファイルを確認して、何をする必要があるかを指摘してください。これらの2つのファイルは同じフォルダーの下にあります。

employee.xml

 <?xml version="1.0"?>

<employee xmlns="http://www.w3schools.com" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="employee.xsd">

  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

employee.xsd

<xs:element name="employee">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string" fixed="red" />
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
29
RedsDevils

2つのエラーが発生しました。1つはスキーマファイルにあり、もう1つはXMLファイルのxsi:schemaLocation属性の値の構文にあります。

主なエラーは、employee.xsdファイルがXMLスキーマのフラグメントにすぎないことです。 employee.xsdの包含を完了する必要があります。例えば、

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://www.w3schools.com/RedsDevils"
    elementFormDefault="qualified"
    xmlns="http://www.w3schools.com/RedsDevils employee.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="employee">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="firstname" type="xs:string" fixed="red" />
                <xs:element name="lastname" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

およびemployee.xml:

<?xml version="1.0" encoding="utf-8"?>
<employee xmlns="http://www.w3schools.com/RedsDevils"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.w3schools.com/RedsDevils employee.xsd">

    <firstname>John</firstname>
    <lastname>Smith</lastname>
</employee>

XMLファイルでデフォルトの名前空間を定義するため、スキーマの場所属性xsi:schemaLocationは、名前空間と、空白で区切られたスキーマへのパスで構成する必要があります。 "http://www.w3schools.com/RedsDevils"の代わりに"http://www.w3schools.com"のように名前空間名をもう少し一意になるように変更しました。

最後に、XMLファイルemployee.xmlがスキーマemployee.xsdに対応していないことを追加できます。これは、要素<firstname>John</firstname>の値がred以外の値になっているためですが、おそらくこれはテストしたいものです。

40
Oleg