XSDを使用してXMLの条件付き検証を作成します。要素Unitが "uri"で、要素Valueに "http"が含まれていなければなりません。要素Unitが "date"の場合、要素Valueはタイムスタンプでなければなりません。 xs:assertを使って動作していません。私はすでにxs:assertionをテストしましたが、同じエラーが発生しました。アサーションにはXSDが含まれています
xmllint --noout --schema metadata.xsd metadata.xml
metadata.xsd:46: element assert: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}complexType': The content is not valid. Expected is (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?)))).
WXS schema metadata.xsd failed to compile
。
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="metadata">
<xs:complexType>
<xs:sequence>
<xs:element name="AVU" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Target" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="1088"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Attribute">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="2700"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="http://.*"/>
<xs:maxLength value="2700"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Unit">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="uri|string|integer|date|float"/>
<xs:maxLength value="250"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:assert test="Unit = 'uri'" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
気をつけろ! ''はXMLスキーマ1.1でのみ利用可能です。バージョン1.0のあなたのスキーマ(暗黙的に)。 xmllintがXSD v1.1を処理できることを確認してください.... –
potame