Как добавить пользовательские атрибуты для элементов ComplexType в xsd? - PullRequest
0 голосов
/ 09 мая 2019

Я генерирую файл класса ac # из предоставленного мне XSD.Я могу сделать это без проблем, если использую только оригинальный родной XSD.Однако я хотел бы внести изменения в XSD, добавив свое собственное пространство имен, и я хотел бы передать вновь измененный XSD через генератор, чтобы создать файл класса, который содержит предоставленные мне определения классов, а также определения, которые я добавил.

Итак, насколько я понимаю, мне нужно добавить пространство имен, а также новый атрибут в этом пространстве имен.У меня есть доступ и возможность изменить исходный XSD или добавить свой собственный xsd.

Я посмотрел этот пост, похожий на Расширить XSD с помощью пользовательских атрибутов?

Пример моей попытки ниже.В моей попытке я пытаюсь добавить атрибут «Влажность» к элементу DeviceInfo в пространстве имен «mns».В настоящее время это показывает, что ошибка «mns: attribute» элемент не поддерживается в этом контексте.

test.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
       targetNamespace="http://MyNamespace.com"
       elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="DeviceInfo">
        <xs:complexType>
            <xs:attribute name="Humidity" type="xs:float" />
        </xs:complexType>
    </xs:element>
</xs:schema>

main.xsd

<xs:schema targetNamespace="http://www.CIP4.org/JDFSchema_2_0"
       xmlns="http://www.CIP4.org/JDFSchema_2_0"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mns="http://MyNamespace.com"
       xsi:schemaLocation="http://MyNamespace.com ./test.xsd"
       elementFormDefault="qualified"
       attributeFormDefault="unqualified">
<xs:element name="DeviceInfo">
    <xs:complexType>
        <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" ref="Activity"/>
            <xs:element maxOccurs="2" minOccurs="0" ref="FileSpec"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" ref="JobPhase"/>
        </xs:sequence>
        <xs:attribute name="CounterUnit" type="NMTOKEN" use="optional"/>
        <mns:Humidity value="0"/>
</xs:schema>

В настоящее время это возвращает, что элемент 'mns: влажность' не поддерживается в этом контексте.

Кто-нибудь может объяснить, как я могу вставить это в сложный тип?

Я также попытался поместить mns: Влажность в том же теге, что и deviceInfo

<xs:element name="DeviceInfo mns:Humidity="0">

Отправка этого через генератор классов произвела два отдельных экземпляра «DeviceInfo», где второй добавил 1. 1. 1024 *

Как я могу вставить егов complexType с пространством имен?

1 Ответ

0 голосов
/ 09 мая 2019

В main.xsd, в объявлении DeviceInfo, добавьте

<xs:attribute ref="mns:Humidity"/>

плюс объявление пространства имен для "mns" и объявление xs:import для этого пространства имен с schemaLocation="test.xsd".

В test.xsd включают единую декларацию

<xs:attribute name="Humidity" type="xs:float"/>

Ваша попытка решить эту проблему предполагает, что вы используете метод проб и ошибок, а не читаете, что на самом деле означают конструкции в XSD. Это не хороший путь вперед. Вы, кажется, довольно смущены концепциями, например, схема никогда не должна содержать атрибут xsi:schemaLocation.

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