После успешной настройки кэша схемы Visual Studio (2017 CE) (catalog.xml) для разрешения пространства имен в xsd ..
.. дополнительное присутствие тега xsi: schemaLocation в документе Xml предотвратитиспользование кэша. Похоже, что schemaLocation имеет приоритет над кэшем схемы, но если / когда xsd не найден локально, то разрешение просто прерывается и кэш даже не используется.
введите описание изображения здесь
В catalog.xml
<SchemaCatalog xmlns="http://schemas.microsoft.com/xsd/catalog">
<Catalog href="file://d:/work/test/schemas/cat2.xml"/>
cat2.xml
<?xml version="1.0" encoding="utf-8"?>
<SchemaCatalog xmlns="http://schemas.microsoft.com/xsd/catalog">
<Schema href="file:///D:/work/test/test.xsd" targetNamespace="http://test.org/schema/r1.0" />
</SchemaCatalog>
test.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://test.org/schema/r1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="a" type="xs:string" />
<xs:element name="b">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="myattr" type="xs:unsignedByte" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="d" />
<xs:element name="c" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Все работает хорошо ... схема взята из cat2.xsd
Но если xml содержит явный тег schemaLocation, xsd больше не применяется.
Теперь он просто сдается после того, как не может найти test.xsd в той же папке, что и test.xml (больше не генерирует ошибку, схема не применяется)
Есть ли исправления или обходные путидля этого? у меня большой проект с человекомy XML-файлы во многих папках и удаление тега schemaLocation не вариант, так как это указано в проблемной области.
TIA, Duncan