次の(不十分に設計された?)XMLドキュメントを検討してください。
<?xml version="1.0" ?>
<command_result>
<param name="protocol_version" value="3"/>
<param name="player_state" value="navigator"/>
</command_result>
私がやりたいのは、value
属性の実際の値に基づいて属性のデータ型を指定するXMLスキーマ(XSD形式)を作成することname
です。
例(擬似コード):
if (param name = "protocol_version") then (param value type="xs:integer")
if (param name = "player_state") then (param value type="xs:string")
ソースXMLを変更せずに、スキーマファイルにそのような条件付きステートメントを導入する方法はありますか?私はさまざまな解決策を見てきましたが、それらはすべて、何らかの方法でソースを変更する必要がありました(たとえば、xsi:typeの設定)。
編集
私の現在のスキーマ:
<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="command_result">
<xs:complexType>
<xs:sequence>
<xs:element name="param" minOccurs="2" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<!-- the following line needs to be modified somehow -->
<xs:attribute name="value" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>