Недопустимое значение для атрибута xsi: type - PullRequest
0 голосов
/ 10 июля 2020

РЕДАКТИРОВАТЬ 13/07/2020:

То, что я пытаюсь достичь, это проверить 3 элемента в XML. Элемент DocumentId всегда будет содержать строку, элемент ID всегда будет содержать строку, а element01 всегда будет содержать строку и иметь атрибут xsi:type="ns11:creditNote". Элемент Document и DocumentList могут иметь любые атрибуты из любых пространств имен.

3 элемента для проверки:

  • /po:DocumentList/po:Document/po:DocumentId
  • /po:DocumentList/po:Document/po:ID
  • /po:DocumentList/po:Document/po:element01 с атрибутом xsi:type="ns11:creditNote"

Это XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<po:DocumentList xmlns:po="http://www.example.com/PO1" 
xmlns:ns11="urn:oasis:names:specification:ubl:schema:xsd:Invoice-1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/PO1 Main.xsd" indexing="false" numPages="2" pageId="0" itemsPerPage="2" itemCount="3">
    <po:Document>
        <po:DocumentId>b6f066ea-1d48-566c-967a-f81a2d935d59</po:DocumentId>
        <po:ID>documents/b6f066ea-1d48-566c-967a-f81a2d935d59</po:ID>       
        <po:element01 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns11:creditNote">documents/b6f066ea-1d48-566c-967a-f81a2d935d59</po:element01>
    </po:Document>
</po:DocumentList>

Я создал основной файл XSD (Main.xsd) для пространство имен http://www.example.com/PO1:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="XMLSchema-versioning" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:po="http://www.example.com/PO1" xmlns:ns11="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" targetNamespace="http://www.example.com/PO1" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
    <xs:import namespace="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" schemaLocation="Main_Sub_1.xsd"/>
    <xs:element name="DocumentList">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Document">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="DocumentId" type="xs:string" minOccurs="1" maxOccurs="1"/>
                            <xs:element name="ID" type="xs:string" minOccurs="1" maxOccurs="1"/>
                            <xs:element name="element01" type="ns11:creditNote"/>
                        </xs:sequence>
                        <xs:anyAttribute processContents="skip"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:anyAttribute processContents="skip"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

И я создал другой файл Main_Sub_1.xsd для пространства имен urn:oasis:names:specification:ubl:schema:xsd:Invoice-2:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" attributeFormDefault="qualified" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns11="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
    <xs:simpleType name="creditNote">
        <xs:restriction base="xs:string">
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

Однако, когда я пытаюсь проверить основной файл XSD, я получаю эта ошибка:

«'ns11: creditNote' должен относиться к существующему простому или сложному типу.»

Я провел несколько экспериментов и попытался изменить пространство имен urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 на "test01", и он работает, но как только я использую эту c урну, выдается ошибка.

Я видел, что урна указывает на схему xsd, которую можно просмотреть здесь: https://schemas.liquid-technologies.com/oasis/ubl/2.0/?page=ubl-invoice-2_0_xsd.html

Итак, я предполагаю, что валидатор, когда вижу это пространство имен, вместо того, чтобы импортировать мой файл с типом кредита Примечание, которое я создал ed, просматривает файл на удаленном сервере, для которого не определен тип creditNote. У меня нет большого опыта работы с XML и XSD, но поскольку замена урны на что-то еще заставляет мою проверку работать, я так понял это.

Как я могу исправить эту ошибку?

1 Ответ

0 голосов
/ 11 июля 2020

Я хочу проверить 2 определенных c элемента в моем XML и разрешить добавление любых других атрибутов и элементов.

Вы должны быть очень конкретными c about где должны появиться эти дополнительные теги / атрибуты. Лучший способ сделать это - отредактировать свой вопрос и добавить несколько примеров сообщений, показывающих дополнительный контент.

при попытке проверить XML у меня появляется ошибка: «Value 'ns11: CreditNote 'не допускается для атрибута' xsi: type '. "

Вы утверждаете, что тег' po: DocumentList 'соответствует определению типа с именем creditNote в пространстве имен urn:oasis:names:specification:ubl:schema:xsd:Invoice-2. Но вы не определили этот тип. Фактически, вы даже не импортировали XSD, у которого есть это targetNamespace.

Вы действительно пытались переопределить тип po: DocumentList? Или вы пытались задействовать тип «creditNote» для какой-то другой цели?

Таким образом, ваш вопрос наводит на мысль о некоторой путанице относительно того, как определять и использовать механизмы расширения XML схемы. Рад помочь, если вы немного проясните вопрос.

...