Мне сложно проверить мою схему XML.
Validome Валидатор XML-схемы выдает мне следующую ошибку:
Attribute 'use' is not permitted to appear in element 'xs:attribute'.
для строки
<xs:attribute name="graphtype" use="required">
Меня удивляет, поскольку определено в спецификации как атрибут xsd xs:attribute
.
Я попытался определить свои внешние элементы xs:attribute
следующим образом:
<xs:attribute name="graphtype">
...
</xs:attribute>
и ссылаться на него в своей схеме следующим образом:
<xs:attribute ref="graphtype" use="required" />
Но тогда Validome сообщает мнечто ref
недопустимо в xs:attribute
, однако name
необходимо.Что опять-таки полная чушь в моей книге.
Это мое первое приключение с XML-схемой, так что я немного озадачен.
На заметку: что за дело, в сущности, нет(официальный) XSD-валидатор?
Как я должен проверять XML с помощью XSD , если я не могу проверить свой XSD на первом месте? WTF?
(просто чтобы прояснить: это не настоящий вопрос. Но все же, WTF? )
Вотмоя схема:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://example.com" targetNamespace="http://example.com" elementFormDefault="qualified">
<xs:element name="dlgkml">
<xs:complexType>
<xs:sequence>
<!--graphs-->
<xs:element name="graphs">
<xs:complexType>
<xs:all>
<xs:element name="graph" minOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="data" type="xs:byte" />
</xs:all>
<xs:attribute name="id" type="xs:nonNegativeInteger" use="required" />
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<!--vertices-->
<xs:element name="vertices">
<xs:complexType>
<xs:sequence>
<xs:element name="vertex" minOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="owners">
<xs:complexType>
<xs:all>
<xs:element name="id" minOccurs="1">
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="data" type="xs:byte" />
<xs:attribute name="id" type="xs:nonNegativeInteger" use="required" />
<xs:attribute name="capacity" type="xs:double" default="0.0" />
<xs:attribute name="size" type="xs:double" default="0.0" />
<xs:attribute name="weight" type="xs:double" default="0.0" />
<xs:attribute name="graphtype" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="hypergraph" />
<xs:enumeration value="graph" />
<xs:enumeration value="tree" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--edges-->
<xs:element name="edges">
<xs:complexType>
<xs:sequence>
<xs:element name="edge" minOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="tail">
<xs:complexType>
<xs:all>
<xs:element name="id" minOccurs="1" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="head">
<xs:complexType>
<xs:all>
<xs:element name="id" minOccurs="1" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="owners">
<xs:complexType>
<xs:all>
<xs:element name="id" minOccurs="1" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="data" type="xs:byte" />
</xs:all>
<xs:attribute name="id" type="xs:nonNegativeInteger" use="required" />
<xs:attribute name="capacity" type="xs:double" default="0.0" />
<xs:attribute name="size" type="xs:double" default="0.0" />
<xs:attribute name="weight" type="xs:double" default="0.0" />
<xs:attribute ref="graphtype" use="required" />
<xs:attribute name="edgetype" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="undirected" />
<xs:enumeration value="directed" />
<xs:enumeration value="bidirected" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>