0

xsd スキーマ ファイルを使用して xml ドキュメントを検証したいと考えています。Namexml ドキュメントには Windows サービスに関する情報が含まれています。属性をService一意の値に設定したいと考えています。

xml の小さな例を次に示します。

<?xml version="1.0" encoding="utf-8"?>
<Services xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://example.de/xml/services">
  <Service Name="ALG" StartMode="Manual" State="Stopped">
    <DisplayName>xyz</DisplayName>
  </Service>
  <Service Name="AllUserInstallAgent" StartMode="Manual" State="Stopped">
    <DisplayName>xyz</DisplayName>
  </Service>
  <Service Name="AllUserInstallAgent" StartMode="Manual" State="Stopped">
    <DisplayName>xyz</DisplayName>
  </Service>
    <Service Name="AllUserInstallAgent" StartMode="Manual" State="Stopped">
    <DisplayName>xyz</DisplayName>
  </Service>
</Services>

xpathで次のことを試しました:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://example.de/xml/services" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://example.de/xml/services">
  <xsd:element name="Services">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" name="Service">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="DisplayName" type="xsd:string" />
            </xsd:sequence>
            <xsd:attribute name="Name" type="xsd:string" use="required" />
            <xsd:attribute name="StartMode" type="xsd:string" use="required" />
            <xsd:attribute name="State" type="xsd:string" use="required" />
          </xsd:complexType>
          <xs:unique name="Unique-Name">
            <xs:selector xpath="Service" />
            <xs:field xpath="@Name" />
          </xs:unique>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xs:schema>

しかし残念なことに、xml ドキュメントはまだ有効です。同じ のレコードがいくつかあることに注意してくださいName

私は何を間違えたのですか?xmlスキーマで属性を一意にする方法を見つけましたか? およびXML XSD スキーマ - スキーマで一意の属性値を適用します。ここで何が違うのですか?

4

1 に答える 1