Schema.org
This page covers how to use Schema.org and JSON-LD as the foundation for your metadata.
About Schema.org
Schema.org is a collaborative project that creates, maintains, and promotes structured data schemas for the internet. It provides a comprehensive vocabulary for describing digital assets and experiences.
Schema.org is used as the core vocabulary in MVMD because:
- It's widely adopted and recognized
- It provides flexible, extensible types and properties
- It works seamlessly with JSON-LD
- It has strong search engine and discovery support
Core Schema.org Types
For metaverse assets, the most important Schema.org types are:
- CreativeWork: Base type for most assets
- MediaObject/3DModel: For media content
- Place/VirtualLocation: For locations
- Event: For timed experiences
- Person/Organization: For creators and owners
For detailed information on these types, see Types of Assets.
Implementing the Schema.org Standard
Namespace Declaration
Schema.org is set as the default vocabulary using @vocab
:
{
"@context": {
"@vocab": "https://schema.org/",
"mvmd": "https://mvmd.org/v1/"
},
"@type": "CreativeWork",
"name": "Example Asset"
}
Linking Example
Basic Schema.org implementation with external resource links:
{
"@context": {
"@vocab": "https://schema.org/"
},
"@type": "3DModel",
"name": "Virtual Chair",
"contentUrl": "https://example.com/chair.glb",
"encodingFormat": "model/gltf-binary",
"creator": {
"@type": "Organization",
"name": "Virtual Furnishings Inc."
}
}
Embedding Example
Using Schema.org's structured data capabilities:
{
"@context": {
"@vocab": "https://schema.org/",
"mvmd": "https://mvmd.org/v1/"
},
"@type": "CreativeWork",
"name": "Configurable Asset",
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "renderQuality",
"name": "Render Quality",
"value": "high"
},
{
"@type": "PropertyValue",
"propertyID": "interactivity",
"name": "Interactivity Level",
"value": "full"
}
]
}
Implementation Considerations
- Required Properties: Always include
@context
with Schema.org vocabulary and@type
- Type Selection: Choose the most specific appropriate type for your asset
- Custom Properties: Use PropertyValue objects for custom data
- Structured Data: Use nested objects with proper type declarations
Related Concepts
Practical Implementation Guide
Step 1: Setting Up Your Schema
- Start with the basic context:
{
"@context": {
"@vocab": "https://schema.org/",
"mvmd": "https://mvmd.org/v1/"
}
}
- Choose your primary type:
{
"@context": {
"@vocab": "https://schema.org/",
"mvmd": "https://mvmd.org/v1/"
},
"@type": "3DModel",
"name": "My First Asset"
}
Step 2: Adding Core Properties
Add essential properties based on your type:
{
"@context": {
"@vocab": "https://schema.org/",
"mvmd": "https://mvmd.org/v1/"
},
"@type": "3DModel",
"name": "My First Asset",
"description": "A detailed description of the asset",
"dateCreated": "2024-04-02",
"creator": {
"@type": "Person",
"name": "Asset Creator",
"url": "https://creator.example.com"
},
"license": "https://creativecommons.org/licenses/by/4.0/"
}
Step 3: Handling Media and Files
Add file references and format information:
{
"@context": {
"@vocab": "https://schema.org/",
"mvmd": "https://mvmd.org/v1/"
},
"@type": "3DModel",
"name": "My First Asset",
"description": "A detailed description of the asset",
"dateCreated": "2024-04-02",
"creator": {
"@type": "Person",
"name": "Asset Creator",
"url": "https://creator.example.com"
},
"license": "https://creativecommons.org/licenses/by/4.0/",
"contentUrl": "https://example.com/asset.glb",
"encodingFormat": "model/gltf-binary",
"thumbnail": {
"@type": "ImageObject",
"contentUrl": "https://example.com/thumbnail.jpg",
"encodingFormat": "image/jpeg"
},
"associatedMedia": [
{
"@type": "ImageObject",
"contentUrl": "https://example.com/preview1.jpg",
"encodingFormat": "image/jpeg",
"caption": "Front view"
},
{
"@type": "VideoObject",
"contentUrl": "https://example.com/demo.mp4",
"encodingFormat": "video/mp4",
"description": "Product demonstration"
}
]
}
Step 4: Adding Custom Properties
Use PropertyValue for custom data:
{
"@context": {
"@vocab": "https://schema.org/",
"mvmd": "https://mvmd.org/v1/"
},
"@type": "3DModel",
"name": "My First Asset",
"description": "A detailed description of the asset",
"dateCreated": "2024-04-02",
"creator": {
"@type": "Person",
"name": "Asset Creator",
"url": "https://creator.example.com"
},
"license": "https://creativecommons.org/licenses/by/4.0/",
"contentUrl": "https://example.com/asset.glb",
"encodingFormat": "model/gltf-binary",
"thumbnail": {
"@type": "ImageObject",
"contentUrl": "https://example.com/thumbnail.jpg",
"encodingFormat": "image/jpeg"
},
"associatedMedia": [
{
"@type": "ImageObject",
"contentUrl": "https://example.com/preview1.jpg",
"encodingFormat": "image/jpeg",
"caption": "Front view"
},
{
"@type": "VideoObject",
"contentUrl": "https://example.com/demo.mp4",
"encodingFormat": "video/mp4",
"description": "Product demonstration"
}
],
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "polyCount",
"name": "Polygon Count",
"value": 12500
},
{
"@type": "PropertyValue",
"propertyID": "textureResolution",
"name": "Texture Resolution",
"value": "2048x2048"
},
{
"@type": "PropertyValue",
"propertyID": "animationCount",
"name": "Number of Animations",
"value": 3
}
]
}
Step 5: Integration with Other Standards
When integrating with other standards, maintain schema.org as the foundation:
{
"@context": {
"@vocab": "https://schema.org/",
"mvmd": "https://mvmd.org/v1/",
"gltf": "https://www.khronos.org/gltf/"
},
"@type": "3DModel",
"name": "My First Asset",
"description": "A detailed description of the asset",
"contentUrl": "https://example.com/asset.glb",
"encodingFormat": "model/gltf-binary",
"gltf:asset": {
"version": "2.0",
"generator": "ExampleStudio 2.0"
}
}
Schema.org Implementation Checklist
- Appropriate
@type
selected - All required properties included
- Properly nested objects with types
- Accurate media information
- Custom properties properly structured
- Clean, valid JSON-LD syntax