Как получить тип данных каждого элемента из сгенерированного файла сопоставления (.js) jsonix

Таким образом, у меня есть файл xsd, как это.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="DocumentElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="Item">
                    <xs:complexType>
                        <xs:all>              
                            <xs:element name="Text_1" minOccurs="1" maxOccurs="1">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">   
                                        <xs:minLength value="2"/>                                               
                                        <xs:maxLength value="25"/>
                                        <xs:whiteSpace value="collapse"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="Text_2" minOccurs="0" maxOccurs="1">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:maxLength value="2000"/>
                                        <xs:whiteSpace value="collapse"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="Company" minOccurs="1" maxOccurs="1">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">   
                                        <xs:minLength value="2"/>                                               
                                        <xs:maxLength value="32"/>
                                        <xs:whiteSpace value="collapse"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="TaxCode" minOccurs="0" maxOccurs="1">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:maxLength value="25"/>
                                        <xs:whiteSpace value="collapse"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="Inherit" minOccurs="1" maxOccurs="1">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">                                       
                                        <xs:pattern value="0|1|true|false|True|False|TRUE|FALSE"/>
                                        <xs:maxLength value="5"/>
                                        <xs:whiteSpace value="collapse"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                        </xs:all>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Из этого xsd-файла я выполняю эту команду, чтобы получить js-файл, чтобы я мог экспортировать этот элемент в json-файл.

java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar -generateJsonSchema -d mappings -p PTSchema files/

что я получил этот результат.

var PTSchema = {
    name: 'PTSchema',
    typeInfos: [{
        localName: 'DocumentElement.Item',
        typeName: null,
        propertyInfos: [{
            name: 'text1',
            required: true,
            elementName: {
              localPart: 'Text_1'
            }
          }, {
            name: 'text2',
            elementName: {
              localPart: 'Text_2'
            }
          }, {
            name: 'company',
            required: true,
            elementName: {
              localPart: 'Company'
            }
          }, {
            name: 'taxCode',
            elementName: {
              localPart: 'TaxCode'
            }
          }, {
            name: 'inherit',
            required: true,
            elementName: {
              localPart: 'Inherit'
            }
          }]
      }, {
        localName: 'DocumentElement',
        typeName: null,
        propertyInfos: [{
            name: 'item',
            required: true,
            collection: true,
            elementName: {
              localPart: 'Item'
            },
            typeInfo: '.DocumentElement.Item'
          }]
      }],
    elementInfos: [{
        elementName: {
          localPart: 'DocumentElement'
        },
        typeInfo: '.DocumentElement'
      }]
  };

Я просто хочу получить ограничение / тип данных (как вы это называете?) Для каждого элемента, чтобы он отображался в этом результате.

{
            name: 'text1',
            required: true,
type: string,
minLength: 2,
maxLength: 25,
whiteSpace: 'collapse',
            elementName: {
              localPart: 'Text_1'
            }
          }

Это возможно?

Я уже взглянул на JSONIX: получить ограничения и значения по умолчанию для свойств, но это не помогло.

1 ответ

Насколько я вас понял, вы хотите найти тип недвижимости.

Во-первых, пожалуйста, прочитайте о свойствах в Jsonix. Существуют разные типы недвижимости. Некоторые из них однотипные (например, свойство value или атрибут-свойство), некоторые допускают другой тип (например, свойство elements).

В любом случае, независимо от того, являются ли однотипные или гетерогенные определения свойств в отображениях Jsonix, используются typeInfo атрибут для указания типа (или одного из типов) свойства.

Смотрите Типы.

Если typeInfo отсутствует в отображении, тогда тип по умолчанию String,

Если typeInfo начинается с ., он ссылается на некоторый другой тип в том же модуле отображения (имя модуля опущено).

Вы можете прочитать всю эту информацию из сопоставления (которое находится только в файле JSON). Кроме того, вы можете получить доступ к этой информации из контекста Jsonix после ее создания.

Например, возьмем это отображение:

var GH111 = {
    name: "GH111",
    dens: "urn:gh111",
    typeInfos: [{
            localName: "Root",
            propertyInfos: [{
                    name: "value",
                    type: "elements",
                    elementTypeInfos: [{
                        elementName: "a",
                        typeInfo: "String"
                    }, {
                        elementName: "b",
                        typeInfo: "Integer"
                    }]
                }]
        }],
    elementInfos: [{
            elementName: "root",
            typeInfo: ".Root"
        }]

};
module.exports.GH111 = GH111;

Вы можете найти Root.value Свойство и проверьте, какие типы он содержит:

    var context = new Jsonix.Context([GH111], {
        namespacePrefixes : {
            "urn:test" : ""
        }
    });
    var rootType = context.getTypeInfoByName("GH111.Root");
    test.equal('urn:gh111', rootType.getPropertyInfoByName("value").elementTypeInfos[0].elementName.namespaceURI);
    test.equal('Integer', rootType.getPropertyInfoByName("value").elementTypeInfos[1].typeInfo.name);
Другие вопросы по тегам