Вот простой пример XSD + XML. Как заставить валидацию работать? - PullRequest
0 голосов
/ 22 марта 2020

У меня есть XSD с двумя определенными типами и простой XML для проверки. Сообщение об ошибке:

src-resolve: Cannot resolve the name 'colorType' to a(n) 'type definition' component

, и есть несколько вопросов с этим сообщением об ошибке, но обстоятельства кажутся другими. Кроме того, примеры документов, как правило, большие, и у меня проблемы с просмотром соответствующих частей. Итак, вот простой.

XSD (с именем svg_export_test.xsd):

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="test"
  attributeFormDefault="unqualified" 
  elementFormDefault="qualified">

<xs:element name="colorType">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="#[0-9A-Fa-f]{8}"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

<xs:element name="clothingType">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="color" type="colorType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

XML (с именем svg_export_test.xml в той же папке):

<?xml version="1.0"?>
<t:clothingType xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
  xs:schemaLocation="svg_export_test.xsd"
  xmlns:t="test"
  >
  <t:name>Shirt</t:name>
  <t:color>#00000000</t:color>
</t:clothingType>

1 Ответ

1 голос
/ 22 марта 2020

Во-первых, вы сказали type="colorType", но colorType не тип, это объявление элемента. Вам нужно <xs:simpleType name="colorType"> на верхнем уровне вашей схемы, чтобы это работало.

Во-вторых, если вы добавите это, тип colorType будет находиться в пространстве имен test, поэтому, чтобы обратиться к нему, вам нужно использовать type="t:colorType", где префикс пространства имен t связан с пространством имен test (добавьте xmlns:t="test" к вашему xs:schema элементу)

Тогда исправленный XSD будет

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="test" xmlns:t="test"
  attributeFormDefault="unqualified" 
  elementFormDefault="qualified">

<xs:simpleType name="colorType">
  <xs:restriction base="xs:string">
    <xs:pattern value="#[0-9A-Fa-f]{8}"/>
  </xs:restriction>
</xs:simpleType>

<xs:element name="clothingType">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="color" type="t:colorType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...