Добавление «фиксированного» ключа к ссылочному атрибуту не работает

#xml #xsd

#xml #xsd

Вопрос:

1.файл xsd:

 <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schemas.android.com/apk/res/android">
<xs:attribute name="debuggable" type="xs:string"/>
</xs:schema>
  

2.файл xsd:

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1">
    <xs:import xmlns:android="http://schemas.android.com/apk/res/android" namespace="http://schemas.android.com/apk/res/android" schemaLocation="1.xsd" />
...
            <xs:attribute ref="android:debuggable" use="optional" fixed="false" />
...
  

Когда я попытался вызвать assertValid с помощью file 2.xsd, он не смог обнаружить debuggable значение set true . Однако, когда я перейду fixed="false" к 1.xsd (все еще загружаю файл 2 как схему), это сработает. Это потому, что ключ в файле 2 ссылается на атрибут в файле 1 и не может добавить к нему дополнительные свойства? В любом случае, чтобы обойти это без изменения файла 1?

Ответ №1:

Оказалось, что есть что-то, с чем можно справиться. lxml .. и я постараюсь разобраться позже. Я заменил lxml библиотеку на xmlschema , ничего не меняя, и все работает как шарм.

assertValid in lxml возвращает true, когда is_valid in xmlschema возвращает false, довольно странный случай.

Надеюсь, это поможет кому-нибудь сэкономить немного времени, если вы когда-нибудь столкнетесь с этим.